Professor Oops

Dough, mould and time

Dough, mould and time

Dough rises, mould spreads and cress sprouts, and a button skips three days ahead

Mix flour and water on the page and you have dough. Sprinkle yeast on it and keep it warm, and it rises, as slowly as real dough does. Leave ketchup out and it grows fuzzy mould; leave honey out and it doesn't. Water some cress seeds and they come up. Some of this takes days, so the game has a "Wait 3 days" button, and it works out what those days would do instead of playing them.

Painted illustration of the painter peering through a magnifying glass at bread and a strawberry with fuzzy mould spots, beside a calendar with three days crossed off.

Kneaded dough holds its shape, keeps a dent and traps the gas that makes it rise

Dough on the page isn't a picture of dough. Sieve flour onto a wet patch and it turns into a soft lump. From then on, each tiny spot of that lump keeps track of what's in it: how much of it is gas, how much live yeast it holds, how much salt and sugar went in, how many sheets of butter are folded through it, and how stretchy it has become.

Knead it with your finger and it gets stretchier. Stretchy dough holds its shape, so a stamp or a toy car leaves a dent that stays. It also holds on to gas. That one number decides most of what happens next: kneaded dough keeps most of the gas the yeast makes and rises, while a shaggy, unkneaded lump lets most of it escape and spreads sideways. Seen from above, an hour's rise hardly shows; what you do see is the kneaded lump gone smooth and the other still shaggy.

Any sliding contact kneads: a hand rubbed across the dough works it, while a ball rolling over it only presses, and a test pins the difference. The rolling pin and a fold work it too.

Outside the table of materials and the sieve's list of what it sifts, the simulation never names dough, flour or yeast. Dough's behaviour comes from columns in that table (how well it kneads, how much gas it holds), so by our reading a second kind of dough would need only one more row. There isn't one yet to prove it.

Dough rises, mould spreads and cress sprouts, and a button skips three days ahead

For engineers

Dough rises, mould spreads and cress sprouts, and a button skips three days ahead

Dough is goop with a few extra amounts per unit of height (gas, yeast, salt, sugar, sheets of fat, flour dust), and its gluten is goop's own set part. Yeast makes gas at a rate set by warmth, salt and sugar, and the gluten keeps a share of it through a closed-form solution, so a long step stays exact without many small ones. A mould colony's size is a formula of its age, so three days is one evaluation. Every wait, the oven, the freezer and a week in the sun run one recipe, given only a temperature and a number of hours, in slices of about 6 ms inside the Web Worker. A test holds the sliced result bit-identical to running it in one go.

Under the hood
Kneaded dough holds its shape, keeps a dent and traps the gas that makes it rise

Under the hood

Kneaded dough holds its shape, keeps a dent and traps the gas that makes it rise

A dough spot is an ordinary goop spot, the same kind that holds paint or ketchup, with a handful of extra amounts that travel with it when it flows: how much is gas, the live yeast, salt, sugar, sheets of fat, and dry flour lying on its face.

They're kept per unit of height. When a spot rises, the same amounts are spread through more height, so a rise or a squash never creates or loses yeast or salt.

Gluten is goop's own set part. Every runny thing in the game already has a share that has set, and the movers and the save file already carry and respect it. For dough, that share is the gluten. Reusing it is why kneaded dough holds a dome and keeps a dent with no dough code in the movers at all.

Kneading moves the gluten towards its ceiling, quickly at first and then more slowly, in proportion to the work done: how hard, over how much of the dough, and how far it moved. Any sliding contact counts. The rolling pin and a fold build gluten without smearing the fat.

Try it: prove a dough The game's own rule

A kneaded dough with one dose of yeast proving at 30 °C, two hours a second; the faint curve is its whole future. Move the warmth, knead it less (0.15 is shaggy), or change what's in it. What to look for: it doubles in about an hour at 30 °C and tops out near 2.45 times its size at any warmth from 3 to 50 °C, then tears and sinks. Hotter than 50 °C the yeast dies before the dough gets far. Unkneaded dough stops below 1.7 times and spreads wider. This is the game's own yeast rule for one spot; the dome follows the game's own spreading rule, and the pores are drawn.

A dough proving: its dome on the left, its volume over 48 hours on the right
  • 1.0×
  • 1.5×
  • 2.0×
  • 2.5×
  • 0 h
  • 24 h
  • 48 h
  • volume × start
30 °C
0.90
In it
proving for
—
the dough is
—
volume
—
gas share
—
gluten
—
live yeast
—
peak
—
peak at
—
Kneaded dough rises to about 2.45× at every warmth shown, then sinksPinned by a test: 30 °C for an hour gives 1.7 to 2.3× (here 1.85×), 15 °C 1.1 to 1.5×.

At 30 °C it reaches 1.86× in an hour and peaks at 2.46× after 4.0 h; at 5 °C it peaks at 2.42× only after 29.7 h.

Kneaded dough rises to about 2.45× at every warmth shown, then sinks1.01.52.02.505101520253035hoursvolume × startKneaded dough rises to about 2.45× at every warmth shown, then sinks1.01.52.02.50102030hoursvolume × start
  • 5 °C
  • 20 °C
  • 30 °C
  • 35 °C
Data table
Kneaded dough rises to about 2.45× at every warmth shown, then sinks
hours5 °C20 °C30 °C35 °C
01111
0.1671.0391.1251.2571.358
0.3331.0751.2291.4371.58
0.51.111.3181.5751.74
0.6671.1421.3951.6861.863
0.8331.1731.4631.7791.963
11.2021.5251.8582.046
1.1671.231.581.9272.117
1.3331.2571.631.9872.178
1.51.2821.6772.0412.231
1.6671.3071.722.0892.279
1.8331.331.7592.1332.321
21.3531.7962.1732.359
2.1671.3741.8312.2092.394
2.3331.3951.8632.2422.425
2.51.4161.8942.2732.45
2.6671.4351.9232.3022.465
2.8331.4541.9512.3292.459
31.4731.9762.3542.406
3.1671.4912.0012.3772.307
3.3331.5082.0242.3992.193
3.51.5252.0472.4192.093
3.6671.5412.0682.4362.008
3.8331.5572.0882.4481.936
41.5732.1082.4551.874
4.1671.5882.1272.451.82
4.3331.6022.1452.4271.774
4.51.6172.1622.3721.736
4.6671.6312.1782.2841.708
4.8331.6442.1942.1891.688
51.6582.212.0961.673
5.1671.6712.2242.0111.662
5.3331.6832.2391.9381.653
5.51.6962.2531.8761.646
5.6671.7082.2661.8221.641
5.8331.722.2791.7751.637
61.7312.2921.7371.633
6.1671.7432.3041.7091.63
6.3331.7542.3151.6881.628
6.51.7652.3271.6721.625
6.6671.7762.3381.6611.624
6.8331.7862.3491.6521.622
71.7972.3591.6451.62
7.1671.8072.371.6391.619
7.3331.8172.3791.6351.618
7.51.8262.3891.6311.617
7.6671.8362.3981.6281.616
7.8331.8452.4061.6251.615
81.8552.4141.6231.615
8.1671.8642.4211.6211.614
8.3331.8732.4271.6191.613
8.51.8812.4321.6171.613
8.6671.892.4361.6161.612
8.8331.8982.4381.6151.612
91.9072.4381.6141.611
9.1671.9152.4361.6131.611
9.3331.9232.4321.6121.61
9.51.9312.4241.6111.61
9.6671.9392.4121.6111.609
9.8331.9472.3951.611.609
101.9542.3741.6091.609
10.1671.9622.3461.6091.608
10.3331.9692.3121.6081.608
10.51.9762.2721.6081.608
10.6671.9832.2271.6071.607
10.8331.992.1771.6071.607
111.9972.1251.6071.607
11.1672.0042.0711.6061.606
11.3332.0112.0171.6061.606
11.52.0181.9651.6061.606
11.6672.0241.9151.6051.606
11.8332.0311.8681.6051.605
122.0371.8251.6051.605
12.1672.0431.7851.6041.605
12.3332.0491.7491.6041.605
12.52.0561.7171.6041.604
12.6672.0621.6931.6041.604
12.8332.0681.6761.6031.604
132.0741.6631.6031.604
13.1672.0791.6521.6031.604
13.3332.0851.6441.6031.603
13.52.0911.6381.6021.603
13.6672.0961.6321.6021.603
13.8332.1021.6281.6021.603
142.1071.6241.6021.602
14.1672.1131.6211.6021.602
14.3332.1181.6181.6011.602
14.52.1231.6161.6011.602
14.6672.1291.6141.6011.602
14.8332.1341.6121.6011.602
152.1391.611.6011.601
15.1672.1441.6091.6011.601
15.3332.1491.6081.61.601
15.52.1541.6071.61.601
15.6672.1591.6061.61.601
15.8332.1641.6051.61.6
162.1681.6041.61.6
16.1672.1731.6031.61.6
16.3332.1781.6031.5991.6
16.52.1821.6021.5991.6
16.6672.1871.6011.5991.6
16.8332.1911.6011.5991.599
172.1961.61.5991.599
17.1672.21.61.5991.599
17.3332.2051.5991.5981.599
17.52.2091.5991.5981.599
17.6672.2131.5991.5981.599
17.8332.2181.5981.5981.599
182.2221.5981.5981.598
18.1672.2261.5981.5981.598
18.3332.231.5981.5981.598
18.52.2341.5971.5981.598
18.6672.2381.5971.5971.598
18.8332.2421.5971.5971.598
192.2461.5971.5971.598
19.1672.251.5961.5971.597
19.3332.2541.5961.5971.597
19.52.2581.5961.5971.597
19.6672.2621.5961.5971.597
19.8332.2651.5961.5971.597
202.2691.5951.5961.597
20.1672.2731.5951.5961.597
20.3332.2771.5951.5961.597
20.52.281.5951.5961.596
20.6672.2841.5951.5961.596
20.8332.2871.5951.5961.596
212.2911.5951.5961.596
21.1672.2941.5951.5961.596
21.3332.2981.5941.5951.596
21.52.3011.5941.5951.596
21.6672.3051.5941.5951.596
21.8332.3081.5941.5951.596
222.3111.5941.5951.595
22.1672.3151.5941.5951.595
22.3332.3181.5941.5951.595
22.52.3211.5941.5951.595
22.6672.3251.5931.5951.595
22.8332.3281.5931.5951.595
232.3311.5931.5941.595
23.1672.3341.5931.5941.595
23.3332.3371.5931.5941.595
23.52.341.5931.5941.595
23.6672.3441.5931.5941.594
23.8332.3471.5931.5941.594
242.351.5931.5941.594
24.1672.3531.5931.5941.594
24.3332.3561.5931.5941.594
24.52.3591.5921.5941.594
24.6672.3621.5921.5941.594
24.8332.3651.5921.5931.594
252.3671.5921.5931.594
25.1672.371.5921.5931.594
25.3332.3731.5921.5931.593
25.52.3761.5921.5931.593
25.6672.3781.5921.5931.593
25.8332.3811.5921.5931.593
262.3841.5921.5931.593
26.1672.3861.5921.5931.593
26.3332.3891.5921.5931.593
26.52.3911.5911.5931.593
26.6672.3931.5911.5931.593
26.8332.3951.5911.5921.593
272.3971.5911.5921.593
27.1672.3991.5911.5921.593
27.3332.4011.5911.5921.592
27.52.4031.5911.5921.592
27.6672.4051.5911.5921.592
27.8332.4071.5911.5921.592
282.4081.5911.5921.592
28.1672.4091.5911.5921.592
28.3332.4111.5911.5921.592
28.52.4121.5911.5921.592
28.6672.4131.5911.5921.592
28.8332.4141.5911.5921.592
292.4151.591.5911.592
29.1672.4151.591.5911.592
29.3332.4161.591.5911.592
29.52.4161.591.5911.591
29.6672.4171.591.5911.591
29.8332.4171.591.5911.591
302.4171.591.5911.591
30.1672.4171.591.5911.591
30.3332.4161.591.5911.591
30.52.4161.591.5911.591
30.6672.4161.591.5911.591
30.8332.4151.591.5911.591
312.4141.591.5911.591
31.1672.4131.591.5911.591
31.3332.4121.591.591.591
31.52.4111.591.591.591
31.6672.411.5891.591.591
31.8332.4081.5891.591.591
322.4071.5891.591.59
32.1672.4051.5891.591.59
32.3332.4041.5891.591.59
32.52.4021.5891.591.59
32.6672.41.5891.591.59
32.8332.3981.5891.591.59
332.3961.5891.591.59
33.1672.3931.5891.591.59
33.3332.3911.5891.591.59
33.52.3891.5891.591.59
33.6672.3861.5891.591.59
33.8332.3831.5891.591.59
342.3811.5891.5891.59
34.1672.3781.5891.5891.59
34.3332.3751.5891.5891.59
34.52.3721.5891.5891.59
34.6672.3691.5881.5891.589
34.8332.3661.5881.5891.589
352.3631.5881.5891.589
35.1672.361.5881.5891.589
35.3332.3571.5881.5891.589
35.52.3541.5881.5891.589
35.6672.351.5881.5891.589
35.8332.3471.5881.5891.589
362.3441.5881.5891.589

Source: One spot, well kneaded, one dose of yeast, no salt. Worked out on this page with the game's own yeast rule, in 10-minute steps.

Warm dough rises fast, cold dough barely rises, and too much heat kills the yeast

Yeast in the game makes gas at a rate set by how warm it is. It's at its best around 35 °C, slows steadily as it cools and stops near freezing. Above its best it slows again and stops making gas well before boiling. From about 50 °C the heat also starts killing it, and the hotter it gets the faster that goes: a couple of minutes in the low sixties leaves almost none alive, which a test checks. A freezer only pauses it. Thaw the dough and warm it, and it rises; a test checks that too.

Salt draws water out of yeast, so salty dough rises more slowly, and very salty dough hardly at all. Sugar feeds it: a little makes it busier, but a lot draws water out just as salt does, so a very sweet dough starts slower than a plain one. The yeast eats as it goes, so a rise never runs on forever.

Real baker's yeast grows best at a little over 32 °C, a published measurement found after the game was built Salvadó 2011. Our 35 °C is a touch warmer. The paper measures growth, and the game models how fast the yeast makes gas, so it's a consistent neighbour, not a calibration.

Leave a dough far too long and it over-proves: once the gas has stretched the gluten close to its limit, more gas tears it, and the dough sinks back part of the way.

Under the hood
Warm dough rises fast, cold dough barely rises, and too much heat kills the yeast

Under the hood

Warm dough rises fast, cold dough barely rises, and too much heat kills the yeast

The yeast rule is three smooth curves multiplied together. A warmth curve climbs exponentially to a best temperature and falls away above it. Salt and heavy sugar pull water out of the yeast, as osmotic stress does, while a little sugar feeds it. And the gas made grows with the dose of yeast, with diminishing returns for big doses.

The dough keeps only part of that gas, and how much depends on the gluten: well-kneaded dough keeps more and can hold more. Over one piece of time the gas share has a closed form, the exact solution of a foam filling towards what its gluten can hold. That's what lets a long step stay accurate without many small ones.

As it makes gas the yeast eats its food, and above a threshold heat kills it at a rate that roughly doubles every few degrees. Once the gas stretches the gluten close to its limit, a smooth tearing term weakens the gluten and lets gas out, and the dough sinks.

A long step is cut into a few pieces by how much gas it makes. A test holds one spot's end and peak within 3 % of very fine steps, for an hour's rise and for three days.

Yeast speeds up to 35 °C, stops at 55 °C and dies from 50 °CReal S. cerevisiae grows best at 32.3 °C Salvadó 2011.

Plain yeast is fully busy at 35 °C, half as busy near 27 °C and at 45 °C, and idle at 2 °C and 55 °C; one dose of salt makes it about a quarter less busy. Above 50 °C the share killed in a minute climbs to nearly all of it in the low sixties.

Yeast speeds up to 35 °C, stops at 55 °C and dies from 50 °C0.00.20.40.60.81.0010203040506070°CsharebestYeast speeds up to 35 °C, stops at 55 °C and dies from 50 °C0.00.20.40.60.81.00204060°Csharebest
  • how busy (plain)
  • how busy, 1 dose of salt
  • share killed in a minute
Data table
Yeast speeds up to 35 °C, stops at 55 °C and dies from 50 °C
°Chow busy (plain)how busy, 1 dose of saltshare killed in a minute
0000
0.5000
1000
1.5000
2000
2.50.06660.05130
30.06950.05340
3.50.07240.05570
40.07550.05810
4.50.07870.06060
50.08210.06310
5.50.08560.06580
60.08920.06860
6.50.0930.07150
70.0970.07460
7.50.10110.07780
80.10540.08110
8.50.10990.08450
90.11460.08810
9.50.11940.09190
100.12450.09580
10.50.12980.09990
110.13530.10410
11.50.14110.10850
120.14710.11320
12.50.15340.1180
130.15990.1230
13.50.16670.12820
140.17380.13370
14.50.18120.13940
150.18890.14530
15.50.19690.15150
160.20530.15790
16.50.2140.16460
170.22310.17160
17.50.23260.17890
180.24250.18660
18.50.25280.19450
190.26360.20280
19.50.27480.21140
200.28650.22040
20.50.29870.22980
210.31140.23950
21.50.32470.24970
220.33850.26040
22.50.35290.27140
230.36790.2830
23.50.38350.2950
240.39980.30760
24.50.41690.32070
250.43460.33430
25.50.45310.34850
260.47240.36340
26.50.49250.37880
270.51340.39490
27.50.53530.41170
280.5580.42930
28.50.58180.44750
290.60650.46660
29.50.63230.48640
300.65920.50710
30.50.68730.52870
310.71650.55120
31.50.7470.57460
320.77880.59910
32.50.81190.62460
330.84650.65110
33.50.88250.67880
340.920.70770
34.50.95920.73780
3510.76920
35.50.9750.750
360.950.73080
36.50.9250.71150
370.90.69230
37.50.8750.67310
380.850.65380
38.50.8250.63460
390.80.61540
39.50.7750.59620
400.750.57690
40.50.7250.55770
410.70.53850
41.50.6750.51920
420.650.50
42.50.6250.48080
430.60.46150
43.50.5750.44230
440.550.42310
44.50.5250.40380
450.50.38460
45.50.4750.36540
460.450.34620
46.50.4250.32690
470.40.30770
47.50.3750.28850
480.350.26920
48.50.3250.250
490.30.23080
49.50.2750.21150
500.250.19230
50.50.2250.17310.4148
510.20.15380.4369
51.50.1750.13460.4597
520.150.11540.483
52.50.1250.09620.5069
530.10.07690.5313
53.50.0750.05770.5561
540.050.03850.5813
54.50.0250.01920.6066
55000.6321
55.5000.6576
56000.683
56.5000.708
57000.7327
57.5000.7569
58000.7803
58.5000.803
59000.8247
59.5000.8453
60000.8647
60.5000.8828
61000.8995
61.5000.9148
62000.9286
62.5000.9409
63000.9518
63.5000.9612
64000.9693
64.5000.9761
65000.9817
65.5000.9863
66000.9899
66.5000.9927
67000.9949
67.5000.9965
68000.9977
68.5000.9985
69000.9991
69.5000.9994
70000.9997

Source: The game's own warmth, salt and heat-kill curves; the jumps at 2 °C and 50 °C are the game's too.

Two lumps of dough on the paper after an hour's wait, seen from above: the kneaded one on the left smooth and glossy, pressed into a ring where the hand rubbed its middle; the unkneaded one on the right shaggy, lumpy and floury.
In the game: two lumps from the same flour, water and yeast, after "Wait 1 hour". Only the left one was kneaded, rubbed round with the hand (which pressed a hole in its middle): it came out smooth, while the one left alone is still shaggy and floury.

Baking soda and vinegar make dough rise while you watch

Yeast works in real seconds while you play, so a yeasted dough barely moves in a minute: a minute of warm play raises it by a few percent at most, as a test checks. The rise you can watch comes from a fizz. Baking soda and vinegar in unyeasted dough give off gas that enters the dough by the yeast's own rule. It grows by about a third in twenty seconds of play and bakes full of holes; a test checks both.

The oven springs the dough up, and folded butter puffs into pastry

In the oven the yeast has a last burst before it dies, the gas swells with heat and steam, and at 75 °C dough turns into bread. Fold cold butter in, fold again, roll it out, and it bakes flaky; work the butter in warm and it smears, and the layers are gone. A test pins both.

Under the hood: oven spring and pastry
The oven springs the dough up, and folded butter puffs into pastry

Under the hood

The oven springs the dough up, and folded butter puffs into pastry

Oven spring is worked out for each spot on its own. The spot warms on a short ramp from room temperature towards the oven's heat, held at boiling. The gas swells by the real ideal-gas ratio of absolute temperatures, through the same closed form as the yeast's gas, so only what the gluten keeps counts. Steam adds a flat extra factor on top.

Lamination. Cold butter laid on dough adds sheets of fat. A fold stacks them; rolling spreads the same count over a wider sheet. Sliding smears them, much faster once the butter is past its melting point, and too many sheets in too little height fuse into one. In the oven the layers lift the dough, and enough layers over a big enough area count as pastry.

The fizz enters through the same rule as the yeast's gas, so the gluten decides what it keeps.

Honey keeps and ketchup goes mouldy, from one rule that reads the food

Leave ketchup on the page for three days and fuzzy spots appear: green-blue, white, black, now and then orange. Leave honey beside it and it stays clean. Spray vinegar over half the food and that half stays clear for days, and mould already on it dies into a stain. A test checks all three.

Nobody told the mould about honey, ketchup or vinegar. At every spot it reads what's there, whoever put it there: how acid it is, how much sugar there is against the water, how much salt and bleach, whether it's burnt, frozen or very hot. Honey is so sugary that there's no water left for mould. Ketchup is sour, but not sour enough, and moulds happily. Vinegar is sour enough. Water honey down enough and its sugar drops below the limit, and mould can start.

Mould needs food, and it never eats it up. A colony can only start on something with food in it, and the food sets how thick the fuzz grows; on bare paper a big colony only shows as a faint halo. A crayon stroke through mould clears a path that doesn't grow straight back, because the crayon took the food with it. A test checks that too.

A spore that lands takes 20 game-hours to show, so two days show mould and half a day doesn't. The oven kills it and keeps the page clear for a week. Tests pin both.

Under the hood
Honey keeps and ketchup goes mouldy, from one rule that reads the food

Under the hood

Honey keeps and ketchup goes mouldy, from one rule that reads the food

Every spot gets a habitability from 0 to 1, read from whatever is there. Frost or real heat make it zero. Otherwise it starts at one, and each thing mould dislikes takes a share away: acid past a threshold, salt, bleach, sugar so concentrated it leaves no free water, and char. Each is a straight-line term in one sum.

Acid is counted from pH on a log scale, as real acidity is, so ketchup at pH 3.9 brings almost nothing and vinegar a great deal. Sugar is counted against all the water around it, in the food and in the paper under it, which is why watered-down honey can mould.

next update Salt counts by how salty the food is instead of how much salt there is, so heavily salted food stops mould outright while a normally salted loaf stays well within its reach. A crust dried right through stops it too, and water starts it again. Tests pin both.

Try it: leave four foods out The game's own rule

Four dabs left out on a sheet of paper: bread (top left), ketchup (top right), honey (bottom left) and ketchup with vinegar sprayed on it (bottom right). Time runs at six game-hours a second and stops after two weeks; the buttons wait an hour or three days at once. What to look for: each spot shows 20 hours after its spore lands, then grows fast and then slower. Honey stays clean until you water it down enough, then opens to mould step by step. A little vinegar only slows mould; enough keeps its dab clear. Colony sizes, edges, colours, seeding and habitability are the game's own; the food in each dab is set for the demo (ketchup's pinch of salt is left out), and the game's shader fuzz is left out.

Bread, ketchup, honey and vinegared ketchup on paper, growing mould over two weeks
  • bread
  • ketchup
  • honey
  • ketchup + vinegar
  • mould can't grow
  • mould can't grow
  • mould can't grow
  • mould can't grow
0.60
0.00
hours
—
colonies started
—
showing
—
honey: habitability
—
vinegar dab: habitability
—
A blob of ketchup with a green-blue patch of mould, fuzzy white at its edge, next to a clean blob of honey with two ants on it, after a three-day wait in the game.
In the game: ketchup and honey side by side after "Wait 3 days". One function, two answers: mould on the ketchup, none on the honey (only ants).

A colony's size is a formula, so a week of growth is one sum

Real mould spreads by growing threads. Simulating those, or the random walkers used for branching growth Witten 1981, would mean working through every hour of a three-day wait. Instead each colony stores when it started and how fast it grows, and its size is a formula of its age: a three-day wait is one sum per colony. Only new colonies need the hours in between, as a dice roll at each step of the wait.

Mould also travels. A big enough colony lets its spores go when wind blows over it or something jolts the paper. The spores ride the same air as smoke and smells, settle out, and start new colonies where they land on food. Bounce a ball on a mouldy patch in a breeze, wait, and new mould appears downwind; a test checks it. The mould code has no rule about balls: the bounce is a jolt and a touch, and the wind is the air simulation.

Under the hood: a colony
A colony's size is a formula, so a week of growth is one sum

Under the hood

A colony's size is a formula, so a week of growth is one sum

A colony is a handful of numbers: where it started, when, how fast it grows, which kind it is, and a seed for its edge. Its radius is a function of its age: nothing during a delay, then growth like the square root of time, up to a largest size. A wait of any length is one evaluation.

The edge is a ragged outline made from smooth noise, worked out once per colony and read back for every spot. Inside it the fuzz thins towards the rim and is scaled by the food and the habitability underneath.

New colonies come from a dice roll at each step of time, at a sample of random spots, weighted by food, dampness and habitability, at the same density on any sheet size. Only colonies that grew visibly are redrawn.

Spores. A colony past a certain size sheds them when the air over it moves fast enough or a jolt is strong enough, and a touch puffs some out. They ride the shared air layer, settle out over time, and a settling spore may start a colony where it lands.

Nothing for 20 hours, then fast, then slower

Every colony is unseen for 20 hours; three days after its spore landed its radius is 11.6 to 32.4 mm, and the faster ones reach the largest size, 42 mm, within the fortnight.

Nothing for 20 hours, then fast, then slower010203040050100150200250300hours since the spore landedradius, mmuns…Nothing for 20 hours, then fast, then slower0102030400100200300hours since the spore landedradius, mmuns…
  • slowest colony
  • middle
  • fastest
Data table
Nothing for 20 hours, then fast, then slower
hours since the spore landedslowest colonymiddlefastest
0000
2000
4000
6000
8000
10000
12000
14000
16000
18000
20000
223.245.277.31
244.086.969.84
264.738.2511.78
285.279.3513.42
305.7510.3114.86
326.1911.1816.16
346.5911.9817.36
366.9612.7218.48
387.3113.4219.53
407.6414.0820.52
427.9514.7121.46
448.2515.3122.36
468.5415.8923.23
488.8216.4424.06
509.0916.9724.86
529.3517.4925.64
549.617.9926.39
569.8418.4827.12
5810.0818.9527.83
6010.3119.4128.52
6210.5319.8629.2
6410.7520.329.86
6610.9720.7330.5
6811.1821.1531.13
7011.3821.5631.75
7211.5821.9732.35
7411.7822.3632.95
7611.9822.7533.53
7812.1723.1334.1
8012.3523.5134.66
8212.5423.8835.22
8412.7224.2435.76
8612.924.636.3
8813.0724.9536.82
9013.2525.337.34
9213.4225.6437.86
9413.5925.9738.36
9613.7526.3138.86
9813.9226.6439.35
10014.0826.9639.84
10214.2427.2840.32
10414.427.640.79
10614.5527.9141.26
10814.7128.2241.73
11014.8628.5242
11215.0128.8242
11415.1629.1242
11615.3129.4242
11815.4629.7142
12015.63042
12215.7430.2942
12415.8930.5742
12616.0330.8542
12816.1631.1342
13016.331.4142
13216.4431.6842
13416.5731.9542
13616.7132.2242
13816.8432.4842
14016.9732.7542
14217.1133.0142
14417.2433.2742
14617.3633.5342
14817.4933.7842
15017.6234.0442
15217.7434.2942
15417.8734.5442
15617.9934.7942
15818.1235.0342
16018.2435.2842
16218.3635.5242
16418.4835.7642
16618.63642
16818.7236.2442
17018.8436.4742
17218.9536.7142
17419.0736.9442
17619.1937.1742
17819.337.442
18019.4137.6342
18219.5337.8642
18419.6438.0842
18619.7538.3142
18819.8638.5342
19019.9838.7542
19220.0938.9742
19420.1939.1942
19620.339.4142
19820.4139.6242
20020.5239.8442
20220.6340.0542
20420.7340.2742
20620.8440.4842
20820.9440.6942
21021.0540.942
21221.1541.1142
21421.2641.3142
21621.3641.5242
21821.4641.7342
22021.5641.9342
22221.674242
22421.774242
22621.874242
22821.974242
23022.074242
23222.174242
23422.274242
23622.364242
23822.464242
24022.564242
24222.664242
24422.754242
24622.854242
24822.944242
25023.044242
25223.134242
25423.234242
25623.324242
25823.424242
26023.514242
26223.64242
26423.694242
26623.794242
26823.884242
27023.974242
27224.064242
27424.154242
27624.244242
27824.334242
28024.424242
28224.514242
28424.64242
28624.694242
28824.774242
29024.864242
29224.954242
29425.044242
29625.124242
29825.214242
30025.34242
30225.384242
30425.474242
30625.554242
30825.644242
31025.724242
31225.814242
31425.894242
31625.974242
31826.064242
32026.144242
32226.224242
32426.314242
32626.394242
32826.474242
33026.554242
33226.644242
33426.724242
33626.84242

Source: The game's own growth curve for a colony, at its slowest, middle and fastest pace, at the nominal 0.6 mm a spot, up to its largest size.

Seeds wait for water, sprout, wilt when they dry and perk up when watered

Sow cress on wet paper and after one to two and a half damp game-hours the seeds split and send up shoots. They keep growing while they're damp, up to between 4 and 7 mm. Let the paper dry and they go yellow and flop over; water them again and they recover. Grass is slower and taller, and a lush tuft may flower into a daisy, a buttercup or clover.

Chia and flax from the sieve are seeds too. Sprinkle chia on a wet patch and wait three days, and you have a patch of cress; dry chia stays seed, and a test checks it. Crush flax with the rolling pin first and it won't come up. Seeds under ketchup or paint sprout; under chocolate or peanut butter they stay dry, because fat isn't water. Strong heat roasts them, and the pigeon eats any it finds before they sprout.

One difference between play and a wait is deliberate. A seed that has started to drink and then dries out for a day dies, but only over a time skip. While you play, it waits for the next watering. A child who forgets to water for a few minutes doesn't lose the seeds.

next update New shoots come up pale and turn green over about a day in the light, as real seedlings do.

Under the hood
Seeds wait for water, sprout, wilt when they dry and perk up when watered

Under the hood

Seeds wait for water, sprout, wilt when they dry and perk up when watered

State lives per sprout, not per spot, in a fixed pool with room kept back for hand sowing. Each sprout is brought up to the clock in closed form, a few times a second in play and once per time skip, so a three-day wait costs no more than a moment of play.

  • A seed counts damp hours, from the paper's wetness, standing water or watery goop under it. After enough of them it sprouts. Each kind has its own range of hours and heights: cress is quick, grass slower and taller, moss spreads sideways, and chia and flax take longer to become cress.

  • Damp sprouts grow and gain health; dry ones lose it slowly, which you see as yellowing and drooping.

  • A seed that drank and then stayed dry for a day dies, in a time skip only.

  • Heat roasts unsprouted seeds, and fire burns plants down to stubble.

Blades are painted sprites bent by the state; their sway in the wind is drawn only.

Try it: water a row of cress The game's own rule

Cress seeds on a strip of paper, the left part wet. Time runs at a game-hour a second, sixty times the game's own play clock. Drag across the paper to water it, or press Water the strip. What to look for: wet seeds sprout after one to two and a half damp hours; as the paper dries they yellow and droop, and watering brings them back. Switch on "over a time skip" and seeds that drank and then stayed dry for 24 hours die. The seed rules are the game's; how fast this paper dries is set for the demo, and the shoots are drawn simply.

Cress seeds on a strip of paper, sprouting where it is wet and wilting where it dries
game-hours
—
counted
—
sprouted
—
of seeds
—
lush
—
wilting
—
seeds lost
—
A patch of green cress sprouted from chia seeds on a damp patch of paper, beside a heap of dry chia seeds that didn't sprout and is grown over with green-blue and white mould, after a three-day wait in the game.
In the game: chia sprinkled on a wet patch and on dry paper, then "Wait 3 days". Only the seeds that drank came up. The dry ones stayed seeds, and seeds are food: mould grew over them instead.

Fruit goes brown and shrinks over a wait, then rots like any other food

Squash an apple into pulp, or lay out slices of banana or cucumber, and leave them for three days. They come back browner. The slices also lose a little height, which from above doesn't show. A whole apple or tomato darkens and shrinks too, and other foods dim a little. This is a plain colour-and-size curve that runs only during a time skip. It doesn't model the enzyme and the oxygen that brown real fruit, so lemon juice doesn't stop it (a lemon slice browns too), and nothing browns while you watch.

Rotting comes from shared rules, not from a fruit rule. By our reading of the code (no test names fruit here), fruit left out soaks its food into the paper during a wait, so mould can start on it, and its sweet smell drifts on the air and draws flies.

Under the hood
Fruit goes brown and shrinks over a wait, then rots like any other food

Under the hood

Fruit goes brown and shrinks over a wait, then rots like any other food

The whole rule is a few lines in the time skip's drying step, skipped when the skip boils. Materials tagged as browning (apple pulp, whole apples and tomatoes, and the food slices: cucumber, carrot, tomato, lemon, orange, banana, kiwi, red cabbage) let through less light for each day of a wait, down to a floor. The whole fruit and the slices also lose some height, down to a floor of their own. Any other food or cooking goop darkens more slowly and stops sooner.

Colour is stored as absorbance, the way layers of real pigment add up, and the browning adds more to green and most to blue, so the food turns brown rather than grey.

That extra green and blue comes as a flat step on every skip, however short. So twelve one-hour waits brown a slice more than one twelve-hour wait does.

Fruit darkens over a wait several times faster than other food, then stops at a floorBlue and green also gain a flat step of absorbance, which browns it.

Fruit and slices let through 12 % less light per day down to 55 %; other food 3 % less down to 80 %; whole fruit and slices lose 6 % of their height per day down to 70 %.

Fruit darkens over a wait several times faster than other food, then stops at a floor0.50.60.70.80.91.001234567days of waitingshareFruit darkens over a wait several times faster than other food, then stops at a floor0.50.60.70.80.91.00246days of waitingshare
  • fruit and slices: light let through
  • other food: light let through
  • whole fruit and slices: height
Data table
Fruit darkens over a wait several times faster than other food, then stops at a floor
days of waitingfruit and slices: light let throughother food: light let throughwhole fruit and slices: height
0111
0.250.970.9930.985
0.50.940.9850.97
0.750.910.9780.955
10.880.970.94
1.250.850.9630.925
1.50.820.9550.91
1.750.790.9480.895
20.760.940.88
2.250.730.9320.865
2.50.70.9250.85
2.750.670.9170.835
30.640.910.82
3.250.610.9020.805
3.50.580.8950.79
3.750.550.8870.775
40.550.880.76
4.250.550.8730.745
4.50.550.8650.73
4.750.550.8580.715
50.550.850.7
5.250.550.8430.7
5.50.550.8350.7
5.750.550.8280.7
60.550.820.7
6.250.550.8130.7
6.50.550.8050.7
6.750.550.80.7
70.550.80.7

Source: The game's own browning rule, applied in a time skip only, once per skip.

Three banana slices in the game, left to right: a fresh pale one laid down just now; one that sat through three one-hour waits, gone orange-brown; and one that also waited three days, brown and half covered in green-blue mould.
In the game: left to right, a fresh banana slice; one after three presses of "Wait 1 hour", already brown, as every wait adds the same browning step however short it is; and one that waited three days first, brown and going mouldy.

Press a button to wait three days, bake, freeze or leave things a week in the sun

Each living thing runs on its own clock while you play. Dough ferments in real seconds, kneading is sped up about 20 times, mould gets a game-hour every one and a half minutes and plants one every minute. A child can watch cress come up within a few minutes, and mould shows after about half an hour of play. A yeasted dough rises at its real pace, which is too slow to watch.

That's what the time buttons are for: "Wait 1 hour", "Wait 3 days", "Bake in the oven", "Put in the freezer" and "A week in the sun". They aren't five different features. They are one recipe, given a temperature and a number of hours. The oven is 180 °C for twenty minutes, the freezer −18 °C for three hours, the sunny window 35 °C for a week. Anything new only has to say how it reacts to warmth and time.

The same recipe runs when you come back. Open the app after more than half an hour and the page has aged by the time you were away, up to two weeks; bring it back to the front after two hours or more and the same happens. A sentence then tells you what changed: the dough rose, or the ketchup grew mould.

Under the hood
Press a button to wait three days, bake, freeze or leave things a week in the sun

Under the hood

Press a button to wait three days, bake, freeze or leave things a week in the sun

Every skip is one job given a temperature, a number of hours and, for the sunny window, how dry the air is. The buttons differ only in those few numbers, and the waits add their own extras on top. Coming back to the app is a wait at room temperature for as long as you were away.

Most of it is closed form. Reactions run on a clock that doubles for every 10 °C, the chemist's familiar rule of thumb; mould is a formula; plants take one update; drying is an exponential. Only the flow of runny things is played out, for a number of passes that grows with the wait up to a cap, with the same fixed amount of work per pass on every device. Dough is proved in steps (below). So at the same sheet size a slow tablet gets the same result, only later: a test runs a two-hour wait at three detail levels from one identical page and checks that the results hash the same.

The recipe, lit for each button
StepWait 1 hourWait 3 daysBake in the ovenPut in the freezerA week in the sun
Whatever was in the air lands, fires go out, the heat goes back to the roomRuns. Every skip starts here.Runs. Every skip starts here.Runs. Every skip starts here.Stops here. Below 0 °C nothing runs, reacts, dries or grows: the water is ice.Runs. Every skip starts here.
Heat changes solid things for good; crayon wax meltsSkipped. Not hot enough.Skipped. Not hot enough.Runs. Plastic slumps, a pen bursts, crayon melts into the paper.Skipped.Skipped. Not hot enough.
Soft things melt, runny things runRuns. Played out for a while, longer for a longer wait, up to a cap.Runs. Played out for a while, longer for a longer wait, up to a cap.Runs. Played out only if something melted.Skipped.Runs. Played out for a while, longer for a longer wait, up to a cap.
Reactions run; yeasted dough provesRuns. Reaction clock: 1 room-hours. Dough: half-hour steps that double once it settles.Runs. Reaction clock: 72 room-hours. Dough: half-hour steps that double once it settles.Runs. Reaction clock: 21,845 room-hours. Dough: oven spring.Skipped.Runs. Reaction clock: 475 room-hours. Dough: half-hour steps that double once it settles.
Hot: cooking, browning, mould dies. Cool: food soaks in, mould and plants growRuns. Mould and plants get 1 hours.Runs. Mould and plants get 72 hours.Runs. Mould dies into a stain; the page stays mould-free for a week.Skipped.Runs. Mould and plants get only part of the week: a sunny window is dry.
Things dryRuns. Paper dries part way.Runs. Everything dries out.Runs. Everything dries out.Skipped.Runs. Everything dries out.
The wait's extrasRuns. Ants and flies may come; cups stay.Runs. Cups are cleared away, ants scout, flies come to food, the paper yellows a little.Skipped. Only the waits have these.Skipped.Skipped. Only the waits have these.

The game's own rule The steps run in this order in the released game. "Room-hours" is the reaction clock: an hour at 30 °C counts as two.

Three days of dough take 37 steps instead of 144

Dough in a wait can't be one sum, because it spreads as it rises and the spreading changes the dough. So the wait proves it in half-hour steps while it's still rising or sinking. Once it has settled, each step is twice as long as the last. Three days of a normal loaf take 37 steps instead of 144 even half-hours, and a fortnight takes 40. A test holds the result within 1 % of six-minute steps, in volume and in footprint. A sunny week is the exception: there even half-hour steps are some 5 % off fine ones, so the test only asks the doubling steps to do no worse.

Under the hood: the step planner
Three days of dough take 37 steps instead of 144

Under the hood

Three days of dough take 37 steps instead of 144

This is adaptive time-stepping of the simplest kind. The planner starts at half an hour and doubles the step each time the dough barely changed in the last one, while making sure even the longest wait fits within a fixed number of steps. Because the yeast's gas has a closed form, a long step costs no more than a short one and stays accurate.

The dough spreads once a step, so while it rises it spreads as it would with even half-hours. When the wait is over, the message says the dough rose or sank only when the change is big enough to see.

Dough that's the same comes out the same: within a step, identical spots are worked out once and the answer is reused. A kneaded lump is mostly identical spots, so this saves most of the work.

Try it: watch a wait choose its steps The game's own rule

One spot of the test's loaf (well kneaded, one dose of yeast, one of salt, 20 °C) waiting three days. The line is the rise worked out in six-minute steps; the dots are the steps the game's planner takes. Time runs along a square-root scale, so the early hours get room. What to look for: half-hour steps while the dough rises and sinks, then steps that double once it has settled. The step count depends on the wait and the dough. This is the game's own planner and yeast rule on one spot; the game also spreads the body each step.

The rise of one cell of dough over a wait, with the steps the planner takes shown as dots
  • 1.0×
  • 1.5×
  • 2.0×
  • 2.5×
  • 30 min
  • 3 h
  • 12 h
  • 1 d
  • 3 d
  • 7 d
  • 14 d
  • 30 d
  • time (square-root scale)
Wait
Dough
steps shown
—
planner steps
—
even half-hours
—
end volume
—
with 6-minute steps
—
difference
—

The wait is worked out in slices, and the slices change nothing

Press "Wait 3 days" and a curtain drops while the painter waits with you. Behind it, the simulation does its sums in the background thread in slices of about 6 milliseconds, letting other messages through in between, so the screen keeps moving. Anything you draw meanwhile waits and lands after the wait. A test stops the wait at every possible point and checks that the result matches doing it in one go to the last digit, down to the next random number, for six kinds of skip on both sheet sizes.

Under the hood: the slices
The wait is worked out in slices, and the slices change nothing

Under the hood

The wait is worked out in slices, and the slices change nothing

A skip is written as a resumable job that can pause at every safe stopping point and carry on later with nothing lost. In the Web Worker it runs until a budget of about 6 ms is used up, hands back to the message queue, and picks up again. Strokes that arrive meanwhile are held and land after the wait. The curtain stays down for at least a couple of seconds, so even a quick wait reads as time passing. The 6 ms is a budget; we have no measured figure for a whole skip on a device, so we print none.

The wait in slices, beside the screen's frames Illustration

Frames every 16.7 ms on a 60 Hz screen (top); the wait's slices of about 6 ms in the worker (each ends at the first stopping point after 6 ms), with messages handled between them (bottom, blue; grey gaps). The 6 ms is the code's budget, not a measured time.

Illustration: the worker works on the wait in slices of about 6 milliseconds, with messages handled between them, while the screen keeps drawing frames every 16.7 milliseconds.
  • screen
  • worker
  • a frame
  • messages go through here
  • 0 ms
  • 20 ms
  • 40 ms
  • 60 ms
Each living thing runs at its own speed while you playMould: a game-hour per 1.5 real minutes. Plants: a game-hour per real minute.

Yeast runs at real time; kneading about 20 times as fast, mould 40 times and plants 60 times.

Each living thing runs at its own speed while you play010203040506070yeast in doughkneadingmouldplants× real timeEach living thing runs at its own speed while you play0204060yeast in doughkneadingmouldplants× real time
Data table
Each living thing runs at its own speed while you play
speed-up in play
yeast in dough1
kneading20
mould40
plants60

Source: Dough: the simulation's own seconds. Kneading: half a minute in the game does about ten minutes of real kneading, about 20×.

2.45×
The most a kneaded dough rises, at any warmth from 3 to 50 °C, before it tears and sinks. Unkneaded dough stops at 1.69×. Worked out on this page for one spot from the game's own yeast rule.
20 h
Game-hours before a spore that landed shows as a dot of mould.
37 steps
For three days of a normal loaf, instead of 144 even half-hours; held within 1 % of six-minute steps by a test.
6 ms
The time budget for each slice of a wait's work before the worker lets other messages through.
5 buttons
Wait an hour, wait three days, bake, freeze and a week in the sun, all running one recipe given a temperature and a number of hours.
14 days
The most a page ages when you come back to it; a kept drawing from My drawings, up to 30.

Salty dough lights a bulb and mould rides the wind, through layers every system shares

None of these is a rule about dough or mould meeting something. Each comes from one system writing a shared number and another reading it.

Shared: salt → conductance

Make a very salty dough and put it in a circuit

With as much salt as play dough has, it lights a bulb and warms up. A normal bread's salt carries far too little. Pinned by a test.

Electricity

Shared: gas share → pores

Put a drop of colour beside a slice of bread

The baked bread drinks it up, because its gas became holes in the wicking layer. Pinned by a test.

Water in paper

Shared: air: spores

Bounce a ball on mould in a breeze, then wait

New colonies start downwind where the spores land on food. Pinned by a test.

Air that really moves

Shared: fizz gas → the yeast's rule

Mix baking soda and vinegar into dough

It rises in seconds by the yeast's own rule and bakes full of holes. Pinned by a test.

Chemistry and pH

Shared: smell: sweet

Leave a yeasted dough to prove

Flies come to it, following the sweet smell the busy yeast gives off. Pinned by a test.

Animals with their own minds

Shared: contact: press

Roll the pin over risen dough

It knocks the gas out, by how hard and how long it presses. Pinned by a test.

Things that push things

Dough has no real bubbles and bakes evenly all through, so a tablet can work out days in a moment

Living things are the hardest part of the page to simulate honestly, and the slowest. Each shortcut below keeps what a child can see and test, and lets a tablet work out days without playing them.

In real life. Dough is a foam of bubbles, yeast cells, sugars, CO₂ and alcohol.

In the game. One gas share per spot. The pores you see are noise fixed to each spot, deepened by the gas.

Why that's enough. Cheap and it combines with everything else that reads goop. There's no bubble structure to tear or merge.

In real life. Yeast dies, and its food runs out, separately.

In the game. One number does both: as the yeast eats, the yeast number falls. Only added sugar is tracked on its own.

Why that's enough. One number per spot. Adding yeast to spent dough acts as new yeast and new food at once.

In real life. A loaf heats from the outside in, and steam comes from its water.

In the game. Every spot warms from room temperature to boiling on the same short ramp, whatever the loaf's size. The gas swells by the real ideal-gas ratio, then by a flat extra factor for steam.

Why that's enough. No heat has to move through the dough. There's no crumb gradient, and the crust is a flat factor.

In real life. Dough rests for hours.

In the game. In play, yeast runs in real seconds; the time buttons do the hours.

Why that's enough. Waiting an hour is no fun. A yeasted dough barely moves in a minute of play, so the fizz of soda bread is the rise you can watch.

In real life. A mould colony's edge usually moves out at a steady pace, faster when warm and well fed.

In the game. Its radius grows with the square root of its age, up to a largest size, and ignores warmth and food. Food and habitability only set how thick it grows and where it can start.

Why that's enough. It slows under a child's eyes and costs one sum for any wait. A warm room and a cold one give the same size.

In real life. Water activity decides whether mould can grow; honey keeps because it holds its water.

In the game. Sugar against water past a limit, and salt, acid, bleach and char, each a straight-line term in one sum.

Why that's enough. The right idea, read from what's at each spot. Sugar and salt add up rather than combining into one water activity.

In real life. Things dry out during a wait, and stop growing as they do.

In the game. Dampness is read once, at the start of a skip, for mould and seeds alike.

Why that's enough. The skip stays closed form. A seed on a drop gets all 72 damp hours, and a wet dab of ketchup moulds through all three days though it dries during them.

In real life. Cut fruit browns within minutes, by an enzyme with oxygen; lemon slows it.

In the game. A colour and height curve over days, only during a wait, the same for every fruit tagged as browning. Lemon and air aren't read.

Why that's enough. Visible at the three-day scale, nearly free. Nothing browns while you watch, and whole apples and tomatoes darken too.