Gannet Head Light is being switched off at the end of the season, and a radio beacon will replace it. You have twelve nights left.
Out on Merrow Bay, trawlers, coal steamers, and the passenger ferry steer by your light. Keep a ship in the beam and its captain sails on with confidence. Leave it in the dark and the captain loses the way, drifting toward rocks nobody can see. There’s one beam and many ships, so every night is a quiet juggling act. The sea looks calm, but every decision is tense.
Point the light
That’s the entire interface. The lens is a heavy mass on a damped spring: it builds up speed, overshoots slightly, and settles. Hold to focus for a narrow, long, bright beam that reaches the far lanes and pierces fog, at the cost of a slower, smaller sweep. A foghorn on a cooldown sends a shockwave across the water that steadies every ship in earshot.
Each ship has a confidence ring that refills in your beam and drains in the dark. At zero the captain is Lost. Reefs are hidden, and the captains’ routes run straight over them. Sweep the water ahead of a ship and the surf breaks white over each reef you reveal, and the captain steers around it. Charts fade about 22 seconds after the light leaves them, so you time your sweeps to stay just ahead of each ship.


One new idea per night
Night by night the season adds hidden reefs, buoys that hold a channel while you tend to other ships, collier steamers that turn wide and run aground on sandbanks trawlers can cross, fog, damaged vessels with no lights that you find by radio bearing and distress flares, and storms that push ships off course but light the whole bay with every lightning strike.
Then come the wreckers. The Corleys sweep lanterns from the cliffs that imitate your light, luring ships toward the rocks. Hold your beam on a lantern to douse it, or light the ship to break the spell. On night 11, one false light copies your every sweep.




Nights take two to five minutes and are rated with up to three lamps. Ianto the harbourmaster, Maren on the Little Auk, Captain Pryce on the SS Calloway, and Dot on the ferry Evening Star grumble, joke, panic, and thank you over the radio. Finish the season and an endless, procedurally generated Night Watch opens.
More screenshots



What it’s built with
All gameplay lives in a pure C# SimWorld, stepped at a fixed 60 Hz with a seeded random number generator. Unity 6 and URP only read it and interpolate. The same code runs in the game, in the EditMode tests, and under the AutoKeeper bot, which plays through the same input structure as a player, so the lens’s speed limits apply to it too.
The identity of the game is the light, so the most interesting code is in the shaders. The beam test, with cone falloff, range, shadows cast by sea stacks, and fog extinction, is written once in C# and mirrored in HLSL. The glow you see on the water is the same function the ships respond to. A full-screen raymarch computes single scattering from the beam analytically, along with moonlit haze and drifting fog banks; the fog quality setting is simply the step count. The water uses Gerstner waves, a moon glitter path, and a foam texture that the simulation writes for charted reefs and wakes.
A single JSON file, merrow_bay.json, describes the coast. It drives both the simulation and the Blender generators for the cliffs, rocks, and buoys, so geometry and gameplay can’t drift apart.
How it was made
Last Light was one of eight games built in parallel from short designer briefs, each by its own AI coding session on a shared machine. The brief: keep a lighthouse working by moving its beam through a sea full of hidden routes, with one coastal map, three vessel types, and twelve missions. Its trailer moment: a captain thanks you for the light, and then your lighthouse is switched off. The brief also told the session to invest in shaders and lighting early, since the beam, the fog, and the night sea are the game’s identity. The repository’s commit history spans about ten hours on October 4, 2026.
Every model was built by script in Blender, and every sound, radio voice, and note of music was synthesized in Python with NumPy and SciPy. Radio voices use formant synthesis, pitched and timed per character and band-passed like a wireless. The score includes a waltz, a night bed with a tension layer that rises as ships get lost, and a music-box ending.
Balance comes from bots. The AutoKeeper wins all twelve nights in the pure simulation, and a deliberately sloppy “novice keeper”, slow to react, shaky, and unaware of the reefs, gives a rough difficulty curve. For the trailer, a headless twin of each scripted night runs first to find the frame where the moment happens; the real night is then fast-forwarded off camera and recorded at a fixed 30 fps, and a Python script cuts the clips to the bars of the title waltz.
Play it
Version 0.1.0 includes all twelve nights, the ending, and the Night Watch. Download it from GitHub releases. It supports mouse, keyboard, and gamepad, though the gamepad has only been tested with a simulated device and balance hasn’t been tuned with human players yet.
Browse the source on GitHub. GitHub records the repository’s creation on October 4, 2026.