det startet med lunder
Lovund har en av de største lundekoloniene i Norge, så når fjellet var på plass føltes det feil å ikke ha en lunde et sted i nærheten. Tegnet en liten pikselillustrert lunde, ga den en langsom flybane over headeren, og lastet siden på nytt rundt tretti ganger bare for å se den fly.
Så tenkte jeg, vel, én fugl ser litt ensom ut.
og så stoppet det ikke
La til en måke. Så en måke til som flyr annerledes. Så ble jeg litt revet med: en tjeld som spaserer langs det som stort sett er strandlinjen, en terne som gjør raske, hakkete bevegelser i stedet for den langsomme glidingen måkene får, en skarv som ligger lavt over vannet, og én havørn som er større og sjeldnere, dukker opp mye sjeldnere enn resten.
Hver art fikk sin egen størrelse, hastighet og hvor ofte den faktisk dukker opp. Havørnen spesielt satte jeg til å være ganske uvanlig, føltes riktig for en så stor fugl.

taket, fordi det ble litt for mye
På et tidspunkt hadde jeg satt den til å spawne fugler ganske fritt, og en omlasting av siden ga meg noe sånt som femten fugler som kjempet om luftrommet over én liten header. Så mer ut som en Hitchcock-film enn en kystblogg. Satte et lite tak, bakt rett inn i selve tegningen:
const guaranteed = CANDIDATES.find((c) => c.guaranteed)!;
const rest = CANDIDATES.filter((c) => !c.guaranteed);
const shuffled = [...rest].sort(() => rand() - 0.5);
const extraCount = 2 + Math.floor(rand() * 3); // 2-4
const chosen = [guaranteed, ...shuffled.slice(0, extraCount)];fisk, og en sammenblanding som var min egen feil
La til fisk under vannlinjen også, små pikselformer som svømmer fram og tilbake under der fuglene flyr. Tidlig hadde jeg en bug der en av "fuglene" faktisk ble rendret under vannlinje-laget, og jeg brukte gode ti minutter på å være forvirret over hvorfor en fugl stadig så ut som den svømte. Viste seg at jeg aldri hadde festet hvert lag til sitt eget bånd:
// first pass: one shared list, whatever top value felt right per sprite
const sprites = [...birds, ...fish].map((s) => ({ ...s, top: s.top }));Ingenting hindret en fugls top-verdi fra å havne under vannlinjen ved et uhell siden de bare var tall i samme haug. Fikset det ved å feste hvert lag til sitt eget bånd i stedet for å stole på hva enn jeg hadde skrevet inn:
// row 3's top edge, 60% down the strip's own height, is literally
// "the waterline" in this layer's own geometry. Humans stand in the
// land band (top 0-60%); fish swim in the sea band (top 60-100%).
//
// Caps: fish <= 3 (here: 3), humans <= 2 (here: 2 -- one standing, one
// running).Fikset nå, fugler flyr, fisk svømmer, de holder seg i sine egne baner.
Snek også inn én bitte liten pikselløper som jogger langs stranden. Halvveis en spøk, halvveis bare meg selv som setter meg inn i scenen, siden løping er noe jeg faktisk driver med her på øya.
Hver omlasting blander hvilke fugler som vises, hvor mange fisk, hvor løperen er. Liten ting, men den gjør headeren levende i stedet for statisk, som var hele poenget.