← appaday

The whole world, on a table

A few weeks ago an agent built me an open world at NES resolution in a morning. The obvious next question was a stupid one, so I asked it:

take ../botw-8bit and copy it over. then translate the entire thing into a webVR experience and deploy it to my webspace. sprite based graphics etc may stay the same…

The answer was not to put you inside the game. Press Enter VR on a Quest and the world appears on a table in front of you, the size of a board game, with the little green hero walking around on it. The sprites stay sprites. You lean in to look.

An 8-bit scene on a pale floating island of white stone tiles under a bright blue sky: a small green-capped hero beside a signpost, a patch of grass with red and pink flowers, a treasure chest, grey stone blocks at the edges, and far below at the left edge a hazy green landscape. The HUD shows three hearts, a hand item, four empty orb slots and the objective: glide to the steps, steam vents lift you
The first island, sixteen tiles up. The green haze at the edge is the surface, a long way down.

What had to change, and what did not

The rule for the port was that the desktop game must not change at all — and it is checked rather than promised: the flat version is compared against the original and has to come out byte-identical. Everything VR is built lazily the first time you press the button, so nobody on a laptop pays for it.

What does change is everything that was a 2D trick. The HUD becomes strips on a plane at the hero's depth, so it stays readable without sitting in your face. Night, weather and the quest markers were all flat overlays and had to be rebuilt as real 3D effects. The stick axes are fixed to the room, not to your head, so pushing forward always means away from you across the table. Game logic stays at sixty steps a second and the picture is interpolated between them, because a headset draws faster than a NES.

It was tested in a Quest emulator, sixteen steps, before it ever saw a real headset. The commit message is honest about that, and ends on the line I was hoping for: the headset run then felt right.

Then it grew upwards, and downwards

Once the world is a diorama, the thing you want is height. So the map went from one plane to three: an archipelago of nine islands in the sky, the surface as it was, and the depths underneath.

An 8-bit shrine on a floating island of white tiles against blue sky: four grey stone pillars around a flowered courtyard with a treasure chest, the green-capped hero in front of it, a signpost behind, and the objective bar reading open the chest of the sky shrine
The sky shrine, the highest island. You get up here by being thrown by a tower.

You reach the sky by waking a tower and letting it launch you, and you cross it by gliding between steam vents. You reach the depths by stepping into one of four chasms. Down there it is the surface's inverse — moonlit rather than black, with lightroots that reveal the map when you wake them and open wells back up to daylight.

A dark blue 8-bit cavern of stone tiles lit only in a small pool around the green-capped hero, with a faint boulder nearby, a status reading STILL and DEPTHS, and the objective: lightroots 0 of 4, a light sleeps right here
The depths. A light sleeps right here.

Two decisions in the design notes are mine and I would make them again. There is no building system — no gluing things together — because that is crazy complex and I feel like it doesn't add THAT much. And the depths had to be a bit lighter than the game they borrow from: dark, readable in eight bits, never pitch black, nothing that grabs you.

The notes also say plainly why any of this exists. Islands that float overhead as real geometry, with dark undersides, are not much on a monitor. On a table in front of you they are the whole point.

Fifteen bookmarks

A game this long cannot be tested by playing it from the start every time, least of all with a headset on. So I asked for sensible savegames placed throughout the game, and there are now fifteen of them in play order — tower awake, glider in hand, on the first isle, depths landing, ready for the Blight. Each one is also a web address, so a spot in the game can be bookmarked in the headset's browser.

layers
three: sky, surface, depths
sky
nine islands, sixteen tiles up
ways down
four chasms, and wells back up
save slots
fifteen, each one a link
headset
Quest 3, in its browser — nothing to install

How it was made

Not in one sitting, and not by one agent. Each stage began with a written specification — decisions in a table, each with the reason and what was weighed against it — and then four implementers built their packages in parallel while a fifth integrated and tested. One night a second, unrelated world was added to the engine at three in the morning and removed again by four in the afternoon. That happens.

Still rough

The pictures here are the flat mode of the same build; the tabletop only exists inside the headset, and I have no way to photograph that yet. The far landscape, map pins and fast travel are still being built, and an overnight run that was meant to finish them stopped halfway while I slept. It needs a keyboard or a Quest — still no touch controls.