Rivers sized by flow: why the width rule, the cut-off and the colour
Published
Rivers are drawn from the HydroRIVERS dataset, which gives each stretch of river an estimate of its long-term average flow[1]. The game turns flow into width with one rule. More in the devlog.
Width = 13.9 × √flow
Why: the developer’s call was a “real anchor”: pick one river the game knows well and make it come out right, then let every other river follow the same rule. Width grows with flow as a power law[2]; the game uses the common square-root form. The anchor is the Chao Phraya through central Bangkok: HydroRIVERS gives its average flow as 828 m³/s[1], and the game sets its width at 400 m. The 400 m is the game’s anchor figure, not a sourced measurement. 400 / √828 ≈ 13.9 (derived).
Decided 2026-10-28 · tools/pipeline/bake_rivers.py ANCHOR_WIDTH = 400.0, ANCHOR_Q = 827.741, A = ANCHOR_WIDTH / sqrt(ANCHOR_Q) ≈ 13.90
Rivers under 60 m are left out
Why: the river texture has pixels of about 49 m. Narrower rivers would break up into dots, and most would hide under the forest anyway.
Decided 2026-10-28 · tools/pipeline/bake_rivers.py MIN_WIDTH = 60.0
Clean blue-green, not muddy
Why: “it’s after-earth era so nature is pristine.” The sea’s own blue was tried first: “too blue”. The colour is a judgement, not a measurement.
Decided 2026-10-28 · scripts/rivers.gd Rivers.COLOUR = Color(0.008, 0.04, 0.055)
Turning to sea blue over the last 2.5 km
Why: the river data’s coastline sits 8 to 20 km inland of the game map’s coast round Bangkok, so rivers stopped short of the sea: “it not connect to the sea”. Each mouth now runs on to the map’s sea and should “blend into the sea at the mouth”, changing to the sea’s blue over its last 2.5 km.
Decided 2026-10-28 · tools/pipeline/bake_rivers.py MOUTH_BLEND = 2500.0; scripts/rivers.gd Rivers.SEA = Color(0.0103, 0.063, 0.216)
Related
Sources
- HydroRIVERS, HydroSHEDS.
an estimate of long-term average discharge
- The hydraulic geometry of stream channels and some physiographic implications (Leopold and Maddock, 1953), U.S. Geological Survey, Professional Paper 252.
vary with discharge as simple power functions at a given river cross section