furniture
The 2026 Baltic standing in the water: an offshore wind farm, a container ship on the lane, lit channel buoys, low granite skerries and the shore beyond them.
furniture
The 2026 Baltic standing in the water: an offshore wind farm, a container ship on the lane, lit channel buoys, low granite skerries and the shore beyond them.
local Furniture = require("game.sea.furniture")
Furniture.build(NPB) -- stand it all up, once
Furniture.animate(NPB, dt, now) -- one tick of everything that moves
Furniture.stop() -- entities and meshes back down
Why it exists
The play area is 1.4 km across and the sea is otherwise a plane, so whichever way the player puts the bow there has to be something at the end of it: twelve turbines to the north-east, shipping across the north, a granite coast to the west, skerries scattered through the rest, and the rift standing to the south. Steering becomes steering TOWARDS something instead of steering at a horizon.
What it stands up
| Wind farm | 12 turbines on a grid rotated off the compass. Monopile, transition piece with its service platform, tapered tower, nacelle, and a three-blade rotor that turns. Two entities each: tower and rotor. |
| Container ship | 172 m, lofted hull with a hatch coaming, deckhouse, funnel and 117 containers in four colours. Steams the lane at 5.4 m/s and wraps. Seven entities under one root. |
| Channel buoys | Eight lateral marks, red cans and green cones with topmarks and lit lanterns, riding the real waves and leaning with the slope of the water. |
| Skerries | Eleven, from three lathed granite meshes with boulders on their backs, three of them beaconed. |
| Shore | Seven overlapping masses to the west, long enough to read as one low coast. |
Each prop is one merged mesh per material, and each mesh is uploaded once and
shared by every copy: twelve turbines are two meshes, not twenty-four. Every
handle goes into one flat list so teardown is unambiguous — a MeshHandle is
itself a table, so a teardown that walks a mixed table and branches on
type(v) == "table" cannot tell a group of handles from one handle.
Who consumes it
game.sea only. It reads NPB.SEA, NPB.seaHeight, NPB.seaDisplacement,
NPB.transient and NPB.yaw, and owns no game state.
Scoped to this part · feeds back into the world's score.