SalmonRun2

Salmon Run 2: design document

What the game is and how it is put together, as built so far. The README covers how to run, export and test it; this is the design. Last updated 2026-10-05.

1. The pitch

A low-poly trick racer about one sockeye salmon’s life. You swim a course, jump, spin and flip for points in time with a drum & bass soundtrack, and the courses add up to the salmon life cycle: the long swim home from the ocean to spawn, then the next generation’s run back down to the sea.

Reference for the life cycle: https://www.nps.gov/olym/learn/nature/the-salmon-life-cycle.htm

2. A run

A run is the whole life cycle, so every stage on it is swum twice.

  1. Spawning migration (late summer into autumn, upstream). The adult swims from the Big Blue to a spawning ground. It is silver at sea, turns as it enters fresh water, and is red and green by the upper rivers. From the coast on, the water climbs.
  2. Seaward migration (spring, downstream). The adults spawn and die; you swim the same stages back to the ocean as one of their young: a fry in the lake, a barred parr in the rivers, a silver smolt by the sea. The rivers fall away again and the scenery is in its spring colours.

Reaching the ocean ends the run. Best scores are kept per stage and per direction.

Flow of screens

Title → NEW RUN → globe on the Big Blue → START → intro → stage → results → globe (pick the way on) → travel line → next stage → … → spawning ground → spawning scene → the same stages in reverse → the Big Blue → outro → the run’s summary page.

3. The map

Two routes, North America and Japan. They share the first three steps and part at step 4. Each has a fish farm as a short, easy early ending and a home lake at the end of the full run.

The stages are joined up into one run of water. A run is not a string of separate screens: the salmon never leaves the water between one stage and the next.

Not done yet: the next stage is made in one go (about a third of a second on a desktop, longer on a phone: a hitch while the globe is coming down).

Each stage names the stages it leads to. The first is the default way on. The others are advanced ways, opened by meeting that stage’s goal; otherwise they are shown locked.

Step Stage Where Leads to (default first) Goal to open the rest
1 Big Blue mid Pacific Deadliest Catch, Abyss collect 12 rings
2 Deadliest Catch Gulf of Alaska Rocky Coast, Harbor 5 tricks on the beat
2 Abyss Mariana Trench Reefside, Aurora 5 tricks on the beat
3 Rocky Coast off British Columbia The Fish Ladder, Withering Waters no more than 2 wipeouts
3 Harbor Puget Sound The Fish Farm, The Fish Ladder score 60K
3 Reefside off Okinawa Neon Harbor, Bubbling Brook, Withering Waters collect 14 rings
3 Aurora Bering Strait Bubbling Brook, Neon Harbor collect 12 rings
4 Bubbling Brook inland of Seattle Emerald Plunge, Riptide Rapids score 70K
4 Withering Waters near Bend, Oregon Riptide Rapids, Alpine Lake collect 12 rings
4 The Fish Ladder Seattle Riptide Rapids, Alpine Lake 6 tricks on the beat
4 The Fish Farm north Puget Sound early ending  
4 Neon Harbor (Japan) Tokyo Bay The Hatchery, Bamboo Baitway score 60K
5 Emerald Plunge Mount Rainier Alpine Lake  
5 Riptide Rapids Mount Rainier Alpine Lake  
5 Bamboo Baitway (Japan) Hokkaido Ancestral Waters  
5 The Hatchery (Japan) north Honshu early ending  
6 Alpine Lake Mount Rainier ending  
6 Ancestral Waters (Japan) Hokkaido ending  

Notes:

Lately (not yet worked into the sections above)

4. Stages

A stage is a course about 2.4 to 3.4 km long (roughly 55 to 95 seconds): open water 70 to 140 m wide at sea, a river 16 to 21 m wide inland, a lake or harbour 22 to 28 m. It is generated from one entry in scripts/world/levels.gd. An entry sets the course (length, width, slope, how much it bends, what it is made of, how often waterfalls come), the scenery (bank shape and colours, a table of dressing rules), and the sky, fog, light and water.

What a course is made of

Piece What it does
Ramps Kick you into the air. Rings mark the arc.
Rails Bamboo, logs or pipes to grind along; land on one or swim onto its end.
Rocks Rapids full of rocks (ice, coral heads, containers). Clip one swimming and you are bumped; hit one in the air and you wipe out.
Rings Trails to collect: points and boost.
Predators Bears in rivers strike on every other beat: jump them or steer wide. Sharks at sea keep no beat: each swims to and fro across your way, one at the surface and one under it, and touching it at its own depth is a wipeout, so go round, over or under.
Waterfalls Going up: a wall 2.6 to 4 m high to leap, or be washed back 40 m. Going down: a drop of 9 to 20 m to launch off.
Currents, boost rings, sea nettles Under the sea stages only: see “The layers under the water”.

There is a gate over the finish and none at the start.

The stages at a glance

The sea is wide and the rivers are narrow: the sea stages are 70 to 140 m of open water (the Rocky Coast and the Reefside with land along one side only), and the rivers after them are 16 to 21 m between their banks.

Stage Look Water Predator Notable
Big Blue broad daylight, deep blue water, buoys, ships far off flat, open shark (rare) the gentle start: 140 m of open water, long empty stretches, no rock fields, no bottom in sight, no ramps; six layers to dive
Deadliest Catch cold open water off Alaska, the sea floor in sight, the fishing fleet about flat shark 90 m wide; strings of crab-pot floats (dive under them); two layers to dive
Abyss near-black water, glowing jellyfish, seamounts flat, open, 110 m wide, six layers deep and swum all under the water none the abyss: come into down a giant current from the Big Blue, left by a current back to the surface; currents, boost rings and sea nettles
Rocky Coast the coast of Oregon under a grey sky: 70 m of sea with a rocky shore along the left only (dark sand, black rock, sea stacks, drift logs, spruce on the bluffs) and open water on the right barely climbs shark  
Harbor quays, cranes, sodium light barely climbs shark  
Reefside pink dawn over clear water, 70 m wide, a beach along one side only, dense coral flat, open shark  
Aurora pack ice and icebergs under an aurora, 100 m wide flat, open shark  
Bubbling Brook farmland, barns, windmills; very winding gentle climb none harvest gold in autumn, green in spring
Withering Waters red-rock canyon, cacti, mesas climbs none a few waterfalls; blooms in spring
The Fish Ladder concrete channel through forest climbs none a waterfall every 170 m
The Fish Farm net pens on a grey lake flat, open none short; feed barrels are the only obstacles
Neon Harbor Harbor under pink city light barely climbs shark  
Emerald Plunge temperate rainforest: big conifers, ferns, mist climbs bear the training course borrows its look
Riptide Rapids granite gorge; gold larches in autumn, snow in spring steepest bear most waterfalls and rocks
Bamboo Baitway Japanese mountain stream: bamboo, torii, lanterns climbs bear red maples in autumn, cherry blossom in spring
The Hatchery The Fish Farm with bamboo ashore flat, open none  
Alpine Lake wide calm lake ringed by peaks flat, open none ramps, rails and rings only
Ancestral Waters Alpine Lake with maples and torii flat, open none  

Seasons are part of each entry: the base settings are autumn (the way up), and a spring block replaces whatever changes on the way down.

A pack of six salmon swims every course right round you, matching your life stage: each steers as a flock does (boids: keep clear of your neighbours, swim the way they swim, make for the middle of them) and follows you besides; they leap when you leap and dive when you dive, and each leaves a small V of foam behind it and a little splash where it leaves the water and lands. In the flow (from x2, fully at x3) the pack draws in close and falls in step: as high out of the water as you are, and turning every spin, flip and corkscrew you turn (School.in_step). Other salmon swim further off about their own business, and there are more of them the higher the stage’s score (3 at the start, up to 16 by 120,000). All of them avoid rocks, ride ramps and leap falls. They are company only.

On the salt water there is more: swarms of sardines under the surface, each a ball turning on itself; a wall of sardines that gathers at the edge of the course as you near it, in place of a line of buoys (edge_swarm.gd); and a chance on every stage of a leatherback turtle, a humpback whale off to one side (it rolls up to breathe and now and then throws itself out of the water) and Pacific bluefin tuna that come by from behind (sea_visitors.gd). Which of those a stage has is rolled when it is begun; more of each turn up as the score climbs, and a kind the stage did not have turns up anyway once the score is high enough. They are scenery: nothing touches them.

5. Controls

Touch (and mouse, which counts as a finger)

Gesture On the water In the air
Drag a stick under the thumb: drag to one side of where your finger came down and the salmon steers that way, harder the further you drag, for as long as you hold it there (until it meets the bank). Where on the screen you touch makes no difference  
Swipe up full jump (also hops off a rail); dived, comes back up to the surface backflip
Swipe down dive one layer deeper frontflip
Hard flick left / right dash 3 m that way, turning a corkscrew as it goes (it takes a fast, flat flick well past the reach of the stick, so that turning does not set it off) spin with a corkscrew
Swipe left / right / down / diagonal   one full 360 that way: spin, frontflip, or both
Wiggle back and forth boost  
Circles boost corkscrew, the way the finger goes round

Touch has no grabs yet.

Keyboard / gamepad keep the fuller set: steer, swim harder or brake, hold-and-release jump (charge), boost, corkscrew, four grabs. See the README for the bindings.

The layers under the water

The salmon swims on the surface or dived under it. Swiping down goes down a layer; swiping up comes up one (and from the surface, jumps). Once under, it can also be swum up and down freely, to anywhere between the layers and back to the surface: up and down on the keys or the stick, or a slow drag up or down with the finger held (a quick stroke is still a swipe). Steering and speed are the same at every depth. A river has one layer under the surface (1.7 m down). The Big Blue has six and the Abyss three, 3.6 m apart; the Deadliest Catch has two, 2.6 m apart.

What is under the sea stages with layers (Big Blue, Deadliest Catch, Abyss) is laid out on its own along a trail of its own, whatever is on the surface above it (deep in levels.gd):

6. Scoring

6b. Water, wake and splashes

7. Music

Six tunes, one per step of the map, synthesized in code and baked to audio files. Stages on the same step share a tune.

Step Tune BPM
1 Abyssal 150
2 Reef Break 160
3 River Mouth 166
4 Upriver 174
5 White Water 186
6 Homecoming 178

The beat clock follows whichever tune is playing, so the countdown, on-beat landings, predators and the pulsing scenery all keep time with it. The music is muffled briefly on a wipeout and during long air.

8. The globe screen

The only map the run has. It is a full-screen scene: the Earth (NASA’s Blue Marble picture, drawn in big pixels) in space, with an atmosphere, a cloud layer above the ground and three hurricanes. It turns to face the stage in hand and never zooms.

9. Other modes and tools

10. Interface style

1990s educational software and science books: Libre Baskerville for headings, Jost for everything else, navy plates with a cream rule, cream paper buttons that turn gold in hand, and a few primary colours. The title is set like a book cover. Wording is terse and uses the life-cycle terms. All of it is defined in scripts/ui/ui_kit.gd.

11. How it is built

Godot 4, almost entirely generated at startup: meshes, courses and scenery are procedural, and the music and sound effects are synthesized offline by scripts in the project.

Area File
Game flow, menus, globe screen, results scripts/main.gd
Stages and how they connect scripts/world/levels.gd
Course generation from a stage scripts/world/track.gd
Procedural meshes scripts/world/props.gd
The salmon: movement, tricks, hazards, autopilot scripts/player/salmon.gd
The other salmon, and shoals of small fish scripts/world/school.gd, scripts/world/shoals.gd
Predators scripts/world/bear.gd
Camera scripts/world/chase_camera.gd
Splash and wake scripts/fx/splash.gd, scripts/fx/wake.gd (the wake is drawn in shaders/water.gdshader)
Water, underwater view, currents shaders/water.gdshader, shaders/post.gdshader, shaders/current.gdshader
The water every stage starts from, and a scene for setting it up in the editor materials/water.tres, scenes/water_scene.tscn (scripts/tools/water_scene.gd)
Scoring and timing grades scripts/game/score.gd
Water lab, field guide scripts/ui/water_lab.gd, scripts/ui/model_viewer.gd
Touch gestures scripts/ui/touch_controls.gd, scripts/autoload/game_input.gd
Globe scripts/ui/globe.gd, shaders/globe.gdshader
Music and the beat clock scripts/autoload/music.gd, scripts/audio/
Saves and settings scripts/autoload/save.gd

Movement is simulated in “track space” (distance along the river, offset across it, height), which keeps it robust on a twisting course. An autopilot plays the game for the title screen and for the automated smoke test.

12. Known gaps

Things that are true of the build today and likely to matter for the next round of work.

13. Next up

The next round is level details, game feel and animation. Starting points: