
Daily Brains · a scope is on you. Read range and height from the view, then pin his window.
Sightline is the map-logic puzzle in Daily Brains (/daily). Every day the whole world gets the same small misty city, built from the puzzle number. You stand on a round paving stone in a park, a plaza or on a street corner, and you see yourself the way the shooter does: through his scope, crosshairs on your chest. There is no range readout. Work out how far away he is, how high he sits and which way he is looking from, then pin his building on the map, set his floor and take the shot. The closer you are, the more you score.
The idea is borrowed from the 'where is the shooter?' map puzzles that do the rounds on social media: a scope view and a street map. Sightline makes one every day, procedurally, and makes it fair: everything you need is in the view, and the generator proves no other window looks the same from where you stand unless it is right next to his.
A 7 × 7 grid of 72 m blocks and 20 m streets on an island in a river: buildings of 2 to 48 floors that rise towards a downtown, a park with a fountain and trees, small paved plazas, parked cars, lamp posts, benches, bins and a few grey figures who are not looking at you. The scope view is a real 3D render (three.js) from the true window, with fog, shadows and a mil reticle; the map is the same city drawn from above, buildings shaded by height.
Sightline loads behind a real progress bar in steps (the city, the scope, the streets, the towers, a shader warm-up, the map), so nothing stalls without telling you. Sun shadows are baked into the street textures once instead of being computed every frame, every shader (including the reveal's) is compiled during loading, the scope only redraws when something changes, and the pixel ratio is capped (1.5 on phones, 1 on low-end devices) with anti-aliasing only on desktops.
Step 1 is the scope, big and in the middle of the screen. The paving stone you stand on is exactly 4 m across, so it is a ruler: drag a box tight around it (drag an edge to fine-tune, drag inside to move it) and the readout above the scope does the sums in plain sight. Range = 4000 ÷ the box's width in mils. A flat circle squashes as you look down on it, so height = squash (height ÷ width) × range, and the floor is height ÷ 3.5 m. Three zooms (6×, 12×, 24×) are a first-focal-plane scope: the reticle and your box scale with the picture, so mils stay true at every zoom. What lies behind you in the picture (lawn or paving, a near wall or open street) says which way he is.
Step 2 is a clean city map: buildings shaded by height with their floor counts where they fit, trees, plazas, the park and you. Tap the building you think he is in and its side view pops up at the foot of the map, floor by floor: tap or drag it to his floor (or use - and +, or the arrow keys), then Take the shot. On a phone the two steps are tabs (Read the scope, Find his window); on a wide screen they sit side by side.
Monday to Thursday the map draws your measured range as a ring round you. Monday to Wednesday it also greys out the buildings too short to hold him at your reading and marks your reading on the side view; Monday and Tuesday shade a sector his bearing falls in (centred near, never exactly on, the truth). From Friday you only have the scale bar. The range band grows and the scope haze thickens towards Sunday.
The generator enumerates every window in the city with a clear line of sight to you. Any whose scope picture matches the shooter's within reading tolerance (ring width within 12%, squash within 0.05, direction within 20 degrees) must lie within 45 m of him, so a careful reading always lands close. scripts/test-sightline.mjs re-enumerates 400 days independently in CI.
Score falls with the 3D distance from your guess to his window: horizontal distance from your pin to his building (nothing if you pinned it) and 3.5 m per floor off. Within one floor on his building is 1000; about 600 at 25 m off, 300 at 57 m, 100 at 107 m. 500 or more keeps the streak. Then the shot: over your shoulder, the bullet flies to your pick in bullet time, glass bursts if you found him, and the camera pulls out to show his real window, the line he had on you and where you aimed, while the score counts up. The share card gives how far off you were, never where he was.
The first time you open the puzzle each day a short skippable intro plays: a glint, the breathing sway of a scope settling on you, then the title. The rules never open by themselves; the How to play button opens a five-page illustrated deck.



| Day | Level | Range band | Map hints |
|---|---|---|---|
| Monday | Easy | 110-210 m | bearing sector (45 degrees each side), rings |
| Tuesday | Steady | 110-240 m | bearing sector (60 degrees each side), rings |
| Wednesday | Medium | 120-270 m | rings |
| Thursday | Tricky | 130-300 m | rings |
| Friday | Hard | 130-320 m | scale bar |
| Saturday | Sharp | 140-330 m | scale bar, more haze |
| Sunday | Fiendish | 150-340 m | scale bar, most haze |
| Event | Reward |
|---|---|
| Close enough (500+) | 15 Tickets (daily_solve) |
| Perfect (1000) | 25 Tickets (daily_perfect) |
| Badge | How |
|---|---|
| Found Him | Score 500 or more |
| Right Building | Pin the shooter's building |
| Rangefinder | Finish within 25 m of his window |
| Plumb Line | Right building, exact floor |
| Dead On | Score 1000 |
| High Ground (secret) | 800+ on a shooter at floor 30 or higher |
| Weekend Marksman | 900+ on a Saturday or Sunday |
| Three Days Watching | 3-day streak |
| Counter-Sniper | 7-day streak |
| Nothing Gets Past You | 30-day streak |