# Meridian in Action: Play It in Your Browser, Four AI Players, a Map You Draw by Looking, and What's Coming Next

> Source: <https://blakelapierre.substack.com/p/meridian-in-action-play-it-in-your>
> Published: 2026-11-01 02:52:25+00:00

*Previously: [Bonus: I’m Building a Peer-to-Peer Game Planet in the Browser With Grok’s Build Mode](https://blakelapierre.substack.com/p/bonus-im-building-a-peer-to-peer)*

Last post was about what Meridian is. This one shows it running, and a lot has changed since. The biggest change: you don’t need to install anything anymore. There’s a demo on GitHub Pages that runs on a desktop or a phone, and it plays solo if nobody else is around.

My agents read the design notes and the new commits, ran the test suite, and played the main split screen on a computer with no graphics card. Nothing here is a mockup. Every caption describes what was on screen or in the game’s own status line.

## New since last post

- **A playable demo.** The whole game now loads from any web address, so it runs straight from GitHub Pages. On the public page the debug panels are hidden.
- **A first-minute tour.** A new player spawns a few steps from a yellow marker, facing it, with an arrow and a distance to the goal. The tour has four steps: walk to the marker, shoot the red dummy, dig the sand at your feet, then walk to the gate and press E to join the strike. Enter or a Skip button ends it.`?tour=1` replays it.
- **Touch controls.** On a phone or tablet, the left side is a movement stick, dragging on the right side looks around, and a Fire button stands in for the mouse. More buttons cover the rest of the keymap. Desktop controls don’t change.
- **Solo by default, multiplayer when there’s a lighthouse.** The “lighthouse” only introduces browsers to each other; game traffic still goes peer to peer. The temporary public lighthouse has been switched off, so the demo now plays solo and says “multiplayer server offline · playing solo.”`?lighthouse=wss://…` points it at a lighthouse you run, and`?lighthouse=off` forces solo.
- **A sharper picture.** The walk view is drawn by a WebGL2 ray pass on the graphics card. If WebGL2 isn’t available, it falls back to the software (CPU) renderer. Today’s “renderer polish” pass added filmic tone mapping with exposure that follows the sun (so dusk and night stay readable), an upscale that keeps edges crisp without smearing sky across a ridge, mipmapped textures, and a cap on how long a still picture spends refining. Close hits are now traced at full picture resolution and distant ones at a quarter of that.
- **It stays smooth when things move.** The picture holds at least 12 frames per second while something in view is moving.
- **The eyes matter.** The renderer now gathers its sharpest rays where your character is looking, scaled by two new skills: eyesight, trained by looking, and focus, trained by holding your eyes on something.
- **A map that lines up.** The chart used to paint a flat guess ahead of your feet, so hills and the chase camera put the color off your path. It now paints exactly where the view meets the ground, from the body’s eyes instead of the camera.
- **The map reveals as far as you can see.** As of today, how far the minimap reveals comes from your character’s sight sense (eyesight, capped by range). While it follows you, the minimap zooms itself to fit that radius. The scroll wheel scales the fit, and if you drag the map, it keeps your pan until you press its follow button.
- **An agility skill.** Sprinting and jumping now train agility, which raises sprint speed, jump height and keyboard turning. The caps are 1.5x, 1.4x and 1.5x, reached only at the top skill level.
- **A quieter debug panel.** The network panel is hidden on desktop by default. Press I to show it, or add`?debug=1` .
- **Rules that were only on paper.** One commit landed a batch of design-note rules in the sim, from a landing counter and a reload beat to a recovery phrase and wind on a moving body, with a new test file for them.
- **Tests.** I ran the suite on the current main branch: 241 tests, 236 pass, 0 fail, and 5 skip (the two-browser tests need headless Chromium).

## The split screen

On my own machine, the main link still opens a bench: my client in a big green frame, four AI clients in a grid on the right, and a violet “Follow” view that rides right behind me. All six are ordinary browser clients talking to each other over WebRTC. The status line said “with 5 players,” and a separate keeper page showed “ice connected” links to me and all four AI players.

*The bench after a short walk, recorded on an earlier build (before the renderer polish and the map fix): my view on the left (sand ahead, a strip of painted ground on the small map), the four AI charts top right, and the follower view bottom right.*

A note on speed: the machine I recorded on has no graphics card, so these numbers are far below what a normal computer gets. The design notes say the picture aims at the display’s refresh rate and steps its internal size up and down, and that extra views stay near one picture a second until the main view has time to spare. When I recorded, standing still drew full size (691×502) at 2 to 3 frames per second, walking dropped the internal picture to about 136×96 at about 40, and the follower read “1fps.” Those numbers are from before the newer pacing changes (the 12 fps floor while things move and the cap on still refinement), so treat them as the old build. The video is scaled up 2x so the pixels stay sharp.

## 1. The map is something you make by looking

The design idea: the map isn’t handed to you. It’s a picture that remembers what you’ve actually seen. Looking paints the ground in its real colors (sand, grass, rock, pits), low ground is darker, and a “mapping” skill grows as you survey. M switches between the small chart, the full chart and none, and the scroll wheel zooms.

In play, the chart started almost empty: a small green patch where I stood. As I walked, a tan strip of sand painted itself along my path. My mapping skill climbed in the status line, from 12 when I arrived to 54 a couple of minutes later.

Since then, the agent fixed the part that bugged me: the color now lands where you’re actually looking, not on a flat guess ahead of your feet. There’s also a new way to wipe your browser’s saved progress and start fresh.

*About 20 seconds of walking north from the start, on an earlier build. The small chart in my frame paints a sand-colored strip behind me as I go.*

*About 24 seconds with the full chart open (M), then zoomed with the scroll wheel, on an earlier build. Only the strip I walked is drawn. The rest of the island stays dark until someone looks at it.*

*The zoomed full chart, from the same earlier build: the sand path I walked, with green at its far end, and nothing beyond it.*

## 2. Four AI players with jobs

The design idea: an AI player isn’t a special server bot. It’s the same client a person uses, driven only through the same keys a person presses. Each has a written agenda in the code:

- **Surveyor:** “Name the beach. Do not dig or shoot.”
- **Miner:** “Open pits in the sand. Leave the dummy alone.”
- **Builder:** “Raise a wall, salvage it, and raise another.”
- **Marksman:** “Drill the dummy from the pad. Do not dig.”

In play, the surveyor was the clear winner. It walked a square loop, and its chart (top left) filled in with that loop shape. Its tracking skill rose from 5 to 24 while I watched. The builder’s building and bracing skills went from 1 to 3. The others mostly stood at their posts. The miner’s status read “spoil 4/4,” and the marksman’s dummy stayed at 100 the whole run, so I didn’t see a pit or a hit happen on camera. The pink squares on each chart are the other players.

*About 26 seconds of the four AI clients, cropped and scaled up: surveyor top left, miner top* 

*right, builder bottom left, marksman bottom right. The surveyor’s chart shows the patch it has* 

*walked; the others show small marks around where they stand.*

*stand.*

*The four AI charts late in the run. The surveyor’s (top left) has the biggest painted area, a ring* 

*around its loop.*

## 3. A follower riding behind you

The design idea: other clients are bodies in the world, and you can cycle through people with Tab. The bench adds a fifth client, “c,” told to follow me.

In play, the follower’s status line said “following a” (I’m “a”). Its view tracked mine from behind, and its chart showed the same sand strip I’d walked, even though its own status said “skills 0.” The design notes describe nearby players trading ground knowledge, with friends getting more, so a shared strip fits that. I didn’t test the trade directly.

*About 26 seconds of the follower view, cropped and scaled up, while I walked. Its chart turns* 

*as I turn and shows the strip I painted.*

*The follower view after I turned and walked: the “following a” client’s chart shows my* 

*diagonal sand path.*

## 4. The wall goes on the gray rock

Blake spotted the rule before I did: walls only go up on “that little gray rock thing.” In the code it’s the yard’s footing, a stone slab from the ruin, 10 m north of where you spawn. The design notes say a wall costs 6 metal and has to touch that support, or it collapses. The repo’s own check page says the same: hammer out, walk north to the stone slab, hold the button with the ground beside it in reach.

The builder AI already works right there. Its agenda is “Raise a wall, salvage it, and raise another,” and that’s exactly what it did, over and over: its line counted “work” up to about 11 seconds, flipped to “wall” with walls 1 and metal 14, then about a second later it salvaged and read walls 0, metal 20 again.

The wall also replicated. While I stood beside the slab, my own status line read “walls 1” at the same moment the builder finished, so its wall showed up on my client too.

Then I tried it myself. Standing south of the slab facing north, the hammer only ever said “far.” Standing just west of it, facing east and tilting down until the aim read “ground,” it worked: my line went to “wall” and walls 1. But my count dropped back to 0 within a few seconds (the builder salvages any wall in the yard), and my metal read 20 the whole time, so I can’t confirm the 6 metal came off my side.

*About 22 seconds of the bench while I stand beside the slab. The builder (grid, bottom left)* 

*finishes its wall, and my status line reads “walls 1.”*

*The moment the builder’s wall lands: my status line on the left reads “walls 1.”*

## What didn’t work (yet)

- **No official dig on camera.** The keeper page reported “no block yet,” so no dig became official while I recorded.
- **Tab didn’t name anyone.** Tab cycled targets, but the status line only said “You cannot tell what that is.” Escape now clears a target, which is new.
- **My own wall didn’t stay up** long enough to film, because the builder salvages walls in the yard.
- **The footage is from older builds.** Everything above was recorded before the renderer and map changes and before the sound, path and phone batches, so the demo looks and sounds different from these clips.
- **The docs lag the code.** The engine doc still says “no WebGL,” but the build draws with WebGL2 and keeps the software renderer as the fallback.
- **Multiplayer needs a lighthouse.** With the public lighthouse off, the demo plays solo. Meeting other players means running one yourself, and the full split-screen bench with AI players still means running`npm start` .

## Shipped while I was writing

When I started this post, two pull requests were open. Both merged the same afternoon, and five more batches followed. As of tonight there are no open pull requests. Everything below is on the main branch, but none of it is in the clips above.

- **Sound** (batch 2 and 3). Other players’ shots, digs and steps are heard by distance and side, through the character’s hearing sense. An ambient soundscape is placed in the world: surf, gusts, birds and gulls, night insects, grass, distant AI players. Hearing skills by category get better at noticing and placing sounds, with on-screen cues scaled by those skills. The sea gets quieter at night.
- **Senses and skills** (batch 2 and 3). The minimap draws a ring at the edge of your sight. New perception skills include awareness, skills have tooltips, a notice pops up when you unlock an ability, and L opens an abilities log.
- **Smoother sharp-where-you-look rays** (batch 4). The old version stepped through a few blur bands, which showed as rings. It now uses a continuous blur per pixel, so the falloff is smooth.
- **Trampled paths and finer digging** (batch 4). Grass wears to dirt and then to a packed path where players and AI walk, and it slowly grows back. Terrain cells are half the size (25 cm), and old saves migrate.
- **Leaner networking** (batch 5 and 6). A new wire format sends poses only when they change. The PR’s own capture of 3 browsers plus an archive measured 79% fewer bytes in total. A third version adds interest tiers and dead reckoning: in the agent’s 25-client simulation with 1% loss, upload per client went from 1,607 to 408 bytes a second. Older peers still work.
- **A phone fix** (batch 7). On Android Chrome the demo could show a blank screen while reporting 60 fps. The cause was a canvas background color covering the WebGL layer, and it’s fixed. If WebGL fails, a red banner now says why and the CPU picture takes over.
- **Phone camera and page controls** (batch 7). One finger looks, pinch zooms, two fingers orbit, and a V View button toggles first and third person. There’s a fullscreen button and a Reset button that wipes everything saved on the device and starts a new session.
- **A scaling bench** (batch 7). A test page grows from 2 to 50 clients, one per passed level, each driven by a wander bot through the real keys, and stops at the first failure.

## What’s coming next

- **Scale with real peers.** The bench has only been run to 4 clients, checking movement only, because the agent’s browser blocks WebRTC. The full peer-to-peer run up to 50 needs a real machine and a lighthouse.
- **A real phone.** The blank-screen fix was checked in Pixel 7 emulation, not on a device.
- **A public lighthouse.** The game needs one running at a stable wss:// address before demo players can meet again.
- **Cheaper signing.** Batching and signing many moves at once would change the signed bytes, so the notes say it needs a new frame kind (v3).

The theme of the day was senses: sight drove the picture and the map, and now hearing is in too.

The code is public under the MIT license: [github.com/blakelapierre/meridian](https://github.com/blakelapierre/meridian).

— Blake (written through my AI agents)

*Previously: [Bonus: I’m Building a Peer-to-Peer Game Planet in the Browser With Grok’s Build Mode](https://blakelapierre.substack.com/p/bonus-im-building-a-peer-to-peer)*

*New: (filled in after publishing)*
