Shard
One torch-lit room, a corridor and a shrine, walked — and fought through — from a camera pulled in closer than the genre usually allows. It is the first slice of an action-RPG, and it is here to be the load on the render paths a browser is stuck with — every light, every shadow and every bounce you can see is going through a fallback.
controls
Walk it. Fight what is in it. Then put the torches out.
- Walk, relative to where the camera is looking W A S D
- Swing the camera a quarter turn Q E
- Strike everything in reach that is not behind stone Space
- Douse the torches — and light them again L
- Pause and resume Esc
- Fullscreen F11
- Debug overlay F3
- Debug console `
- Pause, fullscreen and the debug overlay keys — unless a control for them is listed above
- Debug console, and its on-screen keyboard the CONSOLE button, once you have touched the canvas
atan(1/√2) tilt the genre is named for — and gives up the
distance. You cannot pitch it or push it out; the only thing you control is
which of four bearings it looks from.
what is actually running
The fallback paths, carrying real content.
Open the panel and it names the three paths this browser selected. It will
say IndirectPerBatch, ArrayPages and
Rasterised, because a browser has no mesh stage, no bindless
and no ray query — and that is the entire reason this zone was built. The
engine's own fixtures already prove those paths draw something
correctly. What they had never carried is a scene where being wrong is
obvious: a dark interior, where a shadow in the wrong place or an ambient
term that has forgotten the walls is the first thing you notice.
The torches are point lights that flicker, and they flicker on the simulation's clock rather than the frame's — two sine waves at incommensurable periods, per-torch phase, so the room breathes and never repeats and a slow frame does not change the light. The shrine carries a spot whose cone falls across the corridor's doorposts. There are more lights in the zone than there are shadow slots, so the renderer ranks them by how much of your screen they are worth and shadows the ones that win — walk toward a brazier and watch which one takes over.
Nothing here is flat-lit. The ambient term is a baked irradiance volume: a grid of probes, each one gathered by casting rays into the same colliders your capsule sweeps against, so a torch behind a pillar genuinely does not reach the probe on the far side of it. Screen-space occlusion darkens the creases, and screen-space reflections have a floor smooth enough to show them. The floor is the reason it is smoother than the walls.
The zone itself is one ASCII table in the source. Every floor slab, wall block, pillar, dais, brazier and doorway is read off the same grid the colliders are, which is why what looks solid is solid. That modularity is not tidiness — it is the shape a streamed world has to be, and this is that kit at its first size.
You are a capsule on the same character controller puppet and breach use, and this is the third camera rig driving it: puppet orbits behind the shoulder, breach sits inside the head, and this one hangs at a fixed elevation and snaps between bearings. The controller gained nothing for any of the three — it takes a world-space displacement and returns what the room left of it, and it has never been told where a camera is.
There are three things in here, and they are not the same thing. A husk runs at you and jabs. An adept keeps its distance and throws — walk at it and it walks backwards, so you have to corner it. A warden is slow, takes five blows, and stands perfectly still for a moment before it slams: that stillness is the tell, and stepping out of reach while it is winding up is a slam that lands on nothing. Each of them holds its post until it can actually see you — the sighting is one ray through the same colliders your capsule sweeps, so a doorpost between you is a foe that has not noticed you yet. Your own blow is the same question at arm's length: it answers everything in reach that is not behind stone.
Close the tab and come back. Where you were standing, what you had left, how many times you were put down and which of the three you felled are written into your browser's own private file system about once a second, through the same save container a native build writes to the platform data directory. Reopen this page and you resume; the debug panel (F3) says whether this session did.
This is four verbs of six. The loop this sample is planned around is explore, fight, loot, level, save, resume. Explore, fight, save and resume are here: no item, no rarity, no experience, no inventory, and no streaming past this one zone. The plan for the rest is in the repository.
console.log, so log lines are queued
inside wasm and drained by the page each frame. crcbl.audio(),
crcbl.saves() and crcbl.logLevel(4) are there too.