Professor Oops

Built for surprises

Built for surprises

A ball blows out a candle, though no line of code says it can

In most games a programmer decides what happens when two things meet. In Professor Oops the things almost never meet in the code. A rolling ball only pushes the air in front of it. A candle only checks how fast the air round its flame is moving. Roll the ball past the candle fast and the flame goes out, because both use the same air. Heat, water, what is dissolved in the water, noise and being pressed on all work this way, so a child can try something nobody planned and still get a sensible answer.

Painted illustration of the painter crouching by an oven, watching a crayon drawing toast golden inside, with an ice-cube tray and a lemon.

Everything shares the same heat, water, air and noise, and reacts in its own way

Picture the paper with invisible layers stacked on it. One holds how hot each spot is. One holds how wet it is. One holds the wind blowing over it, one the noise in the room, one what is dissolved in the water: acid, salt, soap, sugar. A flame doesn't heat a candle, a crayon or an egg. It heats the paper's heat layer, and that's all it does.

Everything else reads those layers and decides for itself. Wax softens at 60 °C, chocolate at 32 °C, egg white sets at 63 °C. A fly leaves a spot that's too hot for it. None of them asks what made the heat. So a candle, a hair dryer, a magnifying glass and an iron all melt crayon and set egg white, because they all write the same heat. A hot cup does neither, though it still softens chocolate.

Every substance in the game is a row of numbers: how runny it is, how fast it soaks in, where it boils, how hard you must press before it breaks, what it releases into water. A new substance mostly joins in by filling in a row, and then it meets everything that's already there.

The design took its lesson from falling-sand games, where simple rules for each spot give stories nobody wrote, as the maker of Noita described in a talk we know through a write-up Purho 2019. It applies that lesson to a kitchen table full of real things.

A ball blows out a candle, though no line of code says it can

For engineers

A ball blows out a candle, though no line of code says it can

Systems never call each other. They write into shared layers: per-cell fields on a grid of up to 512 × 384 cells (heat, wetness, goop, 12 dissolved elements at the release), a coarser grid for air, smells, noise, vibration and motion, and a handful of choke points for pressing, scraping and blows. Each reader reacts by its own row of numbers. A type-checked scan of the code finds 689 read and write links, all of them in the released game, between 33 systems and 55 shared layers, and no rule that names two substances.

Under the hood
Everything shares the same heat, water, air and noise, and reacts in its own way

Under the hood

Everything shares the same heat, water, air and noise, and reacts in its own way

Three kinds of shared thing, all plain data or a single function, none aware of who uses it:

  • Per-cell fields: one number per spot of paper for each quantity (heat, wetness, standing water, goop, acid…), 512 × 384 cells down to 288 × 216 on a phone, about half a millimetre a cell.

  • Coarse fields: wind, warm air and gases, and noise, vibration and motion, on a coarser grid over the same sheet.

  • Choke points: one way in each for pressing, scraping, a blow coming down, something moving, a tilt or jolt of the table, and something dissolving. Anything can use them; they never look at who did.

The property table opens with its own rule: "Behaviour comes from these numbers, not from per-material code". 97 named substances at the release (100 in the next update next update), each described by about 90 properties, which the per-cell loops read as fast lookups.

one heat scale in °C for everything  ·  paper ignites at 230 °C

Every material changes at its own temperature on that one scale: wax melts, chocolate softens, egg white sets, paper chars.

Anything that acts

  • a flame, a hair dryer, a lens

  • a rolling ball, a falling bucket

  • a hammer, a palm, a toy car

  • vinegar, bleach, tea, ash

  • a battery through steel wool

→ writes

Shared layers

  • heat · one °C scale

  • wetness and water · in the paper and on it

  • wind, warm air, gases · a coarser grid

  • acid, salt, soap, iron… · dissolved elements

  • noise, vibration, motion · gone within a moment

  • press, shear, impact · one door, any presser

→ read by its own numbers

Anything that reacts

  • a candle: fast air round the flame

  • a fly: motion, sweet and foul smells

  • a yolk: breaks under a light press

  • mould: acid, salt, sugar, bleach

  • chocolate: softens at 32 °C

Neither side knows the other. The candle has no code for balls. The ball has no code for candles. They meet in the air layer.

A shared layer turns a few links into many routes

Goop links 55 systems and opens 754 routes; heat links 35 and opens 264; the sixth busiest layer, the floating layer, links 29 and opens 154.

A shared layer turns a few links into many routes0200400600800goopwaterwetnessheatcolourfloatingsystems or routesA shared layer turns a few links into many routes0200400600800goopwaterwetnessheatcolourfloatingsystems or routes
  • systems linked to the layer (writers + readers)
  • writer-to-reader routes (writers × readers)
Data table
A shared layer turns a few links into many routes
systems linked to the layer (writers + readers)writer-to-reader routes (writers × readers)
goop55754
water39378
wetness38352
heat35264
colour31240
floating29154

Source: Counted on this page from the code scan's links present in the released game. Heat: 11 systems write it and 24 read it, so 35 links give 264 routes. A route means A writes what B reads, not that you would see B react.

A code audit turned pair rules into shared layers

The game wasn't always built like this. In October 2026 an audit of the code counted about 26 kinds of hook and about 170 places where one tool told one target what to do. The hammer alone had 20 branches, one for each kind of thing it could hit. The result was inconsistent in ways a child would notice: a 1 kg rolling pin couldn't squash a tomato, while a 50 g toy car could.

The fix was one door for every press. A tool now says how hard it presses, how big and how hard its face is. The thing underneath says how much it can take. A tomato gives under a moderate press, an apple only under a hard one. The rolling pin presses somewhere between the two, so it squashes the tomato and shoves the apple. The toy car now bumps a tomato instead of squashing it, and nobody wrote a car rule to get there. The same audit found about 45 hand-written lines where a named source scared a named creature. Those were replaced by three shared channels, which the creatures section below explains.

Under the hood
A code audit turned pair rules into shared layers

Under the hood

A code audit turned pair rules into shared layers

A press is described once, in physical terms: the shape of what touches the paper, how hard it pushes, how hard and sharp its face is, how hot and how heavy it is, and how it moves. The same description goes in turn to the paper, soap bubbles, foam, loose bits, creatures, cups, bodies, plants, balls, sticks and mould. Who pressed is kept only for sounds and debugging, never for rules.

kinetic energy E = ½ · m · v²  →  a peak pressure on the same scale as every press

One door for everything that comes down. From the blow's mass, speed and size alone, the same function makes a splash, a dent, an air puff, a jolt of the table and a noise, each growing with the energy. In the next update it also smothers flames by the blow's own numbers next update; in the released game the hammer and the hand put flames out by their own code. Each thing breaks above its own limit, one column of the property table. Both doors are pinned by automated tests.

One scale for pressing and breakingRed dots: how hard each presser pushes. Blue squares: what each thing can take before it gives. A thing gives where the press on it goes above its own number. Game units on a log scale, an ordering, not pascals.

A sponge presses at 0.4, an iron at 1, a rolling pin at 2.5 and a hammer blow at 22; a soap film gives at 0.01, a yolk at 0.3, a tomato at 1.5, an apple at 6 and plastic at 20.

One scale for pressing and breaking0.0010.010.1110100soap filmspongeironrolling pinapplegame units (log scale)One scale for pressing and breaking0.0010.010.1110100soap filmironapplegame units (log scale)
  • pressers push this hard
  • things break above this (crush)
Data table
One scale for pressing and breaking
pressers push this hardthings break above this (crush)
soap film0.01
foam0.02
yolk0.3
sponge0.4
slice0.5
berry0.8
iron1
tomato1.5
banana2
rolling pin2.5
orange4
chocolate5
apple6
plastic20
hammer blow22

Source: The game's own pressers and property table; the hammer's blow is worked out from its weight and speed.

A map drawn from the code shows fire's heat reaching 24 systems that have no code for fire

Below is the real wiring of the released game. On the outside ring are the game's systems: fire, wicking, the cat and dog, the hand tools. On the inner ring are the shared layers they meet in. A line means one system writes into a layer or reads from it, and every line stands for real code that does it.

Pick a system and see what it writes, what it reads, and which other systems can feel what it does. Fire writes heat. Twenty-four systems read heat, among them the flies, the ants, the plants and the mould. None of those has code for fire.

The lines are found by a program that reads the source code, not drawn by hand. It counts a link only where the code really touches the shared layer.

Under the hood: how the graph was made
A map drawn from the code shows fire's heat reaching 24 systems that have no code for fire

Under the hood

A map drawn from the code shows fire's heat reaching 24 systems that have no code for fire

The TypeScript compiler's type checker, run over the simulation, creature and tool code. An access counts only when its type shows it really lands on a shared layer, so the temperature of a press isn't taken for the paper's heat. It follows local aliases and values passed into helpers. Writes and reads are told apart; clearing and allocating a layer are not counted. About forty links that go through the engine loop or the shared senses were added by hand, each line read.

Checks: a random sample of 45 links was read against the code and all were right, and a script confirmed that every quoted code line stands where it is cited. That proves the citations are real, not that every read or write is classified rightly. Not scanned: the WebAssembly kernels (twins of these JS loops), rendering and the UI.

Counts: 689 of today's links were already in the released game; 751 with the next update. The released game also had 17 links that the next update removes, which aren't drawn. 8 more links come only from tools that aren't on the shelf, and are left out here.

Explore the wiring The game's own rule

Tap a system on the outer ring, or a layer on the inner one, or pick a good place to start from the list, or step round the rings with Next system and Next layer; Next kind of layer shows one kind at a time, named on the ring. What to look for: red solid lines are writes, blue dashed lines are reads. Ringed in red are the systems that read what your pick writes; ringed in blue, those that write what it reads. Nine dots carry their names; every system's and every layer's links, by name, are in the two tables under the demo. The Engine and Hand tools systems are hubs: they pass many things along, so they reach almost everything. That inflates the route counts, which is one reason routes are not effects.

The wiring of the game: systems on the outer ring, shared layers on the inner ring, lines for each read or write.
  • Heat
  • Paper and water
  • Goop
  • Chemistry
  • Air
  • Senses
  • Contact
  • Motion
  • Light
  • Noticed
  • released game
  • with the next update
  • Fire, heat
  • Candles, sticks
  • Flies
  • heat
  • CO₂
  • motion seen
  • acid
  • Engine
  • Hand tools
Good places to start
picked
—
layers shown
—
links shown
—
places in the code
—
systems
—
routes
—
linked pairs of systems
—
of
—
pick: writes, or written by
—
pick: reads, or read by
—
other systems read what it writes
—
other systems write what it reads
—
689
Read and write links between systems and shared layers, all of them in the released game, found in 5,539 places in the code.
3,269
Writer-to-reader routes they open: for each layer, its writers times its readers. Routes, not effects you'd see.
882 of 1,056
Ordered pairs of systems where one writes something the other reads.
0
Rules that name two substances, at the release and in the next update (method below).
Every system's links
Every system's links, by name

The wiring

Every system's links, by name

The panel of the graph above, for every system at once. Each layer it writes or reads, with how many places in its code do it, most first; links that only the next update adds are marked. The last column lists the systems that read something it writes, in the released game.

SystemWritesReadsCan be felt by
Air: Air and what it carriesgoop 17, wind 8, water 6, wetness 3wind 23, goop 20, water 12, float layer 8, dye 6, wetness 6, damp air 5 (next update), cover 4, chlorine 4, foul smell 4, CO₂ 4, sharp smell 4, smoke 4, sour smell 4, spores 4, sweet smell 4, frost 2, holes 131: Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Ants: Antsgoop 6, sugar 1, food 1goop 17, bleach 3, sugar 3, food 3, colour 3, acid 2, float layer 2, water 2, press 1, danger 1, soap 1, sharp smell 1, smoke 1, sour smell 1, sweet smell 1, motion seen 1, vibration 1, heat 128: Air, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Balls: Ballsbodies 1, motion seen 1, wetness 1, wind 1slope, jolt 3, bodies 1, press 1, soap 1, float layer 1, goop 1, holes 1, wetness 1, wind 129: Air, Ants, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Senses, Sheet shaking, Snail, Soap, foam, String, Time skips, Wicking
Bits, stickers: Bits, particles, things laid downcolour 26, goop 19, cover 6, wetness 6, dents 4, water 4, heat 3, float layer 2, sugar 1, flame 1, frost 1goop 27, colour 21, slope, jolt 16, cover 11, wetness 8, wind 8, heat 6, warm air 5, water 5, dents 4, holes 4, shear 2, float layer 2, press 1, soap 1, frost 1, mould 1, sheet shaking 1, wax 131: Air, Ants, Balls, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Bodies: Bodies (bump, tip, slide)goop 3, bodies 2 (next update), press 1, shear 1 (next update), heat 1slope, jolt 27, bodies 11, wind 4, sheet shaking 3 (next update), heat 3, flame 2, goop 2, holes 2, press 1, float layer 132: Air, Ants, Balls, Bits, stickers, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Candles, sticks: Sticks and candlesgoop 4, dents 2, holes 2, noticed 1 (next update), warm air 1slope, jolt 8, wind 4, holes 3, CO₂ 2, dents 2, heat 2, bodies 1, press 1, cover 1 (next update), frost 1 (next update), warm air 1 (next update), water 1 (next update)32: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Cat, dog: Cat and doggoop 13, shear 4, colour 4, wind 4, motion seen 3, wetness 2, bodies 1, impact 1, press 1, foul smell 1, dents 1, water 1goop 21, float layer 6, heat 6, colour 3, noise 3, water 2, wind 2, danger 1, foul smell 1, smoke 1, sour smell 1, sweet smell 1, dents 1, motion seen 1, vibration 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Chemistry: Reaction table and indicatorsgoop 37, noticed 10 (next update), acid 8, colour 8, bases 6, urea, peroxide 6, bleach 3, dye 2, any element 2, indicators 2, tannin 2, mould 2, water 2, salt crystals 1, iron 1, salt (in water) 1, sugar 1, food 1, wetness 1goop 98, colour 33, acid 28, bases 25, dye 12, any element 9, water 8, wetness 8, urea, peroxide 7, mould 7, bleach 6, indicators 5, salt (in water) 5, heat 4 (next update), colour hold 3, soap 3, sugar 3, tannin 3, salt crystals 2, dough 2 (next update), iron 2, food 1, holes 1 (next update), light 1 (next update), surface soap 1 (next update), wax 129: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Circuit: Electric circuitmetal 7, acid 1, bases 1, goop 1, noticed 1 (next update), motion seen 1, noise 1, heat 1metal 10, heat 4, bases 3, goop 3, dough 2, holes 2, water 2, wetness 2, acid 1, salt (in water) 1, float layer 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Contact: Contact solver (press, shear)goop 14, dye 12, colour 6, dents 2, water 2, frost 1 (next update), heat 1 (next update)goop 28, dye 21, colour 9, water 9, frost 6, heat 5 (next update), wetness 4, colour hold 3, shear 3, holes 3, press 2, cover 2, dents 2, bodies 1 (next update), dough 1, float layer 1 (next update)29: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Cups, bottles: Cups and bottlesCO₂ 3, heat 3, noticed 2 (next update), dye 1 (next update), any element 1 (next update), soap 1 (next update), chlorine 1 (next update), goop 1, noise 1, water 1slope, jolt 13, goop 6 (next update), heat 4, warm air 4, press 3, wind 3, bodies 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Dough: Doughdough 47, goop 38, water 1goop 98, dough 79, water 3, cover 2, float layer 1, holes 1, mould 1, heat 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Engine: Engine choke pointsgoop 49, vibration 10, wind 10, slope, jolt 9, smoke 9, motion seen 9, water 9, bodies 8, press 8, impact 7, colour 7, noise 7, heat 7, wetness 7, danger 6, CO₂ 5, shear 4, warm air 4, dye 3, dents 3, sheet shaking 3, metal 2 (next update), chlorine 2, noticed 2 (next update), char 1, any element 1, float layer 1, damp air 1 (next update), holes 1, light 1 (next update)goop 65, slope, jolt 16, colour 9, water 9, heat 8, float layer 5, wind 5, bodies 4, press 4, holes 4, impact 3, frost 3, dents 3, shear 2, cover 2 (next update), chlorine 2, char 1, metal 1 (next update), flame 1 (next update), light 1 (next update), noticed 1 (next update), wetness 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Fire, heat: Fire and heatgoop 15, colour 12, float layer 8, heat 7, char 4, metal 3, flame 3, food 3, sugar 2, noticed 2 (next update), wetness 2, dough 1, bases 1, iron 1, fat 1, holes 1, mould 1, water 1, wax 1colour 35, heat 34, goop 29, float layer 17, food 9, sugar 8, holes 8, wax 8, char 7, flame 6, fat 6, metal 5, mould 4, wetness 4, cover 3, bases 3, water 3, wind 3, dough 2, slope, jolt 2, CO₂ 2, crust 131: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Flies: Flies·float layer 8, goop 7, light 3 (next update), heat 3, wind 2, press 1, danger 1, acid 1, bleach 1, sugar 1, food 1, foul smell 1, smoke 1, sour smell 1, sweet smell 1, mould 1, motion seen 1, noise 1, vibration 10
Float, grease: Floating layer and greasefloat layer 59, goop 48, fat 4, heat 2, stir 1, water 1float layer 135, goop 99, water 13, fat 9, cover 7, heat 6, holes 5, stir 5, frost 4, dents 4, soap 2, wetness 131: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Frost: Frost and icegoop 7, colour hold 3 (next update), frost 3, heat 2 (next update), water 2, food 1, noticed 1 (next update), wetness 1goop 20, dye 9 (next update), colour 9, water 8, wetness 7, frost 5, colour hold 3 (next update), salt crystals 1 (next update), float layer 1, food 1, holes 1, heat 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Goop: Goop flowgoop 231, float layer 18, colour 16, dye 12, wetness 8, dough 5, any element 5, frost 3, fat 2, heat 2, water 2, food 1, surface soap 1goop 382, float layer 59, colour 27, water 26, dye 21, frost 17, holes 16, slope, jolt 15, wetness 14, cover 9, dough 6, heat 6, dents 4, colour hold 3, food 3, fat 3, mould 3, crust 3, soap 2, surface soap 2, wax 2, sheet shaking 131: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Hand tools: Hand toolsgoop 57, press 25, any element 16, colour 15, wetness 15, shear 10, water 8, impact 6, metal 3, danger 3, food 2, noticed 2 (next update), motion seen 2, heat 2, wax 2, bodies 1, dye 1 (next update), bases 1, wind 1goop 65, colour 38, holes 15, wetness 10, mould 4, heat 4, wax 4, float layer 3, water 3, metal 2, bases 2, soap 2, sugar 2 (next update), food 2, slope, jolt 2, frost 2, dents 2, any element 1 (next update), indicators 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Lens, laser: Lens and laser beamsheat 2, char 1, water 1, wetness 1goop 5, char 3, colour 3, heat 3, water 3, wetness 3, holes 2, metal 1, float layer 131: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Light: Light and optics·light 4 (next update)0
Mould: Mouldmould 4, food 2 (next update), spores 2mould 9, goop 8, food 5, wetness 3, wind 3, char 2, spores 2, holes 2, water 2, press 1, shear 1 (next update), acid 1, bleach 1, sugar 1, frost 1, vibration 1, heat 112: Air, Bits, stickers, Chemistry, Dough, Fire, heat, Flies, Goop, Hand tools, Plants, Sheet shaking, Smells, Time skips
Paper: Paper and water filmcolour hold 22, dye 13, colour 10, float layer 8, water 7, wetness 7, any element 4, metal 3, goop 3, dents 3, salt crystals 2, salt (in water) 2, heat 2 (next update), food 1dye 75, colour 57, colour hold 42, float layer 34, goop 32, wetness 25, water 22, cover 19, heat 10, metal 9, slope, jolt 7, holes 7, salt crystals 6, dents 5, salt (in water) 4, wax 4, soap 2, shear 1, food 1, frost 1, fat 1, crust 1, sheet shaking 129: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Pigeon: Pigeongoop 11, motion seen 3, wind 2, press 1, dents 1, colour 1, noise 1goop 19, float layer 4, wind 2, danger 1, smoke 1, sweet smell 1, dents 1, crust 1, motion seen 1, noise 1, vibration 1, heat 1, wetness 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Plants, Pressers, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Plants: Plants and seedsmould 2, goop 1, colour 1mould 4, heat 2, press 1, holes 129: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Pressers: Pressers: car, tyre, face, roller, irongoop 39, colour 16, dents 14, dye 9, press 6, water 4, wetness 4, motion seen 3, noise 3, impact 2, vibration 2, wind 2, bodies 1, shear 1, soap 1, foul smell 1, fat 1, heat 1goop 81, colour 21, dents 18, float layer 16, dye 15, wetness 15, holes 12, water 10, colour hold 3, dough 3, soap 2, slope, jolt 2, frost 2, fat 2, bodies 1, cover 1, heat 132: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Cups, bottles, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Senses, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips, Wicking
Senses: Senses and danger (creatures share them)·press 6, warm air 5, wind 5, motion seen 4, smoke 3, shear 2 (next update), foul smell 2, sharp smell 2, sour smell 2, sweet smell 2, noise 2, vibration 2, bodies 10
Sheet shaking: Sheet vibration and grainsgoop 11, bases 2, sheet shaking 2goop 30, bases 3, frost 2, wetness 2, holes 1, mould 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Smells, Snail, Soap, foam, String, Time skips, Wicking
Smells: Smell sourcesfoul smell 1, sharp smell 1, sour smell 1, sweet smell 1dough 2, goop 2, acid 1, bleach 1, sugar 1, food 1, mould 1, heat 17: Air, Ants, Cat, dog, Flies, Pigeon, Senses, Snail
Snail: Snailgoop 6goop 11, float layer 2, heat 2, danger 1, acid 1, bleach 1, sour smell 1, sweet smell 1, holes 1, motion seen 1, vibration 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Soap, foam, String, Time skips, Wicking
Soap, foam: Soap, foam, surface tensiongoop 18, colour 10, float layer 8, dye 6, surface soap 6, soap 3, stir 3, wetness 2, any element 1, noticed 1 (next update), water 1goop 71, float layer 30, dye 15, surface soap 14, colour 12, wetness 8, soap 6, water 6, slope, jolt 4, colour hold 3, stir 3, press 2, cover 1, frost 1, fat 1, holes 1, sheet shaking 1, wind 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, String, Time skips, Wicking
String: String and what ringsdanger 2, vibration 2, bodies 1, shear 1, sheet shaking 1slope, jolt 3, goop 3, bodies 2, heat 2, float layer 1, water 1, wetness 118: Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Contact, Cups, bottles, Engine, Flies, Goop, Mould, Paper, Pigeon, Pressers, Senses, Snail, Soap, foam
Time skips: Time skips (settle, oven, ageing)goop 19, colour 18, iron 2, food 2, mould 2, water 2, wetness 2, char 1, sugar 1, dents 1, heat 1 (next update)goop 45, colour 20, wetness 9, holes 6, water 5, char 4, cover 4, bases 4, food 4, mould 4, colour hold 3 (next update), metal 3 (next update), dye 3 (next update), acid 3, sugar 2, dough 1, any element 1 (next update), iron 1 (next update), frost 1, dents 1, wax 130: Air, Ants, Balls, Bits, stickers, Bodies, Candles, sticks, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Plants, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Wicking
Wicking: Wicking and dyesdye 48, colour 24, goop 9, wetness 3, crust 2, noticed 1 (next update)dye 96, colour 48, goop 25, wetness 9, crust 6, holes 4, colour hold 3 (next update), cover 2, dough 2, salt crystals 128: Air, Ants, Balls, Bits, stickers, Bodies, Cat, dog, Chemistry, Circuit, Contact, Dough, Engine, Fire, heat, Flies, Float, grease, Frost, Goop, Hand tools, Lens, laser, Mould, Paper, Pigeon, Pressers, Sheet shaking, Smells, Snail, Soap, foam, String, Time skips
Every layer's writers and readers
Every layer's writers and readers

The wiring

Every layer's writers and readers

The panel of the graph above, for every layer at once, grouped as the inner ring is. The number after each name is how many places in its code. Routes are writers times readers, in the released game.

LayerWritten byRead byRoutes
Heat (Heat)Engine 7, Fire, heat 7, Bits, stickers 3, Cups, bottles 3, Lens, laser 2, Float, grease 2, Frost 2 (next update), Goop 2, Paper 2 (next update), Hand tools 2, Bodies 1, Contact 1 (next update), Circuit 1, Time skips 1 (next update), Pressers 1Fire, heat 34, Paper 10, Engine 8, Bits, stickers 6, Float, grease 6, Goop 6, Cat, dog 6, Contact 5 (next update), Chemistry 4 (next update), Cups, bottles 4, Circuit 4, Hand tools 4, Lens, laser 3, Bodies 3, Flies 3, Plants 2, Snail 2, Candles, sticks 2, String 2, Ants 1, Dough 1, Frost 1, Mould 1, Pigeon 1, Smells 1, Pressers 1264
Where a flame stands (Heat)Fire, heat 3, Bits, stickers 1Fire, heat 6, Bodies 2, Engine 1 (next update)4
Burnt and charred (Heat)Fire, heat 4, Lens, laser 1, Engine 1, Time skips 1Fire, heat 7, Time skips 4, Lens, laser 3, Mould 2, Engine 120
Holes in the paper (Heat)Candles, sticks 2, Engine 1, Fire, heat 1Goop 16, Hand tools 15, Pressers 12, Fire, heat 8, Paper 7, Time skips 6, Float, grease 5, Bits, stickers 4, Engine 4, Wicking 4, Contact 3, Candles, sticks 3, Lens, laser 2, Bodies 2, Circuit 2, Mould 2, Air 1, Balls 1, Chemistry 1 (next update), Dough 1, Frost 1, Plants 1, Snail 1, Soap, foam 1, Sheet shaking 172
Frost (Heat)Frost 3, Goop 3, Bits, stickers 1, Contact 1 (next update)Goop 17, Contact 6, Frost 5, Float, grease 4, Engine 3, Air 2, Hand tools 2, Pressers 2, Sheet shaking 2, Bits, stickers 1, Mould 1, Paper 1, Soap, foam 1, Candles, sticks 1 (next update), Time skips 142
Wetness in the paper (Paper and water)Hand tools 15, Goop 8, Engine 7, Paper 7, Bits, stickers 6, Pressers 4, Air 3, Wicking 3, Fire, heat 2, Cat, dog 2, Soap, foam 2, Time skips 2, Balls 1, Lens, laser 1, Chemistry 1, Frost 1Paper 25, Pressers 15, Goop 14, Hand tools 10, Time skips 9, Wicking 9, Bits, stickers 8, Chemistry 8, Soap, foam 8, Frost 7, Air 6, Contact 4, Fire, heat 4, Lens, laser 3, Mould 3, Circuit 2, Sheet shaking 2, Balls 1, Engine 1, Float, grease 1, Pigeon 1, String 1352
Standing water (Paper and water)Engine 9, Hand tools 8, Paper 7, Air 6, Bits, stickers 4, Pressers 4, Chemistry 2, Contact 2, Frost 2, Goop 2, Time skips 2, Lens, laser 1, Cups, bottles 1, Dough 1, Fire, heat 1, Float, grease 1, Cat, dog 1, Soap, foam 1Goop 26, Paper 22, Float, grease 13, Air 12, Pressers 10, Contact 9, Engine 9, Chemistry 8, Frost 8, Soap, foam 6, Bits, stickers 5, Time skips 5, Lens, laser 3, Dough 3, Fire, heat 3, Hand tools 3, Ants 2, Circuit 2, Mould 2, Cat, dog 2, Candles, sticks 1 (next update), String 1378
Colour in the paper (Paper and water)Bits, stickers 26, Wicking 24, Time skips 18, Goop 16, Pressers 16, Hand tools 15, Fire, heat 12, Paper 10, Soap, foam 10, Chemistry 8, Engine 7, Contact 6, Cat, dog 4, Pigeon 1, Plants 1Paper 57, Wicking 48, Hand tools 38, Fire, heat 35, Chemistry 33, Goop 27, Bits, stickers 21, Pressers 21, Time skips 20, Soap, foam 12, Contact 9, Engine 9, Frost 9, Ants 3, Lens, laser 3, Cat, dog 3240
Dye the water carries (Paper and water)Wicking 48, Paper 13, Contact 12, Goop 12, Pressers 9, Soap, foam 6, Engine 3, Chemistry 2, Cups, bottles 1 (next update), Hand tools 1 (next update)Wicking 96, Paper 75, Contact 21, Goop 21, Soap, foam 15, Pressers 15, Chemistry 12, Frost 9 (next update), Air 6, Time skips 3 (next update)64
How colour holds on (Paper and water)Paper 22, Frost 3 (next update)Paper 42, Chemistry 3, Contact 3, Frost 3 (next update), Goop 3, Soap, foam 3, Time skips 3 (next update), Pressers 3, Wicking 3 (next update)6
Dents and cockle (Paper and water)Pressers 14, Bits, stickers 4, Engine 3, Paper 3, Contact 2, Candles, sticks 2, Cat, dog 1, Pigeon 1, Time skips 1Pressers 18, Paper 5, Bits, stickers 4, Float, grease 4, Goop 4, Engine 3, Contact 2, Candles, sticks 2, Hand tools 2, Cat, dog 1, Pigeon 1, Time skips 1108
Porous crust (Paper and water)Wicking 2Wicking 6, Goop 3, Fire, heat 1, Paper 1, Pigeon 15
What lies on the paper (Paper and water)Bits, stickers 6Paper 19, Bits, stickers 11, Goop 9, Float, grease 7, Air 4, Time skips 4, Fire, heat 3, Contact 2, Dough 2, Engine 2 (next update), Wicking 2, Soap, foam 1, Candles, sticks 1 (next update), Pressers 112
Metal and graphite (Paper and water)Circuit 7, Fire, heat 3, Paper 3, Hand tools 3, Engine 2 (next update)Circuit 10, Paper 9, Fire, heat 5, Time skips 3 (next update), Hand tools 2, Lens, laser 1, Engine 1 (next update)20
Wax in the paper (Paper and water)Hand tools 2, Fire, heat 1Fire, heat 8, Paper 4, Hand tools 4, Goop 2, Bits, stickers 1, Chemistry 1, Time skips 114
Fat in the paper (Paper and water)Float, grease 4, Goop 2, Fire, heat 1, Pressers 1Float, grease 9, Fire, heat 6, Goop 3, Pressers 2, Paper 1, Soap, foam 124
Goop (Goop)Goop 231, Hand tools 57, Engine 49, Float, grease 48, Pressers 39, Dough 38, Chemistry 37, Bits, stickers 19, Time skips 19, Soap, foam 18, Air 17, Fire, heat 15, Contact 14, Cat, dog 13, Pigeon 11, Sheet shaking 11, Wicking 9, Frost 7, Ants 6, Snail 6, Candles, sticks 4, Bodies 3, Paper 3, Cups, bottles 1, Circuit 1, Plants 1Goop 382, Float, grease 99, Chemistry 98, Dough 98, Pressers 81, Soap, foam 71, Engine 65, Hand tools 65, Time skips 45, Paper 32, Sheet shaking 30, Fire, heat 29, Contact 28, Bits, stickers 27, Wicking 25, Cat, dog 21, Air 20, Frost 20, Pigeon 19, Ants 17, Snail 11, Mould 8, Flies 7, Cups, bottles 6 (next update), Lens, laser 5, Circuit 3, String 3, Bodies 2, Smells 2, Balls 1754
Floating layer (Goop)Float, grease 59, Goop 18, Fire, heat 8, Paper 8, Soap, foam 8, Bits, stickers 2, Engine 1Float, grease 135, Goop 59, Paper 34, Soap, foam 30, Fire, heat 17, Pressers 16, Air 8, Flies 8, Cat, dog 6, Engine 5, Pigeon 4, Hand tools 3, Ants 2, Bits, stickers 2, Snail 2, Balls 1, Lens, laser 1, Bodies 1, Contact 1 (next update), Dough 1, Circuit 1, Frost 1, String 1154
What is worked into dough (Goop)Dough 47, Goop 5, Fire, heat 1Dough 79, Goop 6, Pressers 3, Chemistry 2 (next update), Circuit 2, Fire, heat 2, Smells 2, Wicking 2, Contact 1, Time skips 127
Soap on a surface (Goop)Soap, foam 6, Goop 1Soap, foam 14, Goop 2, Chemistry 1 (next update)4
How hard soap was worked (Goop)Soap, foam 3, Float, grease 1Float, grease 5, Soap, foam 34
Food for mould (Goop)Fire, heat 3, Mould 2 (next update), Time skips 2, Hand tools 2, Ants 1, Chemistry 1, Frost 1, Goop 1, Paper 1Fire, heat 9, Mould 5, Time skips 4, Ants 3, Goop 3, Hand tools 2, Chemistry 1, Flies 1, Frost 1, Paper 1, Smells 188
Mould (Goop)Mould 4, Chemistry 2, Plants 2, Time skips 2, Fire, heat 1Mould 9, Chemistry 7, Fire, heat 4, Plants 4, Time skips 4, Hand tools 4, Goop 3, Bits, stickers 1, Dough 1, Flies 1, Smells 1, Sheet shaking 160
Any dissolved element (Chemistry)Hand tools 16, Goop 5, Paper 4, Chemistry 2, Cups, bottles 1 (next update), Engine 1, Soap, foam 1Chemistry 9, Time skips 1 (next update), Hand tools 1 (next update)6
Acid (Chemistry)Chemistry 8, Circuit 1Chemistry 28, Time skips 3, Ants 2, Circuit 1, Flies 1, Mould 1, Smells 1, Snail 116
Bases (Chemistry)Chemistry 6, Sheet shaking 2, Circuit 1, Fire, heat 1, Hand tools 1Chemistry 25, Time skips 4, Circuit 3, Fire, heat 3, Sheet shaking 3, Hand tools 230
Bleach (Chemistry)Chemistry 3Chemistry 6, Ants 3, Flies 1, Mould 1, Smells 1, Snail 16
Dissolved salt (Chemistry)Paper 2, Chemistry 1Chemistry 5, Paper 4, Circuit 16
Crystal salt (Chemistry)Paper 2, Chemistry 1Paper 6, Chemistry 2, Frost 1 (next update), Wicking 16
Sugar (Chemistry)Fire, heat 2, Ants 1, Bits, stickers 1, Chemistry 1, Time skips 1Fire, heat 8, Ants 3, Chemistry 3, Time skips 2, Hand tools 2 (next update), Flies 1, Mould 1, Smells 135
Soap in the paper (Chemistry)Soap, foam 3, Cups, bottles 1 (next update), Pressers 1Soap, foam 6, Chemistry 3, Float, grease 2, Goop 2, Paper 2, Hand tools 2, Pressers 2, Ants 1, Balls 1, Bits, stickers 120
Tannin (Chemistry)Chemistry 2Chemistry 31
Iron (Chemistry)Time skips 2, Chemistry 1, Fire, heat 1Chemistry 2, Time skips 1 (next update)3
Indicator dyes (Chemistry)Chemistry 2Chemistry 5, Hand tools 12
Urea, peroxide, spent acid (Chemistry)Chemistry 6Chemistry 71
Wind (Air)Engine 10, Air 8, Cat, dog 4, Pigeon 2, Pressers 2, Balls 1, Hand tools 1Air 23, Bits, stickers 8, Engine 5, Senses 5, Bodies 4, Candles, sticks 4, Cups, bottles 3, Fire, heat 3, Mould 3, Flies 2, Cat, dog 2, Pigeon 2, Balls 1, Soap, foam 198
Warm air (Air)Engine 4, Candles, sticks 1Bits, stickers 5, Senses 5, Cups, bottles 4, Candles, sticks 1 (next update)6
Smoke (Air)Engine 9Air 4, Senses 3, Ants 1, Flies 1, Cat, dog 1, Pigeon 16
CO₂ (Air)Engine 5, Cups, bottles 3Air 4, Fire, heat 2, Candles, sticks 26
Chlorine (Air)Engine 2, Cups, bottles 1 (next update)Air 4, Engine 22
Sweet smell (Air)Smells 1Air 4, Senses 2, Ants 1, Flies 1, Cat, dog 1, Pigeon 1, Snail 17
Foul smell (Air)Cat, dog 1, Smells 1, Pressers 1Air 4, Senses 2, Flies 1, Cat, dog 112
Sour smell (Air)Smells 1Air 4, Senses 2, Ants 1, Flies 1, Cat, dog 1, Snail 16
Sharp smell (Air)Smells 1Air 4, Senses 2, Ants 13
Mould spores (Air)Mould 2Air 4, Mould 22
Damp air (Air)Engine 1 (next update)Air 5 (next update)0
Noise (Senses)Engine 7, Pressers 3, Cups, bottles 1, Circuit 1, Pigeon 1Cat, dog 3, Senses 2, Flies 1, Pigeon 120
Vibration felt (Senses)Engine 10, String 2, Pressers 2Senses 2, Ants 1, Flies 1, Mould 1, Cat, dog 1, Pigeon 1, Snail 121
Movement seen (Senses)Engine 9, Cat, dog 3, Pigeon 3, Pressers 3, Hand tools 2, Balls 1, Circuit 1Senses 4, Ants 1, Flies 1, Cat, dog 1, Pigeon 1, Snail 142
Coming down on a creature (Senses)Engine 6, Hand tools 3, String 2Ants 1, Flies 1, Cat, dog 1, Pigeon 1, Snail 115
Press (Contact)Hand tools 25, Engine 8, Pressers 6, Bodies 1, Cat, dog 1, Pigeon 1Senses 6, Engine 4, Cups, bottles 3, Contact 2, Soap, foam 2, Ants 1, Balls 1, Bits, stickers 1, Bodies 1, Flies 1, Mould 1, Plants 1, Candles, sticks 178
Shear (Contact)Hand tools 10, Engine 4, Cat, dog 4, Bodies 1 (next update), String 1, Pressers 1Contact 3, Bits, stickers 2, Engine 2, Senses 2 (next update), Mould 1 (next update), Paper 120
Impact (Contact)Engine 7, Hand tools 6, Pressers 2, Cat, dog 1Engine 34
Bodies (Contact)Engine 8, Bodies 2 (next update), Balls 1, Cat, dog 1, String 1, Hand tools 1, Pressers 1Bodies 11, Engine 4, String 2, Balls 1, Contact 1 (next update), Cups, bottles 1, Senses 1, Candles, sticks 1, Pressers 148
Slope and jolt (Motion)Engine 9Bodies 27, Bits, stickers 16, Engine 16, Goop 15, Cups, bottles 13, Candles, sticks 8, Paper 7, Soap, foam 4, Balls 3, String 3, Fire, heat 2, Hand tools 2, Pressers 213
The sheet shaking (Motion)Engine 3, Sheet shaking 2, String 1Bodies 3 (next update), Bits, stickers 1, Goop 1, Paper 1, Soap, foam 112
Light on the paper (Light)Engine 1 (next update)Light 4 (next update), Flies 3 (next update), Chemistry 1 (next update), Engine 1 (next update)0
Phenomena noticed (Noticed)Chemistry 10 (next update), Cups, bottles 2 (next update), Engine 2 (next update), Fire, heat 2 (next update), Hand tools 2 (next update), Circuit 1 (next update), Frost 1 (next update), Soap, foam 1 (next update), Candles, sticks 1 (next update), Wicking 1 (next update)Engine 1 (next update)0

Twenty chain reactions nobody programmed, each one checked by a test

A chain here means something a child can do, a layer it changes, and what follows. In each one, the code of each step never names the other side. The thresholds are tuned by hand. The chain isn't.

Each chain has a test in the game's test suite that sets up the scene and checks the outcome. Many tests build the scene directly (a breeze, a fly put in place), so a test shows the chain can happen, not how often it does in play.

Under the hood: the order of one tick
Twenty chain reactions nobody programmed, each one checked by a test

Under the hood

Twenty chain reactions nobody programmed, each one checked by a test

The simulation steps 60 times a second, and the order within a step is a design choice: what acts first is seen by what follows. Noise, vibration and motion fade last, "so whatever happened this tick was there for everyone to notice before it fades". Slow, smooth things such as water soaking into paper may step less often than fast ones.

Through the air

Shared: wind

Roll a football fast past a lit candle

It blows out. Rolled slowly, it stays lit. The ball only pushes air; the candle only reads how fast the air round its flame is moving.

Air that really moves · checked by a test

Shared: acid + base → CO₂

Pour vinegar on baking soda beside a candle

The gas creeps along the paper and the candle close by goes out with no wind. One across the page stays lit.

Chemistry and pH · checked by a test

Shared: heat → CO₂ depth

Shake baking soda over burning oil

Out within a second or two. The fire reads how deep CO₂ lies, not where it came from. Flour on the same fire flares.

Heat and fire · checked by a test

Shared: warm air + flame

Burn paper beside loose confetti, near a cut in the sheet, in a breeze

Burning scraps ride the updraft across the cut and start a second fire.

Heat and fire · checked by a test

Shared: foul smell + wind

A dog asleep, a breeze, a fly downwind

The fly smells the dog's breath and comes up the plume to it. The perch on its nose is written; the journey isn't.

Animals with their own minds · checked by a test

Shared: press → spores → wind

Bounce a ball on mould in a breeze, then skip time

New mould grows downwind on food somewhere else.

Dough, mould and time · checked by a test

Through what creatures notice

Shared: motion seen, looming

Let a bucket fall near a pigeon

It's off before the bucket lands. Far away, it stays.

Animals with their own minds · checked by a test

Shared: noise + motion

One pigeon takes off

The pigeon next to it goes too. To the second bird, the first one's take-off is only a noise and a movement.

Animals with their own minds · checked by a test

Shared: noise

Run a vacuum cleaner near a dog

It barks at a roar close by, not at a fan across the page.

Sound and shaking · checked by a test

Shared: sheet shaking

Hold a speaker face down on the paper

Ants scatter, sand gathers on the still lines, bubbles on the shaking parts pop.

Sound and shaking · checked by a test

Through pressing and bumping

Shared: press against crush

Walk a pigeon over a yolk and a tomato

The yolk bursts; the tomato holds.

Things that push things · checked by a test

Shared: bodies: mass and build

Roll a football at a full cup

It tips and spills the way the ball was going. A tennis ball only rattles it.

Things that push things · checked by a test

Shared: carried load

Drive the toy car through ketchup

Red tracks go on beyond the puddle, with the paint shared out, none made.

Runny, sticky and oily · checked by a test

Through heat, water and chemistry

Shared: goop carries heat

Spill hot coffee towards a chocolate bar

The bar softens where the coffee reaches it.

Heat and fire · checked by a test

Shared: ash → carbonate → pH

Burn some paper, then paint red cabbage juice over it

Blue in a thin ring round the burn, where the ash is, and purple beside it. Fire reaches chemistry.

Chemistry and pH · checked by a test

Shared: iron + tannin

Tea on damp paper with a pin in it, then skip a few days

A blue-black ring of iron-gall ink. The iron comes from the rusting pin.

Chemistry and pH · checked by a test

Shared: heat

Connect 9 V across steel wool on paper

It glows white-hot and catches fire where the clips bite. Electricity reaches fire.

Electricity · checked by a test

Shared: heat

A fly lands on a glowing wire

It's off at once. The fly's code has no wire in it.

Electricity · checked by a test

Shared: acid, salt, sugar in food

Leave honey and ketchup out for three days

Honey stays clean, ketchup grows mould. Vinegar on it keeps the mould off; juice doesn't.

Dough, mould and time · checked by a test

Shared: soap on the surface

Touch soap to a puddle with pepper on it

The pepper rushes away. The magic-milk code knows nothing about pepper.

Runny, sticky and oily · checked by a test

Coming in the next update

Shared: heat at the wick

Burning paper reaches a candle

next update The wick lights. A toothpick in the same heat doesn't: it has no wick. In the released game only a match lights a candle.

Heat and fire · checked by a test

Shared: water at the wick

Pour water on a lit wick

next update It drowns where it stands and won't relight while wet. Poured beside it, the flame burns on.

Heat and fire · checked by a test

Shared: heat speeds reactions

Bleach on warm paper

next update Colour fades faster. In the released game, warmth speeds reactions only during time skips.

Chemistry and pH · checked by a test

Vinegar fizzing on a heap of baking soda beside a birthday candle that has just gone out, its wick black.
Vinegar, baking soda and a candle. The fizz gives off CO₂, which is heavier than air. It creeps along the paper and puts out the candle beside it. Nothing in the candle's code mentions vinegar.
A stripe of red cabbage juice across a small hole burnt in the paper: purple on the clean paper, blue in a thin ring round the scorched edge.
Fire meets chemistry with no rule between them. A small burn, put out with the damp tea towel, then a stripe of red cabbage juice across it. Burning leaves potash in the ash, a base. The juice reads the pH of the paper under it: purple on clean paper, blue in a thin ring round the scorched edge, where the ash is. The colour is a table read on the pH.

Some tests check that things don't know about each other

Most tests check that something happens. A few check the opposite: that a piece of code does not mention the things it affects. These guard the design itself, so a quick fix can't quietly bring a pair rule back.

One test goes further. It sets the sheet shaking with no speaker on the page at all, and glitter still drifts to the still lines. The speaker is just one writer of a shared layer.

Under the hood: tests of absence
Some tests check that things don't know about each other

Under the hood

Some tests check that things don't know about each other

  • One test reads the speaker's own code and fails if it names anything the shaking moves: loose bits, foam, bubbles, goop, water, ripples, particles, grains or any material. It also reads the code of ten things that feel the shaking and fails if any of them names the speaker.

  • Another fails if the table shake's code mentions cups, balls, bits, sticks, cars, sloshing, spilling, foam or stickers.

  • A third fails if the flies ever gain a command that tells them to leave. They have to notice. (One exception, on purpose: anything pressing down slides a fly out from under it, so no creature is ever hurt.)

  • The speaker test also sets the sheet shaking by hand with no speaker present, and the glitter still reads it.

Animals react to a bang, a jolt or a sudden movement, whatever made it

Every creature in the game listens to the same three short-lived layers: noise, vibration through the paper, and movement it can see. A hammer blow writes a bang and a jolt. A hand sweeping past writes movement. A pigeon taking off writes a noise and a movement. Each animal reads them through its own row of numbers. Ants and snails are deaf and feel the ground. Flies care most about movement. Pigeons hear well.

They notice change, not level. Each animal keeps a sense of what it's used to, so a sudden bang startles while a fan that keeps blowing is soon ignored. Movement counts for far more when it's fast, so a hand creeping up at a few cells a second shows almost nothing, while the same hand swiped fast is seen from far off. That's why you can sneak up on a fly. Real flies jump away from a looming threat Card 2008. The game's fly flees straight away from where the alarm came from, which matches that paper on direction and no more.

A pigeon isn't scared by its own wings, but the pigeon beside it is. Each creature subtracts what it just made itself from what it senses. Biologists call this an efference copy; the code doesn't use the term, it's our comparison. The flock alarm was informed by research on crested pigeons, whose take-off whistle alarms the flock Hingee 2009. The game has no special alarm sound, only a loud, sudden thing.

Under the hood
Animals react to a bang, a jolt or a sudden movement, whatever made it

Under the hood

Animals react to a bang, a jolt or a sudden movement, whatever made it

Three grids on the air's coarse grid. A source writes a splat that fades with distance, kept only where it's stronger than what's there (peak-hold), so many small sources never add up to a bang. Each layer dies away within a fraction of a second.

A louder noise reaches further. A blow's jolt grows with its energy. A mover shows more the faster and bigger it is, and a slow one shows nothing at all. Things coming down look bigger the nearer they get, as a looming shape does to a real animal. One shared sense function serves all six species:

surprise = what it senses − what it made itself − what it's used to  ·  threat = Σ sensitivity × surprise  →  startles above its own level

What it's used to drifts towards what it senses, so a steady noise stops counting. The only per-animal part is one row of numbers per species, the same at the release. What a creature then does (how far it flees, how fear adds up) is its own code.

Try it: who notices? The game's own rule

Tap the paper for a blow, drag across it to move a hand, or press Bang, Swipe fast or Creep up to the fly. Until you do, the demo bangs, swipes and creeps by itself. What to look for: a fast swipe puts up the pigeon, the dog and the fly along its path; a slow creep right up to the fly writes nothing at all, so it stays; the ants and the snail are deaf to the bang and react to its jolt. The demo's own hand hovers; yours is dragged on the paper, so a fast drag also rubs a little vibration in, as in the game. The bar under each animal is its threat; the mark in the middle is where it startles.

A sheet of paper with a pigeon, a fly, ants, a snail, a cat and a dog. Blows and hand movements write noise, vibration and motion, and each animal startles when its threat passes its own level.
  • pigeon
  • pigeon startled
  • fly
  • fly startled
  • ant
  • ant startled
  • snail
  • snail startled
  • cat
  • cat startled
  • dog
  • dog startled
  • A bang: noise and a jolt
  • Your blow: a bang and a jolt
  • A fast swipe
  • A slow creep up to the fly
  • Your hand
  • noise
  • vibration
  • motion seen
loud 1.00
12 cells
hand speed
—
motion it shows
—
seen?
—
blow: noise reaches
—
jolt
—
jolt reaches
—
startles: pigeon
—
startles: fly
—
startles: ant
—
startles: snail
—
startles: cat
—
startles: dog
—
Six animals, one sense function, a row of numbers each

Ants and snails hear nothing (noise 0) and feel vibration fully (1); the fly sees motion most keenly (1.5) and startles soonest (0.3); the pigeon hears best (1) and startles last (0.5).

Six animals, one sense function, a row of numbers each0.00.51.01.5pigeonflyantsnailcatdogsensitivitySix animals, one sense function, a row of numbers each0.00.51.01.5pigeonflyantsnailcatdogsensitivity
  • noise
  • vibration
  • motion seen
  • startles above
Data table
Six animals, one sense function, a row of numbers each
noisevibrationmotion seenstartles above
pigeon10.310.5
fly0.20.81.50.3
ant010.10.3
snail010.50.3
cat0.60.30.60.35
dog0.50.21.10.45

Source: The game's own table of senses per species, the same at the release. The order follows real animals (deaf ants and snails, flies quick to see movement); the sizes are tuned for play, not measured.

No rule in the game names two substances, yet vinegar and baking soda still fizz

Vinegar and baking soda fizz. Nowhere does the code say "vinegar meets baking soda". Vinegar puts acid into the water on the paper. Baking soda puts in a base. One rule in the chemistry table says what acid and base do together, and it's written once. Ketchup, cola, orange juice and any acid added later join in by themselves.

That split, between a few things dissolved in water and the many substances that bring them, was informed by how the makers of a well-known adventure game described their chemistry engine, as write-ups of their talk report it Dohta 2017. Rules grow with the number of dissolved elements, not with the number of substance pairs.

We checked this with a program that reads the code. It finds every place a material is tested by name and every place two such tests on different things meet. The answer is zero, at the release and in the next update. The same table says what can happen between any two of the game's substances. Try any pair below.

Under the hood: how "0" was counted
No rule in the game names two substances, yet vinegar and baking soda still fizz

Under the hood

No rule in the game names two substances, yet vinegar and baking soda still fizz

A scan of the TypeScript syntax tree of the simulation, creature and tool code (58,098 lines at the release, 69,002 now) finds every place a material is tested by name, in a comparison or a switch, and every place two such tests on different things meet, joined by "and" or nested one inside the other.

Now: 851 mentions of a material by name, nearly all "put down some of this"; 71 tests of which material is there, 16 of them for "nothing", so 55 name a real material; 0 pairs. At the release: 77 tests and one candidate, which only picks the colour of a smashed fruit's pulp.

The scan's known hole: it can't tell two different spots on the paper apart, so a test of one spot for A and another spot for B would count as one thing. So all 71 tests were also read by hand. None is such a pair. A grep for materials named another way found two string tests for vinegar: one only picks a tint, the other only puts acid down.

Pairs, from the property table alone (the substances plus the drops), as "can act, given enough of both in one place". No pair was run. At the release: 104 substances, 5,356 pairs, 1,143 (21.3 %) with something specific, 2,080 (38.8 %) counting mould. These are cross products of a handful of rules, not that many separate behaviours.

Try it: any two substances The game's own rule

Each row and each column is a substance from the game, sorted by how many others it has something specific with. A coloured square means a rule can act between that pair: red for reactions and colour, blue where water gets in, yellow for layers, purple for dough, green for mould. Tap a square, or pick two from the lists, eight each. What to look for: bleach, on the far left, reaches almost everything, because it fades colours and stops mould; salt, vinegar and sweet or sour drinks reach most foods through mould. Most pairs only meet through the general rules of mixing, flowing and soaking in. The table here holds the 89 substances a child can make in the released game or with the next update. Most of what's lit is a few rules crossing whole classes: 45 watery things against 7 that swell and 3 that dissolve, and four kinds of preservative (bleach, acid, salt, sugar) against every food.

A matrix of the game's substances against each other; a coloured square marks a pair that a property rule connects.
Show
First
Second
pairs lit
—
share
—
first
—
first: pH
—
second
—
second: pH
—
picked pair
—
Reactions and colour
—
Water gets in
—
Layers
—
Dough
—
Mould
—

This is honest only with its fine print. The chemistry rules themselves are written by hand, and several name two ingredients: bleach with acid makes chlorine, iron with tannin makes ink. They name what is dissolved, once, not the substances that bring it. And the outcomes are authored: flour's row says that flour and water make dough.

The rules behind the squares
The rules behind the squares

Any two substances

The rules behind the squares

What each rule in the matrix means. The readouts under the matrix name the ones the picked pair meets.

RuleKindWhat it does
FizzReactions and colourAcid meets baking soda: the chemistry table's fizz rule, acid with base, gives off CO₂.
Fizz on shellReactions and colourAn acid meets eggshell, which is tagged as a carbonate and fizzes in acid.
CurdlesReactions and colourAn acid meets milk, and milk's row says it curdles into curd.
Colour change, acid sideReactions and colourA juice with anthocyanin (grape, blueberry, strawberry) meets an acid and reddens. The colour comes from a table read on the pH, not from a rule.
Colour change, base sideReactions and colourAn indicator (anthocyanin, or the curcumin in mustard) meets a base and shifts colour. A table again.
ChlorineReactions and colourBleach meets an acid: the chlorine rule, and a spoken warning to open the window.
Bleach fades itReactions and colourBleach fades the colour of whatever it reaches.
Soap on milkReactions and colourSoap meets milk: the surface flow of the magic-milk experiment.
Water gets in: swellsWater gets inSomething watery meets something that swells or sets with water (seeds to gel, flour to dough, as its row says).
Water gets in: dissolvesWater gets inSomething watery meets something that dissolves in it (salt, icing sugar, baking soda).
Keep apartLayersA fat or oil meets something watery: they don't mix, and one floats on the other.
Held mixedLayersAn emulsifier (yolk, mustard, foam) meets a fat or oil and holds it mixed.
Soaks up fatLayersFlour or cornflour meets a fat or oil and soaks it up.
Mould: bleachMouldBleach on a food stops mould growing there.
Mould: acidMouldEnough acid on a food keeps mould off.
Mould: saltMouldSalt on a food changes how well mould can grow there.
Mould: sugarMouldA very sweet thing on a food changes how well mould can grow there.
DoughDoughDough kneads it in: yeast, butter in sheets, salt, sugar.

Some things are still written by hand, and here is the list

Shared layers are a strong habit in this code, not a law. Some behaviour is written for a named thing, either because it's a choice rather than physics, or because nothing better exists yet. A page about emergence that hid these would be selling something. This is the list a read through the code turned up.

What is written by handWhereWhy it's there
The dog's favourite foods, by name18 of the 55 material tests, in the dog's codeA taste, creature against material. Not physics.
Chemistry rules with two ingredientschlorine (bleach + acid), iron-gall (iron + tannin), fizz, carbonate, curdle, in the chemistry tableChemistry is authored, once per pair of dissolved elements. Any substance that brings them joins in.
Cats hunt flies, dogs chase ballsthe cat's and the dog's codeA choice of what to pay attention to. The fly's escape from the cat runs through the shared layers, except where the paw lands: there the no-harm rule below moves the fly directly.
Flying drops burst soap bubblesone named wire, set once in the engineHow hard a drop must hit is generic; which drops reach bubbles is wired once.
A fly perches on a dog's nosethe flies' codeThe perch is written. The route there, by smell on the wind, isn't.
Each kind of bit's wind threshold; the pigeon's grip against windloose bits, the pigeonThere is no drag model yet, so these are numbers per kind.
Named materials in single-thing rulesyolk, foam, oil, cooked egg, caramel, fizz, tube paintOne material's own behaviour, not a pair. A property could carry some of these.
About 100 tests of an object's kindis it a lid, a cat, a cup…, across the codeMuch of it is drawing or setting up. Not audited one by one.
Tools that call animals; the snail tool tucking in a snail; stroking a petthe tools, the engineThat is what the tool is for: the child calls the pigeon.
Creatures can't be hurtevery press also warns the flies and ants directly; fire warns creatures directly; the oven and freezer clear them out firstA design rule on top of the physics. The physics stops at the creature on purpose. Pinned by an automated test.
Time skips that name thingsthe time-skip codeBookkeeping for a long wait: ants find food left out, and flies arrive for it.
Scripted lessonsthe grease flare, the chlorine warningWords the game says once, by design.
A match lights a candle by kind; water puts a candle out by a named callreleased game onlyReplaced in the next update by heat and water at the wick next update.

Where we simplify, and why

Shared layers only work if each layer is cheap enough to keep up in play on a phone or tablet. So each one is a deliberate simplification. The candle never asks what made the wind, so it doesn't matter that wind from a ball is a quick push on a coarse grid. A narrow, honest interface between systems is what lets them stay simple.

In real life. Substances mix in any proportion

In the game. One column of goop per cell, of one material. Whatever is added in greater amount than what's there takes over; colour and height add.

Why that's enough. Every property is one table lookup. The smaller partner's properties vanish from that cell, though its colour stays. Dough is the exception: it keeps track of what is worked into it.

In real life. Liquids stack freely

In the game. Goop plus one floating layer

Why that's enough. Oil on water is what children see. There's no third layer.

In real life. Sound is a wave

In the game. A splat on a coarse grid that dies away within a fraction of a second, with no echo and no shadow. Two loud things don't add up: the louder is kept.

Why that's enough. Creatures need "how loud, from where". Everything else a wave does is lost.

In real life. Pressure is force over area

In the game. A number on a game scale, and a crush per material

Why that's enough. It orders things right: bubble, yolk, tomato, apple. The numbers have no units.

In real life. Air is three-dimensional

In the game. A flat grid, with height as a formula

Why that's enough. Fast enough for a phone. Nothing happens above the paper as a volume.

In real life. A flame uses up oxygen

In the game. No oxygen. Covering is yes or no per cell, and CO₂ puts a flame out past a depth.

Why that's enough. The outcome is right. A real candle under a jar lasts seconds until its air runs out; here it goes out at once.

In real life. Reactions follow amounts and concentration

In the game. A rate per cell, times time, using up both by rule

Why that's enough. A table can hold them. Adding water doesn't dilute.

In real life. Any pair might interact

In the game. Pairs meet only through a shared layer

Why that's enough. No table of every pair to keep right. A route can be real and still too small to see, so the pair counts above are potential, not observed.