Tower — Design
Tower is the setting of a novel. This app exists to serve that: first as an instrument for the author to see the place and keep it consistent, and second as a companion piece readers can explore. Where a choice trades spectacle against coherence, coherence wins — canon here is series-bible material, and the book is downstream of it.
Tower is a smart cylinder in orbit around Earth, spun for 1 g, with an inner surface the size of Wisconsin, lit by sunlight piped down its axis and scattered by a swarm of mirrors it flies itself. It is also a person.
The app has three linked views:
- Exterior — a 3D render of Tower from outside, with its collector, beam and orbit. You pick a point on the hull.
- Map — a 2D unrolled map of the inner surface. You pick a point here too; the two pickers stay in sync.
- Interior — a first-person "streetview" from the picked point, with live controls for time of day and spin phase.
1. Canon
1.1 Dimensions
All numbers derive from two free parameters — radius and length — chosen so the inner surface matches Wisconsin.
| Quantity | Value | Notes |
|---|---|---|
| Radius | 50 km | floor to axis |
| Length | 540 km | sun cap to far cap |
| Wall depth | 1 km | floor to outer skin, D-044 |
| Circumference | 314.16 km | the world's "width" |
| Inner surface area | 169,646 km² | Wisconsin total area, 169,635 km² |
| Habitable land area | 169,646 km² | all of it — the hull is sealed (§1.4) |
Every square metre of the inner surface is land. There are no windows in the wall, so nothing is subtracted. An earlier version sized star slats to leave exactly Wisconsin's land area of 140,268 km²; D-017 removes them and that second coincidence with it.
1.2 Spin and gravity
| Quantity | Value |
|---|---|
| Angular velocity ω | 0.014005 rad/s |
| Spin period | 448.6 s = 7 min 29 s |
| Rotation rate | 0.134 rpm |
| Rim speed | 700.2 m/s |
| Floor gravity | 1.000 g by construction |
Consequences that the app should show or at least respect:
- Gravity falls off linearly with height. g(h) = ω²(R−h). A 1 km peak sits at 0.98 g; the axis is weightless. Mirrors at the axis float.
- Coriolis is mild but real. 2ω = 0.0280 s⁻¹. Walking is unaffected (0.4 % g). A ball thrown at 30 m/s deflects at 8.6 % g — enough that Tower's sports differ from Earth's, and enough that thrown objects visibly curve.
- Nothing in the sky moves, except through the far cap. The wall is sealed (§1.4), so along 539 of the 540 km there is nothing to wheel past — the far side of the world overhead co-rotates with you and hangs perfectly still. The one exception is the far cap window, where the sky is outside and does not co-rotate: it turns once every 7 min 29 s about a single motionless star on the axis. The spin is invisible upward and obvious deepward, and only at night.
- But everything that falls leans. Rain hangs at a permanent 1.47° slant, smoke drifts the other way, and a 1 km waterfall lands 133 m off its own cliff (§1.9.2). This inversion is the alien fact the interior view must sell: the sky is still and the water is not.
1.3 The sun system
Sunlight enters through the sun-facing end cap and runs the full 540 km axis.
- Collector. A mirror array flies ahead of Tower, gathering sunlight and concentrating it into the beam. 46,900 km² of aperture — a disc ~244 km across, two and a half times Tower's own diameter. It is the dominant visual element of the exterior view.
- Beam. 10 km in circumference — 1,592 m radius, 7.96 km² cross-section — carrying 54.3 TW at a concentration of 5,000×, or 6.8 MW/m². It runs the axis from sun cap to far cap.
- Diffusers. Not lamps — a swarm. See §1.3.1.
- The beam is visible, and it glows by itself. There is real air at the axis (§1.5), and a 6.8 MW/m² beam Rayleigh-scattering through 3.18 km of it radiates 779 W/m²/sr — 26× brighter than clear blue sky, 25,700× dimmer than the sun's disc. It is a brilliantly sunlit cloud extruded into a rod, safe to look at directly. From the floor 50 km below it is 3.65° wide, about seven sun-widths, running the whole length of the sky. This glow is a property of the beam and the air, not of the diffusers — it would be there if the beam were empty.
1.3.0 Tower never sees the sun
The collector is 244 km across and flies 320 km ahead of the sun cap, which puts it 41.8° wide in Tower's sky against the sun's 0.53° — 79 times the sun's diameter. It sits squarely between Tower and the sun, so it occults it completely, and the umbra it casts is 120 km across where Tower's 51 km sits inside it. The eclipse is total, permanent, and self-inflicted.
So nobody aboard can see the sun, for the same reason nobody can see Earth (§1.4). What they can see, through the sun cap window, is the back of the collector: 46,938 km² of structure radiating its own waste heat at about 245 K — infrared, and therefore black. It is the only object in Tower's sky that is neither Tower nor a star, and it never moves, because the collector flies in formation rather than spinning. D-050.
Its edge is not black. The face is a mirror pointed away, but the collector is backlit, and the structure holding 46,938 km² flat stands proud of the mirror plane at the rim, where the sun strikes it side-on. With the scatter any real mirror throws at grazing incidence, the edge reads as a thin sun-coloured ring — so the collector is a hole in the stars with a lit rim rather than an absence, which is how anything backlit looks. It is not sunlight leaking past the edge: Tower is wholly inside the umbra, so the sun's disc is hidden from every point in the world. The ring is lit structure. D-054.
1.3.1 The diffuser swarm
The diffusers must be individually invisible, or the sky becomes a row of separate suns. Two thresholds govern this, and only the second one binds:
- Resolvability. At 50 km, one arcminute is 14.5 m. Anything larger is a resolved disc with a visible edge.
- Visibility. Being unresolved is not enough — stars are unresolved and we see them. A mirror preserves radiance, so a mirrorlet aimed at an observer shows the sun's own surface brightness over a tiny angle. A 1 m mirrorlet reads at magnitude −13.6, brighter than the full moon. Blending into daylight requires ~1.2 cm, at magnitude −4.0, just under Venus.
Diverting 54.3 TW needs 11.3 km² of mirror, so:
| Mirrorlet size | 1.2 cm, ~1.4 cm², 2 mg |
| Count | 78 billion |
| Total mass | 158 tonnes — the entire sun system |
| Mean spacing in beam | 3.8 m — sparse enough to fly through |
| Optical depth over 540 km | 1.41, so 24 % of light reaches the far cap |
The swarm cannot be passive — it must fly, always. The axis is not weightless. At the beam's edge gravity is 0.312 m/s², enough that a foil sinks outward at 0.26 m/s and leaves the beam in 1.7 hours. A drifting swarm dissolves the same afternoon. Every foil is therefore under continuous individual control. This is not a flourish on a working system; it is the only configuration that works.
They have absurd power to do it with. Each foil intercepts 979 W of beam. Harvesting 0.1 % gives it ~1 W on a 2 mg body — 489,600 W/kg, some fifty times a jet engine's specific power.
| Down-beam, riding radiation pressure | 0.85 m/s, 7.4 days |
| Back up-beam under its own power at 1.5 m/s | 15 µW, 4.2 days |
| Harvestable from ambient world-light | 14,400 µW — a 1000× margin |
So there is no recirculation machinery, at either cap. The foils fly home on scavenged daylight. Nothing needs to be built for them, and the 1000× power margin means Tower can afford to move them wastefully — in spirals, shoals and patterns that cost energy for no reason but preference.
Lighting is a render target, not a schedule. 78 billion independently aimed mirrors put any intensity on any patch of ground at any time. Dawn, dusk, moving cloud shadows and seasons are compositing problems, not optical ones.
Together they make Tower's sun (D-074). Individually invisible, the swarm gathers by day into a single shoal on the axis and throws the beam's light out sideways from there — one blazing point 3.2 km across, which is Tower's sun. The shoal moves: it forms at the sun cap at sunrise and flies the length of the world by sunset, where it disperses (§1.3.4). Each mirrorlet in it is aimed, so Tower sends as much of the sun's light toward ground far away as toward ground beneath it, and the sun looks equally bright from everywhere, as Earth's does; the ground is lit by how high it stands. The shoal takes only part of the beam and lets the rest run on (D-079), so the rod glows from cap to cap at every hour, a little dimmer past the sun than before it, and ends on the far cap's mirror. This is the one exception to the rule above that the diffusers must never read as a sun: Tower wants exactly one.
Aiming resolution is human-sized. A 1.2 cm mirror is diffraction-limited to 4.6×10⁻⁵ rad, so its reflection lands as a 2.3 m spot on the floor 50 km below. Tower can put a glint on one person that someone five metres away cannot see. The privacy is set by the wavelength of light, not by any protocol.
Mirrorfall. A failed foil sinks out of the beam and falls. Terminal velocity at the floor is 0.48 m/s; the descent takes about two days and it lands like a snowflake. There is a permanent slow glitter coming down out of Tower's sky.
Illumination is a dial, not a constant
54.3 TW is Tower's capability, not its setting. Spread over the inner surface it is 320 W/m² mean, which — with roughly half the surface lit at a time and a sinusoidal day profile — puts local noon at ~1,000 W/m², Earth clear-sky daylight. But the diffusers are software-controlled, so brightness is genuinely adjustable in-world across the full range:
| Setting | Mean W/m² | Feels like |
|---|---|---|
| Twilight | 30 | permanent overcast dusk |
| Temperate | 200 | Earth's global mean |
| Full | 320 | Earth clear-sky noon |
This should be a control in the app, not a fixed number. It is the most characterful thing about a world whose sun is a machine.
Headroom
5,000× is 11 % of the étendue limit (46,223× at 1 AU). Tower could in principle
push the beam 9.2× further and cook itself; the diffuser network is as much a safety
system as a lighting system. 5,000× was chosen because it is demonstrated
technology — the Odeillo solar furnace reaches ~10 MW/m² on Earth today. Nothing in
Tower's sun system requires physics that does not exist. See decisions.md D-003.
1.3.2 Night, and the difference between banked and off
Night is the sun going out and the beam banked (D-074). The sun reaches the far cap at sunset and the shoal disperses; the beam is then banked for the night, and comes back up for the sun to light at the sun cap in the morning. Banking is not optional, for the reason below.
Night cannot be made by aiming the swarm away. The glow above belongs to the beam and the air, not to the diffusers, so a fully lit beam lights the world whatever the mirrorlets are doing: 779 W/m²/sr over a strip 3.65° wide running horizon to horizon is about 0.2 sr, which lands ~100 W/m² on the floor — half of temperate, and no kind of night. Tower's night is therefore made by banking the beam itself, to a thousandth of full: 0.32 W/m², a rod you can still find overhead and a world you can just make out under it (D-046).
Shutting the beam down entirely is a different state and a much worse one. No airlight, no lit ground, no rod — the only thing left in the world is the sky through the far cap. §1.9.4 gives the thermal mass about a week of coasting, so this is a state Tower can survive and not one it can sit in.
| Setting | Floor | What it is |
|---|---|---|
| Dark | 0 | the beam shut down. Stars, and nothing else. |
| Night | 0.32 W/m² | the beam banked to a thousandth |
| Moonlit night | up to 0.64 W/m² | the same, and a full moon's light again (§1.3.5) |
| Twilight | 30 W/m² | |
| Temperate | 200 W/m² | |
| Full | 320 W/m² | Earth clear-sky noon |
1.3.3 The far cap mirror, and where the last quarter of the beam goes
Since D-079 the mirror is lit at every hour. By day the sun's shoal takes part of the beam where it is and lets the rest run on to the far cap; by night the mirror works on the banked beam. The rod always ends on it.
The swarm has optical depth 1.41, so 24% of the beam survives all 540 km — and it survives collimated, in the beam's own 7.96 km² cross-section. That is the whole shape of the problem: not 13 TW spread over a 7,854 km² cap, but 1.7 MW/m² in a 3.2 km spot, about 1,200 suns. An absorber there sits at 2,330 K.
So the spot is a mirror (D-048), and only the spot: it is a thousandth of the cap's area, which is what leaves the other 99.9% free to be window (§1.4). A mirror is the cheap answer rather than the expensive one — at 99.9% it absorbs 1,665 W/m², about 1.2 Earth solar constants, so the thing that would have glowed white is merely warm.
It also recovers the energy. The residual goes back up the column, which makes the optical path 1,080 km instead of 540 and utilisation 1 - e^(-2τ) = 94% rather than 76%. What survives even the return trip leaves through the beam aperture toward the collector, which sends it back again; in the limit the whole 54.3 TW lands on the inner surface. This is why full brightness is 320 W/m² and not 243 — the figure in §1.3 assumes the entire beam is eventually used, and with the cavity closed at both ends it is.
Aiming light at a region to warm it is a separate lever and stays one (§1.9.4). The mirror is about not wasting the beam; the desert is about where the weather goes.
1.3.4 The day: a sun that crosses the world
Rewritten for D-074; it replaces the dawn front of D-053.
Tower's day is 24 hours, chosen for the people living under it — nothing
physical offers one, since the spin is 7.5 minutes and has nothing to do with light.
Tower keeps an Earth city's days: Pisa's (D-089; until then, Sydney's). Its clock is
Pisa's — Italian time, daylight saving included — and its sunrise and sunset are Pisa's,
so the days lengthen and shorten with Pisa's seasons. Day 0 is the northern autumn
equinox, 23 September 2026, so the calendar starts on a 12-hour day and shortens toward
December. The city and that date are the calendar in the world file, and can be changed
there. The app's clock opens at Pisa's time now and runs on at the speed it was last run at.
The sun crosses the world once a day. It lights at the sun cap at sunrise, travels at a steady speed down the axis, and reaches the far cap at sunset, where it goes out. At the equinox that is 540 km in 12 hours 11 minutes — 44 km/h, a sun you can watch move; at midwinter the day is 8 h 55 min and it runs at 61 km/h, and at midsummer 15 h 27 min and 35 km/h. It takes a quarter of an hour to light and a quarter of an hour to go out, which is the shoal gathering and dispersing. Then it is night (§1.3.2) until the next sunrise.
Every place has its own noon. The sun is 50 km overhead when it passes, so each place along the world has its midday at a different hour: the sun-cap end in the early morning, The Capital at about midday, the far-cap end towards evening. Away from overhead the sun stands lower — 45° at 50 km off, 11° at 270 km — and the ground is lit by how high it stands (§1.3.1). It never sets: from one cap, the sun at the other is still 5° up. Morning is a low sun in the sunward sky, evening a low sun deepward. §1.9.4 says Tower has no latitude; the sun gives it longitude, and a direction for its days.
The same sun inside and out. The sun is a point on the beam, lit by the beam, and it is drawn once and seen by both views — from the floor, and in through the windows from outside — with the same haze between it and the eye.
1.3.5 The night: a moon
Asked for by the author, 2026-09-28; D-088.
Tower has a moon. By night the swarm gathers a second, smaller shoal on the banked beam, the size of the sun — 3.2 km, as Earth's Moon and Sun are one size in Earth's sky. It lights at the far cap as the sun goes out there at dusk, and crosses the world the other way, sunward, reaching the sun cap by sunrise, where the sun lights behind it. At the equinox that is 540 km in about 11 h 50 min, some 46 km/h; the long winter nights run it slower.
It keeps Earth's Moon's phases, as the sun keeps Pisa's days. Its disc is lit as much as the Moon is lit that night, and shaped like it: the lit part lies toward the far cap while it waxes — the end the sun went out at, as a waxing moon on Earth is lit on the side of the set sun — and toward the sun cap while it wanes, the end the sun will light at. The dark part is not drawn; those mirrorlets are simply turned away. At new moon there is no moon.
It lights the world. At full it throws as much light on the floor as the whole banked rod, so a full-moon night is twice as bright as a moonless one — 0.64 W/m² against 0.32 — and lit from one direction, with the land facing it brighter. Tower banks the beam that much less to feed it. This is a choice and not a necessity: Earth's full moon is about a hundred and fiftieth of Tower's banked night, and would be lost in it. Water shows a path of moonlight.
1.4 Sealed hull, and the cap windows
The cylinder wall is opaque and unbroken. No slats, no windows, no view out along any of the 540 km. From anywhere on the inner surface, the sky is land, haze and the beam — nothing else. See D-017.
The only views out are at the end caps, and they are peculiar:
- A cap is a wall, not a floor. Gravity there points radially outward, which is tangent to the cap's surface, so nothing rests on it — you would slide to the rim. Each cap is a 50 km vertical cliff standing at the end of the world, and its windows sit at its base, at eye level for anyone standing on the floor.
- The sky through them does not sweep — it turns. A cap window looks along the spin axis, which is the celestial pole. Stars rotate about a fixed centre, one full turn every 7.5 minutes, with one motionless star at the middle. A pinwheel sky. It is the only moving sky anyone in Tower ever sees — and because the axis is horizontal from the floor, it wheels about a point on the horizon rather than overhead.
- The caps have more than one name. The sun cap is the end the beam enters by. The far cap is also the star cap: it is the one with the stars in it — and the night cap, since night starts there: the sun goes out at it at dusk, and the moon sets out from it (D-088). All are used, and more names are added as they come into use (author, 2026-09-27, 2026-09-28).
- The far cap is glazed whole — a 100 km window looking into deep anti-sun space, not a wall with windows at its foot (D-045). Its structure survives as the window's mullions, a lattice of identical equilateral triangles 8.3 km on a side (D-078) — the old checker's pitch — so the one object in the world with a known scale still is one: the rule now reads against the sky instead of against a plate. The sun cap faces the collector rather than the sun, and is glazed too (D-050): §1.3.0 retires the "heavy glare management" this section used to demand of it, because no direct sunlight has ever reached it. Through it, a 244 km black disc, stars round the edge of it, and the beam blazing out of the aperture at its centre.
- By day the window is simply blue. §1.5 puts the far cap 100–200 km into the haze, so from anywhere but the deepward end the airlight in front of it swamps whatever is behind, and the cap reads as a disc of sky. The stars are there at noon and unseeable, which is a fact about eyes and not about the glass.
- The far cap is single-glazed, and it frosts (D-090). The glass is the coldest surface in the world and collects frost on its inner face, so Tower clears it one pane at a time, one pane per turn of the world in an order reshuffled every 35.1-hour loop. Close to, the window is a white lattice with a scatter of clear, black, starry triangles, and which ones are clear keeps changing. §1.9.6 has the numbers, and the cold wind and ice the window makes at its foot.
- The sun cap is double-glazed (author, 2026-09-29; D-090). Its inner pane stays near the air's temperature, so it neither frosts nor chills the world: the Sunward Sea is a temperate sea and the Deepward Sea the only cold one. The two caps are glazed differently on purpose.
- The beam does not go through it. §1.3.3 puts the surviving quarter of the beam on a 3.2 km bullseye at the centre of the cap, and that bullseye is a mirror rather than glass: it returns the residual up the column for a second pass. The window is everything else, which is 99.9% of the disc.
- The mirror is not the pinwheel's centre, and it is worth being clear why. The sky turns about the direction parallel to the spin axis, and from anywhere on the floor that direction is horizontal — so the pinwheel's centre is at eye level, dead ahead, down where the window meets the ground, not overhead and not at the middle of the cap. The mirror is a physical object on the axis, which from 270 km sits about 10° above that. They coincide only for an observer standing on the axis itself, and nobody can. By day the mirror blazes — it is returning 1.7 MW/m² — and is the brightest thing in Tower's sky; at night it banks with the beam and goes dark.
Nobody aboard can ever see Earth. Tower holds a terminator orbit (D-004), which puts Earth roughly 90° off the axis — out the side of the cylinder, which is now solid hull. A habitat in Earth orbit whose inhabitants have never seen the planet they orbit.
Spacecraft dock anywhere on the outer shell (author, 2026-09-28; D-087). There is no port: a ship matches the hull's spin and sets down where it likes. Docked, it turns with the hull at 700 m/s and hangs from its clamps, pressed outward at 1.02 g — its feet toward the hull and its floor toward space.
The caps are therefore the only places in the world with a horizon that is not Tower. Whatever grows up around them, it will not be ordinary.
1.5 Atmosphere and the look of the sky
Air co-rotates with the shell. Because g falls linearly to zero at the axis, the atmosphere is much deeper than Earth's:
- Pressure at the axis, 50 km up: 5.2 kPa — thin, but genuinely air.
- A vertical column floor-to-axis is ~10,600 kg/m², about one Earth atmosphere.
So the interior sky behaves like this, and the shader must reproduce it:
- Straight up you look through ~1 atmosphere and see the far side of the world 100 km away — visible, but washed to pale blue like a very distant mountain range.
- Along the axis you look through many atmospheres. The far end cap is not visible as a wall; it dissolves into blue haze around 100–200 km out. The world reads as endless in the axial direction and closed in the circumferential one.
- The ground curves up on both sides into that same blue, meeting overhead.
- The beam is a self-luminous scattering shaft 3.65° wide at 779 W/m²/sr — render it as a bright sunlit cloud, not as a light source with a halo. It runs from cap to cap at every hour; by day it is dimmer past the sun (§1.3.1, D-079).
- The sun is the other thing in the sky that is not land: a blazing disc on the beam, 3.65° across from directly beneath and smaller from afar, with glare round it (§1.3.4). By night there is the moon instead, smaller in light and crossing the other way, as lit as Earth's Moon (§1.3.5). With the hull sealed, the rod, the sun and the moon are all there is.
1.6 Orbit and attitude
- Tower holds a high circular orbit with its orbital plane kept normal to the Earth–Sun line — a terminator orbit. This is why one cap can face the sun permanently and Tower is never eclipsed.
- The plane precesses 360° per year to track the sun. Tower's angular momentum is enormous, so this 1°/day reorientation is actively driven, continuously, forever. Canon treats this as Tower's defining maintenance burden.
- Consequence for the interior view: the star field slowly drifts across the year while spinning fast every 7.5 minutes. Two nested motions. Both are drawn (D-075): the far cap looks at the antisolar point, which walks the ecliptic a degree a day.
1.7 Coordinates
The canonical surface coordinate is (θ, z):
θ— angle around the cylinder, 0 to 2π. θ = 0 is the centre of land strip 0.z— distance from the sun cap, 0 to 540 km.
The 2D map is the direct unroll: x = z, y = (θ − θ₀) · R. No projection
distortion — a cylinder unrolls exactly. This is a genuine advantage over mapping a
globe and the map view should lean on it.
The map shows the surface once, bounded, so its extent is readable. That means it needs an edge, and the edge is placed at θ₀ = the centre of the last slat. Land strip 0 is centred on θ = 0, so cutting there would slice a whole strip in half across the top and bottom margins; cutting at a slat centre leaves every land strip whole and splits only a band of stars, which carries no geography. Same reasoning as putting Earth's map edge at the antimeridian. A sightline whose short route crosses the edge is drawn as two segments, so the drawn path always matches the measured distance.
1.8 Sightlines: Tower has two horizons
Along the axis the floor is perfectly flat and never falls away, so nothing is ever hidden by curvature. Tower's horizon is haze. Circumferentially the floor curves up, so distant land rises into the sky rather than sinking below a line. The two directions behave completely differently, and this is one of the most alien facts about living there.
Rayleigh transmission from a floor-level observer:
| Distance | Along the axis | Across the interior (overhead) |
|---|---|---|
| 26 km | 78 % | 77 % |
| 50 km | 56 % | 70 % |
| 100 km | 31 % | 78 % |
| 270 km (far cap from midpoint) | 4 % — a ghost | — |
Two consequences:
- The axial horizon closes at 100–150 km. From the midpoint you cannot see either end cap. Everyone can see 100 km, knows there is more beyond, and cannot resolve it — a different psychology of distance than Earth's 5 km cliff-edge.
- The far side of the world is clearer than the ground at the same distance, because a sightline across the interior rises through thin axis air while one along the floor grinds through full density. It gets better with distance: the land directly overhead, 100 km away, is the crispest far object in Tower at 78 %. Distant geography is best seen by looking up. People would orient by what is overhead; the ground is the vague part. This inverts the human default.
1.9 Water
Tower's hydrology is stranger than its geometry, and most of it follows from one fact and one absence.
1.9.1 Coriolis never pushes surface water sideways
The floor's tangent plane is spanned by θ̂ and ẑ, and the spin axis is ẑ. For any flow along the surface:
- along the axis —
ẑ × ẑ = 0, no Coriolis force at all; - around the circumference —
ẑ × θ̂ = −ŝ, the force is purely radial.
The Coriolis term never has a component inside the surface. So Tower's rivers do not curve. No hemispheres, no Baer's law, no preferred bank erosion, no gyres, no cyclones. Every large-scale rotational habit of Earth's water and weather is absent, and a meander in Tower is pure flow dynamics with no thumb on the scale.
1.9.2 What it does instead: everything vertical leans
The force goes into the floor rather than across it, so it appears whenever water moves up or down. Deflection of a free fall goes as h^1.5:
| Fall | Lands (retrograde) | Lean of the path | Lean at impact |
|---|---|---|---|
| 100 m | 4.2 m | 2.4° | 3.6° |
| 500 m | 47 m | 5.4° | 8.1° |
| 1,000 m | 133 m | 7.6° | 11.3° |
| 2,000 m | 377 m | 10.7° | 15.8° |
Two different angles, and the interior view needs both. The path leans by where
the water lands against how far it fell — the tilt of a waterfall's plume seen
whole. The impact lean is the direction the water is actually moving when it
arrives, which is what a streak of it is drawn at, and it is half again the other in
tangent. src/canon/motion.ts computes both.
Rain falls permanently slanted — a raindrop at terminal velocity sits at a fixed 1.47° against the spin, ~51 m of drift over a 2 km fall, never varying, never reversing. It is fixed because drag holds the fall speed constant, so unlike free fall the angle does not grow with the drop: rain leans the same 1.5° whatever the cloud. Set against a waterfall's 11°, the waterfall is the compass and the rain is not, which is the opposite of what §2.4 originally assumed (D-034). Rising things lean the opposite way: smoke drifts spinward, rain drifts anti-spinward. Every plume and every shower in Tower tilts, and they tilt against each other.
The same applies to anything that descends, not just water — see §1.11 on what it does to skiing.
Horizontal flow changes weight rather than direction (Eötvös): +0.57 % for a 2 m/s prograde river, negligible hydrologically. It only matters at speed — an express train at 100 m/s gains 29 %, and anything moving retrograde at the 700 m/s rim speed is stationary in space and therefore weightless.
1.9.3 A perfect cylinder has no slope anywhere
Potential depends only on radius, so the whole floor is a single equipotential surface. Water on it has no preferred direction: a perfect Tower has no rivers at all, forever.
Every river in Tower exists because the floor was shaped. There are no tectonics and no uplift, so erosion is strictly one-way — a 3 km range wears flat in ~30 Myr under a wet engineered climate, ~150 Myr under a dry one. Tower's rivers are steadily destroying its landscape and the highlands must be rebuilt to keep them running. This is D-004's theme again: Tower's rivers are plumbing it chose to install and has to keep re-installing.
Two corollaries:
- No river can circumnavigate. A closed loop has no net descent.
- Lakes curve upward. Level means constant radius, so across a 30 km lake the far shore rides 2.3 km above your tangent plane — Earth would hide it 18 m below the horizon. You look up at the opposite beach, and water appears to climb away from you.
1.9.4 There is no passive climate at all
Tower has no latitude — every point is equidistant from the light — and with the hull sealed it has no windows in its walls either. A uniform hull radiates at 274 K everywhere, so left alone the world settles into a flat calm: no gradient, no wind, no evaporation, no rain, no rivers. The one exception is the far cap, whose window is a cold wall the size of the cap (§1.9.6, D-090); it makes a gradient at the deepward end whatever Tower does.
So every weather system in Tower is deliberate. Tower makes climate the only way left to it — by aiming light. It warms where it wants convection and shades where it wants condensation; the hull's loss is the sink. Every cloud, every rainfall, every jet stream is something Tower is doing, continuously, on purpose.
Tower also sets the sink (D-090). The loss through the hull cannot be passive: 1 km of rock conducting the mean 320 W/m² would need a difference of some 100,000 K across it, so heat reaches the outer skin because Tower sends it there. It follows that Tower can send less of it from one place and more from another. It can move about 5 TW — a tenth of the beam — between regions this way: enough to hold the far end cold and a few projects besides, not enough to run the climate on. Light is still how Tower makes weather; heat rejection is how it keeps the books.
This is D-009 arriving at its conclusion. The mirrorlet swarm was already Tower's body language; now it is also its lungs and its weather. There is no autonomic layer underneath. If Tower's attention ever lapses, the rain stops.
Costs, for scale against a 54.3 TW budget:
| Earth-like rainfall, 1,000 mm/yr | 12.2 TW | 22.4 % — Earth spends the same fraction |
| Recirculating all runoff (1,792 m³/s) against 500 m | 8.8 GW | 0.016 % |
| The far cap window's loss to space (§1.9.6) | 0.65–1.9 TW | 1–4 % |
1.9.5 Rivers are a closed, pumped circulation
With no natural cycle and no natural slope, a Tower river is a loop: a headwater reservoir, a shaped descent through the landscape, a lake at the bottom, and a lift back to the top. Source and sink are the same system.
Two ways to close the loop, and they give completely different rivers:
- The pump outfall. A river begins at a machine. Walk to the source of any river and find a wall of water coming out of a structure — not a spring, an outlet. Costs a rounding error (above).
- The made cloud. Tower evaporates the lake with aimed light and condenses it over the highlands, so rain falls exactly where the river should start. No machinery: the swarm is the pump. Costs the 22.4 % above, and buys real weather with it.
Canon uses both — made weather for the world's general hydrology, pumps for watercourses Tower wants under precise control.
Two consequences of the sealed hull:
- A river can circle the world. The surface is one unbroken sheet, so a channel can run the full 314 km circumference and close on itself — a lazy river returning to its own source. Gravity cannot drive a closed loop, so it is pumped.
- The water inventory is conserved and exactly known. Nothing evaporates to space. Tower knows how much water it has, to the litre, forever.
Lifting is also slightly cheaper than on Earth, since gravity falls off with height: 1 % cheaper at 1 km, 5 % at 5 km, 25 % at 25 km.
1.9.6 The far end is cold, and Tower keeps it so
Worked out with the author, 2026-09-28; D-090.
The window is a radiator. Glass is opaque to thermal infrared, so the far cap's single glazing does not let the world's heat out as light — it absorbs it, and its outer face radiates it to space at 3 K. A pane 0.1–1 m thick loses 80–250 W/m², and over the cap's 7,854 km² that is 0.65–1.9 TW, 1–4 % of the beam. Air cooled against the glass is denser and slides down the cap, which on a cap means radially outward to the rim, and it spreads sunward over the Deepward Sea as a cold wind off the window, roughly 5–15 m/s. Nothing Tower does makes this; it is what a cold wall does. The ice at the foot of the cap is where the physics was going anyway.
Tower keeps that end of the world dim, and lets it freeze in bands. Sunward to cap:
| z (km) | Band | By day | By night |
|---|---|---|---|
| 496–512 | open water | grey sea at about freezing, with sea smoke where the cold wind crosses it | dark |
| 512–525 | pack ice | floes made at the fast ice's edge, carried sunward by the wind, melting where they meet open water | dark |
| 525–528.5 | fast ice | dusk — the rod's glow and nothing aimed | night; the sun goes out overhead at dusk |
| 528.5–540 | the Cap Range | ice mountains, 2–3 km high against the glass, a few crests bare rock | the same, dark |
| 540 | the window | white frost with a scatter of clear panes, its foot buried in ice | stars through the clear panes |
- The dark is dusk by day, not darkness. The rod's own glow cannot be aimed away (§1.3.2) and runs on past the sun to the cap (D-079), so the fast ice gets tens of W/m² by day — a permanent overcast dusk — and real night only by night. The sun still goes all the way to the cap (§1.3.4), so once a day it goes out directly over the ice, and the moon sets out from the same place.
- Ice mountains stand against the window (D-093). Snow off the window wind and the meltwater of every cleared pane come down at the cap's foot and freeze there, so the ice is thickest against the glass. But grounded ice cannot stand much higher than a few hundred metres over a few kilometres — it spreads under its own weight until the stress at its bed is what the bed will take, about 150 kPa for cold ice frozen down — and on a 420 m sea that is a kerb: 280 m against a 50 km window. So Tower raised a range there for the ice to stand on, as it raised the Uplands (D-064): the Cap Range, rock rising from the sea bed at 524 km to about 2,400 m at the cap, higher in some places round the ring than others. Ice mantles it from where the rock leaves the water, about 528.5 km, in a low front over the fast ice, thickening as an ice sheet does to 350 m on the heights, and it drapes the ridges rather than burying them level, so the range reads as mountains and its sharpest crests stand out as bare rock. Against the glass it stands 2 to 3 km up the window, and the window's foot is buried in it. The sea no longer meets the cap: the fast ice ends against the range.
- The fast ice holds. The window wind pushes on it with about 1,500 N per metre of shore; 3 m of ice frozen to the range's foot holds some 3 MN. Tower has no tides — its moon is light (§1.3.5) — so the thing that breaks Earth's fast ice out is absent. Storm swell is the threat to it, and the Deepward Sea is on the weather plan.
- The whole sea is ice-cold, not only the ice. With no Coriolis in the plane of the floor (§1.9.1), a 1 K difference in the water drives an exchange of about 0.45 m/s, cold out along the bottom and warm in over the top. That mixes the sea's 44 km to within about a kelvin, so the open water sits at freezing. It is a polar sea, grey and foggy, and its coast has fog where the land's air comes down onto it. No sea in Tower can be frozen in one corner — only whole or not at all.
- The window's bill is paid by the air. If the sea paid the 0.65–1.9 TW, the open water would need daylight on it, 140–400 W/m². Instead the weather runs one overturning cell: warm air from the lit lands comes deepward aloft to the glass, cools, sinks, and goes back sunward along the surface as the window wind. The sea pays only what that wind takes from the open water, which is also how fast ice is made — so Tower sets the ice edge by how hard it runs the cell.
- Tower turns the hull down under the sea (§1.9.4). If the floor went on drawing its share, the sea would be cooled from beneath and freeze on its bed first, and no light would keep any of it open. The far end takes about 2 TW of Tower's 5 TW of heat control.
The window frosts, and Tower clears it one pane at a time. Cold glass collects frost on its inner face — very roughly millimetres a day, enough to whiten a pane in days — so left alone the far cap would go white and the stars would go. Tower heats one pane at a time from its frame: melting a pane's frost is about 6 × 10¹² J, a few minutes at tens of GW, and the meltwater runs down the cap onto the ice.
- One pane per turn of the world, every 7 min 29 s. The window has 282 panes (216 whole triangles and 66 cut by the rim, D-078), so a loop takes 35.1 hours — not a whole number of days, so the clearing drifts against day and night.
- Shuffled, and reshuffled every loop. A fixed order could be learned by anyone who watched long enough; a fresh one each loop cannot. Each loop's order is drawn from the world's seed and the loop's number, so which panes are clear at any moment can be worked out without the history, the same in the app and in the book.
- A pane's gap between clearings runs from almost nothing to almost two loops, so the frost on it ranges from clean glass to thick white. The window reads as a white lattice with a scatter of black, starry triangles, perhaps one in ten; how long a pane stays clear rests on the frost rate, which is rough to a factor of ten.
As drawn (D-091). The Deepward Sea's ice in the world file puts the bands where the
table has them, and the water shader draws the pack as floes and leads and the fast ice as
one cracked sheet. Tower's aimed light falls from the shore to about a third at the ice
edge, a tenth at the fast ice and nothing on it, which leaves the fast ice the rod's
twentieth by day; the views show that through the same 0.35 power the exposure gives the
light dial, so the fast ice reads as dusk, not black. The frost closes a cleared pane as
1 − e^(−age / 10 h), which leaves about one pane in ten nearly clear, and the pane being
cleared thaws across its turn. Both views share the window, so the frost is the same from
outside.
1.9.7 Farms on their own days
Asked for by the author, 2026-09-30; D-095.
Tower gives each crop the day its plant wants. Any light on any field at any hour is what the swarm is for (§1.3.1), so a farm in Tower does not live by the sun. The author's first thought was full sunlight around the clock; the plants would not thank Tower for it. Most flowering plants measure the night to know when to flower, and some — tomatoes — are injured by light that never stops. So every field gets darkness, and its own length of day:
| Day Tower gives it | Why | |
|---|---|---|
| rapeseed, flax, wheat | 18 h | long-day plants: they flower sooner and fuller under long days |
| lavender, poppies, phacelia, tomatoes | 16 h | long-day; tomatoes are day-neutral but need about six hours of dark |
| tulips, sunflowers, maize, lettuce | 14 h | day-neutral, or nearly |
| buckwheat, potatoes | 12 h | short-day; potatoes set their tubers on short days |
- A field's day starts at sunrise and is lit as at noon from first light to last, not by a sun climbing and setting. A long-day crop is lit on into the night; a short-day crop has its light taken away before the sun sets.
- Tower cannot make a field dark by day. The rod's own glow cannot be aimed away (§1.3.2), so a short day ends in the far end's dusk, a twentieth of the light, and only the world's night is truly dark.
- The fields show at night. For the first hours after sunset most of them are still lit as at noon — a patchwork blazing in a dark world — and they go out one crop at a time, the last of them six hours after sunset at the equinox.
- They cost the world a little of its night. Lighting fields after dark means a beam not quite banked, and the rod glows with the beam. With 250 km² of fields, chosen by the author for this, about 220 GW goes to them just after sunset — 0.4% of the beam — which adds about 0.4 W/m² of the rod's glow everywhere, a moonlit night's worth, falling to nothing by six hours after sunset. At 1,000 km² it would be a permanent twilight.
- Nine farms share the 250 km², spread round the world and down its length (D-096): two on the Uplands beside the Uplands Ring, four in clearings cut out of Greatwood — one of them the nearest fields to the Capital — and three on the open ground before the far end, one at the Axial Line's railhead. Each is about 28 km² (provisional names: Ringside, Far Ringside, Greatwood Clearing, Capital, Deepwood, Greatwood, Railhead, Far and Last Fields). Three-quarters of the fields are flowers in bloom — tulips red, yellow, pink and white, lavender, sunflowers, rapeseed, poppies, flax, phacelia, buckwheat — and the rest maize, potatoes, tomatoes, wheat and lettuce.
- Farms grow; they are not drawn (D-097). Each farm is a seed and an area, and grows outward over the land a patch at a time, taking the nearest and luckiest ground at its edge and never water, sand, rock, a range or a slope too steep to plough — so it comes out ragged, with lobes and bays, and goes round a river rather than across it. Its edge runs along its fields' edges: a field is in the farm or not, whole.
- Fields are irregular, the way old farmland is. The land is divided into blocks about 1.5 km across, with farm tracks along their edges, and each block was taken in hand on its own terms: its fields run at its own angle, are its own size (220–440 m), and are drawn out long by its own stretch. Inside it the fields have straight edges meeting at odd angles, and a third of them are cut again into long strips. No line runs further than a block, and no two blocks agree.
1.10 Slat orientation — RESOLVED: none
Axial strips versus rings was weighed at length (D-016) and answered by removing slats entirely (D-017). The comparison is kept in D-016 because it established what the choice cost, and because the reasoning — that slat layout sets the shape of Tower's countries, its climate map and its astronomy all at once — is what made "none" a real option rather than an absence.
1.11 The world as built
Authored geography lives in content/world.json — the source of truth — as
features the browser generates the terrain from live (world-generation.md, D-062).
Names are provisional. Tower is laid out in belts
along the axis, which is the natural grain of an engineered climate (§1.9.4):
| z | ||
|---|---|---|
| 0–42 km | The Sunward Sea | ring ocean at the foot of the sun cap |
| 55–140 km | the range | Westwall, The Sisters, Snowcrown (4,300 m), Eastwall — the named high points of The Girdle, which rings the world at z 90 km (D-051) |
| 105–150 km | The Uplands | ground Tower raised to about 1,000 m, ringing the world, so the rivers off the range can run down to The Narrows (D-064) |
| 148–218 km | The Dry Reach | desert ringing the world, 22,000 km², 13% of the surface: mesas over dune fields, dry washes, and salt pans ringed by shorelines (D-069) |
| 176/190/203 km | three ridges | ringing, concentric — and The Narrows is the only breach in all three |
| 129–470 km | the farms | nine farms of about 28 km², 250 km² in all, round the world: on the Uplands, in Greatwood's clearings, before the far end (§1.9.7, D-095, D-096) |
| 214–430 km | Greatwood | forest belt: about three billion trees, with meadows Tower left open in it (D-071) |
| 248–402 km | The Deep | 154 × 32 km sea, long down the axis and narrow around |
| 270 km | The Capital / The Spindle | axial midpoint; 20 km across, its spinward edge on The Deep's shore (D-070) |
| 496–540 km | The Deepward Sea | ring ocean at the foot of the far cap: open water to 512 km, pack ice to 525, dim fast ice to the Cap Range (§1.9.6, D-090) |
| 528.5–540 km | The Cap Range | ice mountains Tower raised against the far cap's window, 2–3 km high (D-093) |
| 110–480 km | The Axial Line | railway down the length of the world, through The Narrows (D-086) |
| 140 km | The Uplands Ring | railway round the world across the Uplands (D-086) |
The railways keep a grade of their own over the ground rather than cutting it, so they run
on piers much of the way: 10–20 m up over ordinary country, and on long viaducts over the
rivers' gorges. A train going round the world has a handedness, like a ski run: the
Ring's trains, at 100 m/s, are 31% heavier running spinward and 27% lighter running
antispinward (canon/motion.ts); a train along the axis feels nothing.
Both ring seas carry ninety sailing ships each, and Tower's published weather plan (D-067) runs a 28-day cycle of storms, gales and a calm over them and The Deep.
What the desert is made of
The Dry Reach is not sand with some rock in it; it is the whole grammar of a desert, because Tower had seen deserts (D-069). Tiers of rock stand over dune fields whose crests run across the wind Tower sends there; rocky hills break up the open ground; a network of dry washes is routed by the same drainage the ranges are eroded by, because a channel network that ignores drainage is the one thing that would look wrong. In the lowest ground there are salt pans, dead flat, ringed by the shoreline benches of lakes that never stood. The middle of the Reach stands 150 m above its rim so that the washes have somewhere to run, and Tower keeps its rock 6.5 km clear of the rivers it had already routed — a mesa across The Narrows would leave the world's drainage in a slot.
Rock is laid in beds, and a bed in Tower is a constant radius, so the strata line up across separate mesas however far apart they stand. That is what makes a field of them read as one formation eroded out of one plateau.
Why the desert rings
On a cylinder you cannot go around a band. Every desert on Earth can be circumnavigated; a ringed one cannot. It is an absolute barrier across the world's waist, and with the three ridges ringing too it becomes three concentric walls.
The drainage, and why it keeps the chokepoint
Four rivers come off the range — Westwall Water, Sisters Water, Eastwall Water and The Long Water. On Earth most drainages do not cut through a rising ridge; they are defeated and diverted, and only an antecedent river with enough power keeps its course. So three of the four are turned by First Ridge, run along its front gathering each other, and leave with the fourth through the single gap.
- The Narrows carries the entire world's runoff — ~392 m³/s off a 9,800 km² range, lifted 1,780 m for 6.9 GW (0.013% of budget).
- The ridge-front reaches are the only circumferential water in Tower, and weigh fractionally more or less for it (§1.9.2). Everything else runs axially, where Coriolis is exactly zero.
- Whoever holds The Narrows holds the axis of the world. The Capital sits behind it.
- The Long Water falls twice (D-066): 680 m off the range below Hollow Tarn, into a gorge, and 170 m into The Deep at its mouth. Eastwall Water falls 440 m off its side of the range. Each leans antispinward as it drops.
The drainage needed the floor raised, and generating it honestly is what showed it (D-063, D-064). As v1 authored it, the ground between the Girdle's foot and the Dry Reach — z 115 to 135 km — was a lowland barely 60 m high, below a plateau of 800–1,100 m, and v1 painted its rivers across it a kilometre up. A river cannot climb. Generated faithfully, each needed an embankment up to 950 m high to reach The Narrows.
So Tower raised the lowland: The Uplands, a ring of ground lifted to about 1,000 m, meeting the Girdle's skirt on one side and the plateau's edge on the other. The rivers now fall steadily off the range, across the Uplands and onto the plateau, and the floor under them is mostly cut — The Narrows about 500 m deep — and built up by no more than ~200 m anywhere, the height of a levee rather than a dam.
The Deep is oriented for the view
Long down the axis and narrow around it, so you cross it the short way — around θ, where the floor curves up. The authored outline is 154 × 32 km and the water fills about 18 km of that width; from the Capital's waterfront the far shore is that 18 km away and stands 2.6 km above eye level. Crossing it lengthwise instead would be dead flat. The orientation is the whole point.
The Capital is a footprint, not a dot (D-070). It is 20 km across, centred on the axial midpoint — the only centre a cylinder has — which is just wide enough that its spinward edge is on The Deep's shore, 9.8 km out, where the ground has come down from 300 m to the water's 120 m. So the city holds both the middle of the world and a waterfront. The streets and buildings inside that footprint are phase 7's.
It is also the world's flywheel: 19× the diurnal heat storage of bare ground, and 5.9 days at full power to move its temperature one kelvin. Tower still supplies every joule (§1.9.4), but the world now coasts for about a week rather than stopping the moment attention lapses.
The cap seas are not designed
Gravity on an end cap points radially outward — tangent to the cap. Nothing rests there; water runs down to the rim and pools. Both ring oceans exist whether anyone planned them or not, each with a 314 km shoreline and a 50 km cliff standing behind it. The only windows in the world are at their feet (§1.4).
They are not the same sea. The far cap's window is a cold wall, so the Deepward Sea is a polar one — ice-cold throughout, and frozen in bands toward the cap (§1.9.6). The sun cap is double-glazed and does none of this, so the Sunward Sea stays temperate.
Skiing, because it is a different sport here
Level motion feels no Coriolis (§1.9.1) but a descending skier has radial velocity, and that does deflect:
- Down the axis: a steady sideways push, always antispinward — 1.5% of g at 15 m/s on a 20° slope, 6.4% at 35 m/s on 40°.
- Around the cylinder: you get heavier or lighter. 8.6% at 30 m/s, 11.4% at 40.
So a retrograde run gets lighter the faster you go, which is self-reinforcing, while a prograde run grips harder as it accelerates. Every slope in Tower has a handedness. No Earth mountain does. Settlements sit at the tarns — Sisters Station, Hollow Station — around 2,100 m, with the runs above them.
The range as generated (D-065) is the named summits and a scatter of unnamed ones, joined by ridges and cut by water into branching valleys, all eroded as one group with the Girdle. The named summits are held at exactly their heights and are the highest ground around them; each tarn sits on a shelf the valleys were not allowed to cut, which puts Sisters Tarn at 2,173 m.
Open questions
- The Spindle's height. 3.2 km is a placeholder; an object dropped from its top lands ~760 m antispinward of its base.
- z 430–496 km is unauthored but for three of the farms (D-096). The circumference outside the named peaks is no longer empty — The Girdle carries the range round the whole 314 km — but it is unwalked: peaks with no names, and no rivers drawn off them yet.
2. Application architecture
2.1 Stack
- Vite + TypeScript (strict), no framework — the app is three canvases and a control panel, and a framework would not earn its weight.
- One layout breakpoint, at 720 px: above it the panel is a column beside the world, below it a drawer over it (D-043). The world is a full-bleed canvas in both, because all three views are drag-to-look and a scrolling page would be fighting them for every touch.
- Three.js for the exterior and interior 3D views.
- Canvas 2D for the map view.
- Web workers for world generation (world-generation.md §5): a pool of up to six, driven through comlink. Each must answer a ping before it is given the world. One whose script fails, or that is still silent a few seconds after its siblings answered, is replaced at once, up to four tries, then dropped, so a dead worker costs a few seconds rather than freezing the load (D-080, D-092). Noise is simplex-noise, sampled in 3D on the cylinder itself so nothing tears at θ = 0. Those two are the only runtime dependencies besides Three.js.
- GitLab CI → GitLab Pages, publishing
dist/asstatic/.
2.2 Module layout
src/
canon/
constants.ts single source of truth for every number in §1
geometry.ts (θ,z) <-> 3D, slat layout, map <-> surface
atmosphere.ts the rotational density profile and its extinction (§1.5)
motion.ts how things fall in the rotating frame (§1.9.2) — the only
evidence of the spin anywhere but the far cap window
terrain/ world generation, pure TypeScript — runs in workers, on the
main thread and under vitest alike (world-generation.md §5)
compile.ts the world compile: shapes, river profiles, lake levels
mountains.ts summits, ridge graphs, steady-state erosion, pinned summits
grid.ts grids on the surface: drainage, blur, sampling — shared by the above
desert.ts plateaus and mesas, dry washes, salt pans, abandoned shorelines
forest.ts where trees stand, how big they are, and what a canopy is
water.ts wind seas, fetch, river speed and foam: the water's physics
sea-state.ts every lake and sea's waves and whitecaps now, from the weather
ships.ts ship lanes, positions from the clock, the wave sum they ride
rails.ts railway lines, and the grade their track keeps over the ground
falls.ts waterfall sheets, leaning antispinward as they fall
cache.ts the compiled world kept in IndexedDB between visits
field.ts the elevation function: one answer to "how high is it here"
noise.ts seeded simplex noise on the cylinder, and the hash under it
shapes.ts signed distance, smoothed lines, on the unrolled (z, θR) plane
tile.ts the tile quadtree scheme, and one tile's mesh data
palette.ts material weights to colour, as TypeScript and as GLSL
map-image.ts the map's picture of the world, rendered in bands
worker.ts one worker: compile, tiles, map rows
service.ts the pool, generations, the status dialog's progress, ground queries
views/
palette.ts one colour per feature kind, shared by the map and the list
terrain-lod.ts the ground as a quadtree of tiles, refined around the eye
craft.ts the tour's flyers as meshes: paragliders to giant airships, trains, spacecraft
tour-player.ts plays the tour's legs: the deal, the fades, the caption
forest-view.ts the trees near the eye: meshes, then cards, then the canopy skin
tour/ the scenic tour, pure: no Three.js, flown by the views and the tests
geo.ts the floor's coordinates and the tower's frame, and the sums between them
director.ts a craft's track and bank, what is worth looking at, where the camera rides
interior-legs.ts the legs inside, found in the compiled world
exterior-legs.ts the legs outside, in kilometres, clear of the beam
plan.ts the deal: every leg once, no two of a kind in a row, 12–18 s each
world/
schema.ts world.json v2 types + validation: features, not places
instruments.ts sightline, viewshed, lighting probe, travel (§3.3)
weather.ts Tower's weather plan read at an hour: what it does, what it told people
photos.ts a saved shot of a 3D view: its numbers, checked (D-099)
state/
store.ts selected point, time-of-day, spin phase, view mode
views/
exterior.ts Three.js: hull, collector, beam, spin, point picker
interior-model.ts ground tiles, caps, bore, beam and haze, shared by both 3D views
map.ts Canvas 2D: unrolled surface, slats, terminator, point picker
interior.ts Three.js: shell geometry, the haze shader of §1.5, beam
ui/
app.ts the whole panel: list, detail card, weather board, readouts, view switching
eye-gauge.ts the interior's eye-height gauge and its landmarks of known height
scales.ts slider mappings — kept out of views/ so the panel can label
the eye-height gauge without pulling in Three.js
main.ts loads world.json and starts the app
vite.config.ts also makes world.json from content/world.json (§3.1), and on a dev
server writes the author's saved shots to content/photos.json (D-099)
tools/ node-only, never bundled; plain .mjs with no build step
port-world.mjs the one-off port of v1's geography.json into world.json v2
build-pages.sh the Pages site: every branch built into one, with branches.json (D-073)
screenshots.mjs drives the running application in a headless browser and
photographs it into docs/screenshots/ (D-042)
photos.mjs renders the shots in content/photos.json to photos/, the view alone,
at 4K (D-099)
browser.mjs what those two share: the browser, the warm world, waiting for terrain
canon/constants.ts is the spine. Every derived figure — period, rim speed, land
area, slat width — is computed from radius, length, slat count and target land
area, never hard-coded. Changing the radius changes the whole app coherently.
2.3 State
One small observable store. Views subscribe; nothing owns anything else.
type TowerState = {
point: { theta: number; z: number } | null // the picked location
tod: number // 0..1, position in the diffuser day cycle
brightness: number // W/m^2 mean, 30..320 -- the diffuser output setting
spinPhase: number // 0..2pi, rotation for star motion
spinning: boolean
view: 'exterior' | 'map' | 'interior'
probe: { from: SurfacePoint; to: SurfacePoint } | null
}
The exterior and map pickers both write point; the interior view reads it. That
is the entire interaction loop.
2.4 The exterior view
Scene units are kilometres, so the code reads in canon numbers. Tower's axis lies
along world Z with the sun cap at z = 0, which puts a canon surface point at
(R cos θ, R sin θ, z) in the hull's own frame. The hull spins about Z and carries
that frame with it, so picking resolves the ray hit back through
worldToLocal — otherwise every point picked off a turning hull would be wrong by
the spin phase.
Two deliberate departures from physics, both reading aids of the same kind as the map's hillshade:
- Fill lighting. Real sunlight here runs parallel to the axis, so Tower's flank is edge-on to it and renders very nearly black — accurate and useless. Two fill lights lift the hull enough to read its shape.
- A visible beam. In vacuum there is nothing between collector and cap to scatter light, so the converging beam would not be visible at all. It is drawn as rays because it is the thing the view is about.
- A dark collector. Both of its sides are dark, and for different reasons: the face pointed at Tower is a 245 K radiator, and the face pointed at the sun is a mirror, which shows the empty sky in front of it and not the sun behind the eye. What makes it legible is the sunlit rim of D-054 — the same 4 km ring the sun cap window sees from inside, drawn here as geometry rather than in a shader (D-055). The mirror face is lit by the sun alone, in its own shader: as a standard metal material it also reflected the fill lights, which do not exist, as a blue-white sweep across the disc (D-060). The sun sits on the axis behind the collector, so its glint shows only when looking nearly straight down that axis.
The stars are the interior's, and they are Earth's (D-075). The sky is a sphere around the scene painted with the same star field the windows use (D-056), sampled by direction from the camera so the stars sit at infinity and hold still as the camera orbits. The field is the Yale Bright Star Catalogue — every star to magnitude 6.5 — set by the clock's date: the axis points at the sun, so the sky behind Tower is fixed by the sun's ecliptic longitude, and turns once a year. Outside, ecliptic north is up (scene +Y), the one roll square to the axis on every day. Spin does not turn it — the camera is not riding the hull — and there is no daylight to adapt to, so it is drawn at full gain (D-060).
The hull can be tried in other dress (D-076). Rock is the first: a cratered, lumpy shell a few kilometres thick laid over the metal skin, never into it, with the windows left clear. It is an experiment in how Tower might look, not canon — the mass alone would be a question for §1.2 — and it sits in the Hull switch beside True and X-ray. Piping is the second (D-077): the skin plated in panels, banded every ~36 km with hoop pipes either side, pipe bundles running between the bands on brackets, clustered blocks of plant, vents whose grilles and plumes switch on and off at random, and thruster pods at each end that fire rarely, with long flaring flames and real light on the hull. Everything is dusted, matte where the dust lies, so the metal does not read as chrome. Every part is outside the skin, so the windows still see only Tower's inside. Rock and piping is the third (D-081), the two at once: the reading is that rock was heaped over the plant as shielding, so it lies in banks tens of kilometres across over about three fifths of the hull, half as tall again as the Rock reading, with scarps at their edges; the plant rooms and vents crowd into the bare ground between, the bands and pipe runs are laid regardless and go under the rock, and the rock is dug clear round each thruster pod.
Everything in the scene is captioned — collector, beam, both caps — with screen-space labels. A dark disc and a cone of light are not self-explanatory, and the collector is the least intuitive object in Tower: it is larger than the world it feeds.
The default camera frames the whole system rather than Tower alone: the collector is 244 km across and flies 320 km ahead, and it is the larger object.
The hull has two readings, and the view switches between them (D-047). True is the outer skin: bare structure, with a window at each cap. X-ray wraps the map's picture of the terrain onto the outside instead — the same image the map draws, rendered live from the world (world-generation.md §9) — from outside Tower is structure, so what that texture shows is what is inside, which makes it a diagram and not a view. Both are worth having and they are not the same claim, so the control is a two-way switch rather than a checkbox. True is the default, and the last reading chosen is remembered across reloads and view switches (D-061).
The inside of Tower is the interior view's own model (D-060), not a lookalike.
The displaced ground, both glazed caps, the far cap's bore and the beam are built
once in interior-model.ts and added to both scenes, so looking in through either
window from outside shows the same land, hazed by the same integral, as standing in
it does. Two things make that work from outside. The haze integral clips its
segment to the air — the part of the sightline inside the tube, between the sun
cap and the far cap's glass — so the kilometres of vacuum between the camera and the
window add nothing; from inside the clip is the whole segment and nothing changes.
And the windows are see-through: a pane that paints the computed sky from inside
is transparent from outside, carrying only the haze in front of it, so what shows
through is the scene that is really there — the land beyond the near cap, and the
collector and the stars beyond the far one. The shaders work in the tower's frame,
and the exterior hands them the world-to-tower transform each frame, because the
hull is turning and the air turns with it.
The outer skin keeps its own mesh and its own two modes. It sits a kilometre out from the floor, where D-044 puts the wall's outer face, with a ring closing the wall at each end — generated ground goes below the datum, and a skin at the floor's own radius let sea floors and tile skirts show through the hull (D-064). Three's cylinder runs u around and v along, while the image is the other way round, so the UVs are rewritten from the original attribute rather than derived from vertex positions — the seam vertices are duplicated, and deriving an angle from them smears one column of triangles across the whole image.
The camera position persists across reloads, alongside the active view, so returning to the page returns to the vantage you left.
The scenic tour runs outside too (D-085): spacecraft, a new one every 12–18 seconds — skimming the hull, circling it against its spin, docking on it, looking in through the far cap, over the collector's rim, down the beam, and Tower, the collector and the sun framed together. A leg flies either in space, where the hull turns past at real speed, or in the hull's own frame, where it holds still and the stars wheel. No craft enters the beam's cone.
There are no place markers (D-060). Selecting a place still swings the camera round to it, and a cap is framed from about 40° off the axis so its window faces the camera; the sidebar and the map carry the places themselves.
2.4 The interior view — built
Scope, since D-062: real geometry, and ground generated to match it.
Real: the ground is the actual cylinder, curving up on both sides and closing overhead, built from generated tiles (world-generation.md §6). Stars only through the far cap — the wall is sealed (§1.4), so for 539 of the 540 km the sky is land and light. The far cap is glazed (D-045) and the sky beyond it is the real one (D-075): the Yale Bright Star Catalogue, baked into cells on a cube's faces so a pixel reads only the nine cells round it, and looked up by view direction turned about the spin axis by the spin phase — one turn every 7 min 29 s, the point on the axis genuinely motionless — and then by the date, which sets where the antisolar point is.
The ground is a quadtree of tiles, each a 65-vertex grid bent onto the cylinder in a worker: 34 km tiles on the far side of the world, 33 m tiles underfoot, so vertices are half a kilometre apart overhead and half a metre apart at your feet. A tile splits once the eye is within 1.8 tile-widths of it, and only once all four of its children have arrived — detail pops in, and the ground is never missing. The tiles carry material weights rather than colour, and the shader turns them into colour from the same palette the map uses, with v1's mottling and a little grain near the eye. There is still no scenery: no buildings, no trees, no water surface of its own. Those are phases 3–7 of world-generation.md.
Haze is the shader, and it is integrated rather than faked. Every fragment samples the rotational density profile 24 times along the ray to the camera and extinguishes per channel — red survives twice as far as green, blue half as far, which is what makes distance blue rather than grey. From the floor it reproduces §1.8 from the inside: 78% straight up against 31% for the same 100 km along the ground, printed in the readout so the claim can be checked rather than believed. The airlight the haze adds is neutral; tinting it blue double-counts the wavelength dependence and turns even the desert mauve (D-034).
Nothing inside the scene rotates, because the observer, the ground and the air
all co-rotate. What falls carries the spin, and §1.9.2 is lopsided about how: rain
leans a fixed 1.5° whatever the cloud, because drag pins its speed, while only free
fall keeps accelerating and so keeps leaning. The waterfall is the compass; the
rain is barely a hint. Rain is no longer drawn (D-049) — 1.5° is not a picture,
and the pinwheel below does the job it was standing in for. The physics stays in
canon/motion.ts and stays tested; it was only ever the rendering that could not
carry it.
The one thing that does turn is outside. The sky through the caps does not co-rotate, so it wheels once every 7 min 29 s about the motionless star on the axis (D-045). It is the only evidence of the spin in the view. Both caps are windows (D-050), so it can be had looking either way along the axis — deepward into empty space, or sunward past the black disc of the collector.
The observer stands on the terrain by asking the same elevation function the tiles are built from, at full detail. D-035's readback of a raster is gone with the raster.
Keyboard flight: W A S D or the arrows move along the heading, E and Q climb and descend, shift is five times faster. Speed is proportional to height above the ground, so the ground passes at the same apparent pace from a metre up or ten kilometres.
Instruments in the view: eye height from 1.7 m to the edge of the beam, 48.4 km up (D-084), with the local gravity beside it — a vertical gauge up the view's right side, marked with real-world things of known height so the number means something (D-082) — the five canon illumination settings of §1.3, a field of view fixed at 60° (D-083), and captions on every place still visible through the haze. Selecting a place walks the observer to it (D-038) — the haze horizon closes at 100–150 km, so turning to face something usually just points at haze.
Both caps are glazed (D-045, D-050), framed by a lattice of identical equilateral triangles 8.3 km on a side (D-078), with a vertex on the axis where six meet. That is the pitch of the polar checker it replaced (D-041), so it is still the only object in the world with a known size and still doubles as a scale for judging distance, read against sky. The exterior draws these same caps — the same meshes and shaders, not a copy of them (D-060).
The far cap's glazing is set a kilometre into its own frame, so from inside there is a 1 km reveal around it. That is the only place the wall depth of D-044 can be seen from within the world, which is why it is the only place it is drawn.
Water is geometry (D-066). Every lake, sea and river is a surface at its own level — a level in Tower is a constant radius, so a lake curves up with the floor — drawn over the ground with the depth test finding the shoreline, and the ground under it drawn as bed. Deep water is dark and shallow water shows the bed through it. Waves are sized from each body's wind — Tower's weather plan, or the body's usual wind when nothing is scheduled (D-067) — and the fetch it blows over, by the relations fitted to real seas, and drawn as six components that displace the surface near the eye and shade it beyond; rivers carry ripples downstream at the speed Manning's equation gives them, and turn white on their rapids. Whitecaps cover the share of a sea the wind speed gives. Water mirrors the hazed land overhead, and glints where it mirrors the beam.
The forest is trees (D-071). Greatwood is a density field — stems per hectare, thinned at its edges, opened where Tower left meadows, stopped by water, rock and the treeline — and the trees themselves are found by a rule rather than kept in a list, so the same trunks stand in the same places for everyone who walks there. Within a few hundred metres they are meshes; out to three quarters of a kilometre, cards turned to face the eye; beyond that the tile carries a canopy skin at the canopy's own height, which sinks back onto the ground as you approach. The Tall Wood is 52 km² of 90–115 m giants near the Capital, placed once from the world's seed: a landmark standing 75 m proud of the wood around it.
Ships sail the ring seas (D-067): procedural hulls, mainsails and jibs, instanced, each on a lane round the world at a position that is a function of the clock, riding the waves drawn under it with the mainsail set to the wind. While a gale or storm is published for their sea in time to get in, they are in harbour — off the water, since harbours are not drawn yet; a squall announced too late catches them out.
The scenic tour (D-085, replacing D-068's) flies the view itself, on the world's flyers: a new one every 12–18 seconds, dealt at random, fading through black between them — a paraglider on a summit's flank, a glider in a thermal, light aircraft and seaplanes, an airliner round the Girdle, airships low down and giants near the axis, one of them circling the sun outside the beam, trains on both railways, ships in fair weather and foul. Each craft exists for its leg. The camera rides in it or chases it, banks with it, and is pointed by a director at whatever is worth seeing from there — scored by the same haze integral the view is drawn with, so it never turns to stare at something the air has eaten. The legs are worked out from the world, so they follow its edits, and the screenshot tour photographs them.
Waterfalls lean. A river's profile steps where it cannot slope — off a range, into The Deep — and a step is a fall with a gorge below it. The falling sheet leaves the lip at the river's speed and drifts antispinward by the free-fall drift of §1.9.2, so the Long Water's 680 m fall off the range lands about 75 m antispinward of its lip. It is the first thing in the view that shows the spin by leaning, which §1.9.2 always said the waterfall would be.
The beam is drawn after all water: it is always in front of it, and drawn first it was blended under the far side's seas.
3. The world file, and how it changes
The app is an instrument for writing the novel as much as a thing to look at. It must answer questions like can the far face be seen from the midpoint?, where does a central embassy go?, can a lake overhang? — and their answers are placed, named and kept in the world file.
3.1 One file, changed in the repository
content/world.json is the world, and the only copy of it (D-072). The author
writes alongside Tower rather than in it, and changes the world by talking it over with
Claude, who edits the file; git keeps its history beside the prose. There is no editor
in the browser, no local draft in localStorage, and no import or export.
| World content | content/world.json, committed; the app only reads it |
| What the app loads | world.json, made from it by vite.config.ts: every notes emptied, every feature with "public": false left out |
| Instruments (§3.3) | the sightline probe |
| Output | permalinks to a point or place |
| Panel | view controls, place list, a read-only detail card, the weather board |
The published world.json is derived, never committed: the dev server serves it
fresh on every request and reloads an open page when content/world.json is saved, and
the build writes it into dist/. There is no second copy to keep in step. There is
no backend — GitLab Pages is static — and none is needed: the loop is edit, commit,
push, and the published site serves it.
Everyone sees the same app. Until D-072 there was a writer mode (the default) and a
reader mode (?reader=1); the query parameter now does nothing.
One exception, and it is not the world (D-099): on a dev server the author has a
button and a key that save the open view as a photograph, into content/photos.json,
written by the dev server. It is not in the build, so readers still see one app, and it
changes nothing about the world: a photograph is a camera position and a moment.
3.2 The world file
{
"version": 2,
"seed": 1729, // every feature's randomness mixes this in
"ground": { "baseM": 60, "reliefM": 260, "notes": "" },
"features": [{
"id": "the-deep", // permalink target; see below
"name": "The Deep",
"kind": "mountains|lake|sea|river|desert|forest|settlement|road|path|railway|embassy|tower|landmark|note|region",
"geometry": { "type": "polygon", "points": [[theta, z], ...] },
// or point, polyline, or band { "zFrom", "zTo" } for anything ringing the world
"blurb": "public description, shown to readers",
"notes": "the author's working notes — NEVER shipped",
"public": true, // false = not ready to exist publicly
"seed": 1437950893, // written once at creation, never from the id
"levelM": 120, "depthM": 330, "basin": "flooded", "shoreM": 11000
// ...and whatever parameters the kind has: world-generation.md §3
}],
"weather": { // Tower's published plan (D-067)
"cycleDays": 28, // the plan repeats; 0 for never
"events": [{
"id": "deepward-sea-storm", "target": "deepward-sea", "kind": "calm|breeze|gale|storm",
"start": { "day": 20, "hour": 18 }, "durationH": 30,
"wind": { "directionDeg": 60, "speedMS": 30 }, // toward; 0 deepward, 90 spinward
"publishedAt": { "day": 17, "hour": 9 },
"revisions": [{ "at": { "day": 21, "hour": 6 }, "kind": "gale",
"wind": { "directionDeg": 60, "speedMS": 18 }, "reason": "..." }]
}]
}
}
Every kind has the same geometry field, so the map, the list and the editor treat
them one way; what a kind adds is parameters beside it, and a phase of
world-generation.md adds a parameter only when a generator reads it. v1 files, with
places, load as empty — there is no backwards compatibility (D-062).
Two text fields, deliberately separate. blurb is written for readers and
ships; notes is the author's working thinking and never reaches the app. One field
with a flag would have made every note a publication accident waiting to happen.
Ids are permalink targets. Once a place has been linked to, its id should not change even if its name does; a river names what it flows into by id, so renaming an id means rewriting those references too.
Coordinates are canon (θ radians, z metres, §1.7) — never map pixels, so the file survives any change to how the map is drawn.
The public flag is a privacy trap worth naming. Working notes ("embassy here?
check sightline to the cap") are kept out of the app, and a "public": false feature
is left out of it entirely. But content/world.json is committed to a public
repository, notes and unpublished features included — exactly as
content/geography.json was before it — so anything in it is public to anyone who
reads the source. The flag keeps things out of the map, not out of sight. Whether
private notes should live somewhere else — a private repo, or a second one — is the
author's call and is deliberately unresolved.
3.3 Instruments
The measuring tools answer questions the novel actually raised. Only the sightline probe is built; the rest are planned:
- Sightline probe. Pick two points; get surface distance, straight-line distance, optical depth, transmission, and a plain verdict (crisp / hazy / ghost / invisible). This is the tool that answered §1.8, and the single most illustrative thing in the app.
- Viewshed overlay. From a selected point, shade the whole map by transmission. It renders the axis-versus-overhead asymmetry as one picture, which is worth more than the table in §1.8.
- Lighting probe. At a point, illumination across the day cycle at the current brightness setting (§1.3) — for writing a scene at a specific hour.
- Travel. Surface distance and journey time between points at chosen speeds, including whether the route crosses a slat.
- Sky-at-a-time. Star field, beam position and Earth transits for a given point and moment, so a described sky is a correct sky.
3.4 What readers get
The public link is the finished map: embassies, towns, lakes, named regions — the permanent things, behaving like any map application. Plus the exterior view, the interior view from any point, and permalinks so a reader can be handed a place and a moment. Reading the world, not editing it — which, since D-072, is what the author gets too.
4. Phases
- Design — this document and
decisions.md. ← current - Scaffold — Vite/TS/Three, CI to Pages,
canon/implemented and unit-tested. - Exterior — ✅ hull, caps, collector, beam, spin, and hull point picking.
- Map — unrolled surface, slat rendering, picking, sync with exterior.
- Interior — ✅ shell geometry, the haze shader, the beam, eye height, and the five illumination settings. Stars, but only through the far cap window.
- Writer mode — ✅ built ahead of 3–5, at the author's request, because the
world needs developing before there is anything to render. Map view, place
editing for all thirteen kinds, points/polylines/polygons, localStorage
autosave, backup and static exports, import, and the sightline probe.
Removed by D-072: the world is now changed in
content/world.json, and only the sightline probe remains. - Content pipeline and reader mode — ✅ reader and writer modes (D-011, one
mode since D-072);
permalinks (D-010). The terrain pipeline of D-019 —
content/geography.jsonandnpm run terrain— is replaced by live generation (below). - Polish — mobile ✅ (the sidebar is a drawer below 720 px, D-043) and a screenshot tour that photographs all ten views through the UI, D-042. Remaining: transitions, performance.
All five view phases are built. Phase 2's canon/ landed with phase 6, since the
map could not be drawn without it.
Shareable permalinks are implemented (phase 7) — the app has readers, and "stand here and look at this" is the whole reason it exists as a companion piece. Named locations from the novel should be markable on the map for the same reason.
Live world generation — in progress, planned in world-generation.md (D-062). Phase 1 ✅ (D-063): world file v2, the elevation function, the worker pool, tiled ground, the status dialog, keyboard flight, the map drawn from the features. Phase 2 ✅ (D-065): mountain ranges of summits, ridges and eroded valleys, and summit editing. Phase 3 ✅ (D-066): water as surfaces with waves and flow, and waterfalls that lean. Phase 4 ✅ (D-067): Tower's weather plan with revisions, a day on the clock, and ships. Phase 5 ✅ (D-069): the desert's mesas, dunes, washes, salt pans and shorelines. Phase 6 ✅ (D-071): Greatwood as individual trees, its meadows, and the Tall Wood of giants. Phases 7–8 bring settlements and roads — procedural scenery this section used to list as out of scope. Clouds and rain stay undrawn (D-049).
5. Backlog
Things decided to be worth coming back to, not scheduled.
- The pinwheel's motionless star (author, 2026-09-27). §1.4 promises one motionless
star at the centre of the turning sky, and the real sky (D-075) has none there — the
antisolar point walks a degree a day. The placed star in
STAR_GLSLis not canon and stays only until this is revisited: a motionless point, a beacon Tower hangs there, or nothing. - The sun's share of the beam (D-079). The rod now runs on past the sun at 70% of itself, which says the shoal takes only 30% — but the ground is still lit as if the sun took the whole beam. Canon has to settle the split, and the light budget with it.
- The exterior's dress (D-076, D-077, D-081). Rock, Piping, and Rock and piping are experiments, labelled as such in the Hull switch. Pick one or keep the bare skin — and if a heavy one stays, answer for its mass. The combined dress gives the rock a reason (shielding heaped on the plant), but taller and over three fifths of the hull it weighs about what D-076's shell does, so the mass question stands.
- Traffic (D-085). The tour's craft exist only for their legs: nothing flies, sails the sky or runs the railways when the tour is not watching, except the ships. A world with timetables — trains on the lines, airliners between the stations, giants on their slow circuits — would be the honest next step, and would let a reader standing anywhere see them go by.
- The Axial Line's 7% grade (D-086), where it comes down off the plateau into Greatwood, is a rack railway's grade, not an adhesion one. Regrade it round the slope, or say it is a rack section.
- The giant airships (D-087) are a consequence worked out from the thin air near the axis, not canon. Whether Tower's sky has them is the author's call.
- The moon's light (D-088). It is drawn as fed by Tower lifting the banked beam, so the rod is the same either side of it; the sun instead takes its share from the rod and leaves it dimmer past it (D-079). Canon could have the moon do the same, or settle why it does not.
- The sun seen from the ice (D-091). Tower aims none of the sun's light at the fast ice, so by §1.3.1's own rule the sun should look dim from there — a shoal lit toward everyone else. It is drawn as bright as from anywhere. Whether the sun going out over the ice each evening is seen from the ice as a blaze or as a dark disc in lit air is the author's call.
- The farms' light at night (D-095). Lighting the fields after sunset keeps the beam from being fully banked, and the rod's glow with it: about 0.4 W/m² more everywhere at sunset, nothing by six hours after. The app's night light does not include it yet.
- 3D models for the things drawn from plain shapes (author, 2026-09-30). Everything that moves or stands on the land is built in code from boxes, cones and spheres. The author will supply real models; the app needs a way to load them. The list, with sizes as drawn:
- Tour craft (
views/craft.ts, metres, nose along +x, top along +y): paraglider (wing ~10 m), glider (17 m span), light aircraft (11 m span), seaplane, helicopter (11 m rotor), airliner (42 m), airship (120 m), giant airship (420 m), locomotive (22 m), railway carriage (25 m), spacecraft (~80 m). - Instanced, drawn by the hundred or thousand: the sailing ship as hull, mainsail and jib
(~180 of them, 8–45 m; the mainsail swings about the mast, so it must stay a separate
part with the mast at the origin), conifer, broadleaf and giant tree (up to 6,000 each,
views/forest-view.ts), and the flat tree cards for distant woods (up to 75,000 — an image, not a model). - Not candidates: terrain, water, ice, falls, the railway viaducts, the hull dressings, the collector, beam, sun, moon and windows, all of which are shaped by the world.
The plan: glTF binary (.glb) files in a models/ folder, a small manifest naming which
kind each replaces and how it faces, and the built-in shape as the fallback for any kind
without one, so models can arrive one at a time. Imported models go through Tower's own
lighting and haze — otherwise they are lit wrong and never fade into the distance — keeping
each part's colour at first, and image textures once a textured variant of the shader
exists. Budgets: tour craft can be detailed (tens of thousands of triangles); ships a few
thousand; trees a few hundred. Models must be licensed for redistribution, since the app is
published.