workshop private

← all creations

Sink

games · created 2026-09-25

Ten metres down your lungs are half the size they were and you stop floating, so the rest of the way to the plate is free. The oxygen gauge in your chest then reads its best number of the whole dive at the bottom — because it is a fraction multiplied by a pressure you are about to give back — and 59% of the blackouts land in the last ten metres of a dive that went to fifty.

physicssimulationcanvasgame-feel

A constant-weight freedive on a rope: down to a plate, grab a tag, come back, and stay conscious for fifteen seconds on the surface. One button, which is finning. Everything else in the game is two gas laws arguing with each other.

Boyle says the only compressible thing you own is the air in your chest, so your displacement — and therefore your buoyancy — is a function of depth. You leave the surface floating with five kilos of lift and arrive at sixty metres three and a half kilos negative. The descent stops being work about ten metres down and becomes a fall.

Dalton says the oxygen your body reads is the fraction left in your lungs multiplied by the ambient pressure. At the bottom that multiplier is five or six. So the number goes up while the thing it is measuring goes down, and it keeps going up for as long as you keep descending.

The first law makes the way down cheap and the way home expensive. The second makes you feel best at the moment you have least. They meet in the last ten metres, which is where this happens:

where the lights went outshare of blackouts
on the surface8%
0–5 m32%
5–10 m19%
10–20 m27%
below 20 m14%

222 blackouts over 1155 simulated dives, every one to a depth the rig in question could plausibly have been asked for. Median blackout depth 7.5 m, on dives whose median deepest point was 56.2 m. You do not drown at the bottom. You drown having already climbed 87% of the way back.

The gauge that lies, and the one the sport does not have

Here is a single clean dive to 45 m on 2.5 kg of lead. Two columns matter: what the body is reading, and how much is actually left.

momenttalveolar pO₂saturationO₂ leftif you left now, at the surface
leaving the surface1 s117 mmHg98%99%98%
20 m, descending13 s266 mmHg100%76%97%
40 m, descending30 s410 mmHg100%70%92%
the turn, 45 m34 s443 mmHg100%69%89%
30 m, ascending59 s232 mmHg100%50%88%
20 m, ascending68 s153 mmHg99%44%88%
10 m, ascending77 s91 mmHg98%39%89%
5 m, ascending82 s65 mmHg96%37%89%
the surface85 s42 mmHg90%35%89%
four seconds later89 s98 mmHg93%83%93%

Three things in there are the whole game.

The gauge peaks at the bottom. 443 mmHg at the turn is nearly four times what you had in your lungs on the surface with a fresh breath, and you have already spent a third of your oxygen to get it. The fraction at that moment is 0.107 — about 81 mmHg of real oxygen wearing a 5.5× multiplier. Nothing was added on the way down. The pressure was doing the flattering.

The collapse is not gradual. Between 45 m and the surface the store goes from 69% to 35% — it roughly halves. The reading goes from 443 to 42, which is a factor of ten. The extra ninefold is the multiplier being taken back, and it is taken back fastest in the shallows, because pressure falls fastest there in proportional terms: the last ten metres halve the ambient pressure, and halve the multiplier with it. It is exactly the halving the first ten metres bought you, handed back at the moment you can least afford it.

The last column is flat. That is the honest instrument: run the rest of the ascent forward at the economical effort and report what you will be reading when you arrive. It sits at 88–89% for the entire climb. It barely moves, because the climb was already priced in at the turn — everything after that is you paying an invoice you signed at the bottom. The demo draws both on one dial, in the same units, same scale: a solid bar for now and a dashed line for when you get there. Watching the dashed line sit in the red while the bar is still three-quarters up is the piece.

Real freedivers do not have that second line. They have the first one, which feels wonderful.

Three readings at the turn, and what came of them

Same plate at 55 m every time. Only the lead changes, which only changes how the descent was paid for.

leadpO₂ at the turnsaturationO₂ pool leftprojected at the surfaceeconomical upsprint up
1 kg402 mmHg100%53%74%cleanblackout, 18.6 m
2.5 kg506 mmHg100%66%77%cleanblackout, 13.3 m
3.5 kg551 mmHg100%72%68%cleanblackout, 12.7 m
4.5 kg585 mmHg100%77%44%blackout, 1.4 mblackout, 13.6 m

Read the bottom row against the top one. The dive that kills you arrives at the turn with a higher partial pressure, a fuller oxygen store, and the same perfect 100% saturation. Every instrument a diver actually carries reads better on the fatal dive than on the safe one, and they read better for a real reason: the extra lead got you down faster and cheaper, so you genuinely are less tired and genuinely do have more left. The only number that knows is the one nobody has, and it is the difference between 77% and 44%.

Then it blacks you out at 1.4 metres.

How much lead

Lead is the one dial that moves where the descent stops being work.

leadneutraldeepest clean diveO₂ downO₂ upcheapest effort at 50 m
0 kg27.6 m50 m1784 mL633 mL27%
1 kg18.0 m60 m1341 mL786 mL34%
1.5 kg14.8 m62 m1184 mL885 mL37%
2 kg12.3 m61 m1057 mL988 mL41%
2.5 kg10.2 m60 m950 mL1100 mL46%
3 kg8.5 m58 m859 mL1234 mL50%
3.5 kg7.0 m56 m783 mL1370 mL54%
4 kg5.8 m53 m715 mL1532 mL59%
5 kg3.7 m48 m604 mL1864 mL68%

The two oxygen columns cross over between 2 and 2.5 kg, and the optimum sits just before the crossing. But the interesting comparison is 1.5 kg against 4 kg. The heavy rig spends 2247 mL on a 50 m dive and the light one spends 2069 — 8.6% more oxygen — and it costs nine metres of depth. The same oxygen buys less when you spend it going up, because going up is when the multiplier is leaving.

The last column is what lead really costs, and it is not a number the diver can feel. “Cheapest effort” is whatever setting moves a metre for the least oxygen, and it climbs from 27% to 68% across the table. Past about 4 kg the economical ascent has stopped being economical in any useful sense — it is most of a sprint, and it is the best available option rather than a mistake. Lead does not just make the ascent cost more. It removes your ability to be frugal on the way up, which is the half of the dive where frugality was the whole game.

The sprint

policydive timeO₂ spentlowest saturationoutcome
freefall, economical up85 s1898 mL89%clean
freefall, float up87 s1912 mL88%clean
fin all the way down78 s2268 mL74%clean
economical, then sprint the last 10 m82 s2185 mL85%clean
economical until the contractions, then sprint75 s2554 mL66%clean
freefall, sprint up57 s2825 mL50%blackout at 2.3 m

And over fifteen rigs — three belts, five plates:

policycleansambablackout
freefall, economical up93%0%7%
turn when you want to breathe93%0%7%
freefall, float up87%7%7%
economical, then sprint the last 10 m73%20%7%
fin all the way down47%7%47%
economical until the contractions, then sprint40%0%60%
freefall, sprint up20%13%67%

Sprinting home saves 28 seconds and costs 49% more oxygen, and it takes you from a 7% blackout rate to 67%. Drag power goes as the cube of speed, so the cost per metre roughly doubles between the cheapest effort and a full sprint — at 40 m that is 21.4 mL per metre against 40.2. There is no depth in the table where it pays.

Which leaves the ugly reading, and it is the one the table is really for: the panic sprint is what a frightened diver does, it is the correct instinct for every other emergency anyone has ever been in, and it is close to the worst available option here. The dive was decided at the turn. Nothing you do on the way up is worth as much as the thirty seconds of patience that got you a cheaper turn.

The cheapest effort is never zero, either:

depthbuoyancycheapest effortmL O₂ per metreat full sprint
60 m−3.5 kg48%24.641.6
40 m−2.9 kg43%21.440.2
20 m−1.6 kg32%15.937.7
8 m+0.6 kg19%10.934.7
4 m+2.1 kg13%8.832.9

At four metres the water is already pushing you up with two kilos and the right answer is still a light kick, because time itself costs oxygen and a free ride is a slow one. The demo puts a green mark on the effort bar at whatever the optimum is for your current depth, and the mark slides down the bar as you climb.

What the purge buys

Hyperventilating before a breath-hold is the single most reliably lethal thing in the sport, and the reason is not that it hurts you. It is that it works.

No plate on the rope here: the diver descends until they want to breathe badly enough to turn, which is how anyone not on a competition line actually dives.

breathe-upstarting O₂wanted to breathe atturned atdeepestoutcome
calm2932 mL38 s50.7 m53.4 mclean
moderate2980 mL82 s80.0 m (rope)82.9 mblackout at 19.0 m
heavy purge3008 mL113 s80.0 m (rope)82.9 mblackout at 18.4 m
breathe-upmedian depth reachedcleansambablackout
calm45.4 m67%11%22%
moderate82.7 m0%0%100%
heavy purge82.7 m0%0%100%

Blowing off carbon dioxide adds 76 mL of oxygen — 2.6%, and only because alveolar gas gets marginally richer once the CO₂ leaves; haemoglobin was already 98% saturated and had nowhere to put more. It delays the urge to breathe by 75 seconds, from 38 to 113.

So the purge buys two and a half percent more fuel and triples the length of the drive. The urge to breathe is a CO₂ alarm, not an O₂ alarm, and a freediver navigating by it is using an instrument that has been silently recalibrated by the thing they did on the surface to feel comfortable. The model also moves the blackout threshold up a little with hypocapnia, since low CO₂ constricts the cerebral vessels and the same arterial saturation then delivers less oxygen to the brain — but that is the small effect. The large one is the missing alarm.

What the model is, and what it is not

src/dive.mjs is headless and framework-free. The split is worth being honest about, because the two halves are not the same quality of physics.

The buoyancy is exact, in the sense that it is Archimedes applied to a list of volumes and it has no free parameters doing any work:

Sum, multiply by 10.066 N per litre, subtract weight. The neutral depth is not tuned, it falls out: 10.2 m on 2.5 kg. Real divers weight themselves to be neutral at ten to fifteen metres, and they do it by feel, not by arithmetic.

The gas model is a calibrated caricature. Real oxygen lives in four compartments with different time constants; this has one well-mixed pool of which the lungs hold 37%, so the alveolar fraction is a constant times the pool. Saturation is a Hill curve on alveolar pO₂ (P₅₀ = 26 mmHg, n = 2.7) with a four-second first-order lag standing in for lung-to-brain circulation time. Consumption is a resting draw plus a quadratic in effort, damped with depth because the dive response is real and does slow you down. The calibration anchor is a static breath-hold: at these numbers the same diver holds one to blackout in about three minutes, which is a decent club diver rather than a record holder. Halve the resting draw and you have an athlete.

That lag is not decoration. It is why the surface protocol exists:

the surface — 42 mmHg, 90% saturated, and rising four seconds later — 98 mmHg, and it went down first

You arrive, you breathe, you look fine, and then the blood that was at five metres finally reaches your head. 8% of the blackouts in the big table happen after the diver is already on the surface with their face out of the water. In the demo you cannot end a dive by touching the surface; you end it by staying conscious for fifteen seconds afterwards.

Playing it

Hold space, or hold the pointer, to fin — it is a level, not a switch, so it winds up while you hold and runs down when you stop, and a light touch really is a light kick. Shift sprints. X, or right-click, turns you for the surface wherever you are; the plate turns you automatically if you get there. R resets.

Pick a plate, some lead, and a breathe-up. Then:

  1. The first ten metres are the only ones you pay for. You are five kilos positive and you have to fight all of it, which is why real divers duck-dive hard and why the belt matters.
  2. Somewhere around the neutral depth the arrow in the corner flips and the water starts pulling instead of pushing. Stop finning. A 45 m dive on 2.5 kg of lead is 35 free metres. Every kick in there is oxygen spent on something gravity was doing anyway.
  3. Turn, and climb at the green mark.
  4. Watch the dashed line, not the bar.

The plate turns you, but it does not stop you. On a heavy belt you will overshoot it by two or three metres before the economical effort arrests 1.9 m/s of freefall, which is a real thing that happens to real divers and is the reason a competition lanyard has slack in it.

Reuse

Everything in src/dive.mjs is metres, seconds, kilograms, newtons, litres and atmospheres absolute. No DOM, no canvas, no rendering.

node scripts/measure.mjs prints every table on this page; --csv gives one row per run. node scripts/screenshot-demo.mjs regenerates the thumbnail and the media shots by driving the demo’s own hooks in a real browser.

Gotchas

A note on the real thing

The safety diver in the demo meets you at 20 m and is the only reason a shallow blackout in this game is a bad afternoon rather than the other thing. That is not a game mechanic either. Freediving’s entire safety culture is one rule — never alone, ever, not in a pool, not in two metres of water — precisely because the failure mode is silent, it happens near the surface, and the person it happens to feels fine right up until it does. Nothing here is training.