← appaday

A toy-diorama Zelda maker, in one evening

The whole brief was one message: take any rpg engine (solarus would probably be good since its live action) that is open source or multiple ones and try to one-up them. the whole thing in the topdown 3D style of the switch zelda titles like links awakening or echoes of wisdom. What came back that evening is called Diorama, and it is a game maker that runs in a browser tab.

A top-down 3D game scene in a soft toy look: a small hero in a green cap stands in a flowery meadow on a raised grass plateau with brown cliff edges, round trees, a stone staircase, a golden treasure chest, a blue and a green slime, and a red blob on the sand below. Three hearts in the corner
The demo game, Willowby. There is no texture on that grass: the whole look is one shader, a height grid and a lens.

The look is a lens, not a model

The Switch remake of Link's Awakening looks like a toy set on a table, and very little of that is the models. It is a narrow lens a long way off, depth of field melting the top and bottom of the frame, soft vinyl shading and ink lines. So that is what Diorama builds, and every one of those is a dial with a slider in the maker.

The maps themselves stay flat data. A level is a 2D grid of heights and ground types — stored as rows of letters, so two versions of a map diff like text — and the engine turns a one-step drop into a ledge the hero hops down and a two-step drop into a cliff with a grass lip and baked shadow in the corners. Tiles, planks, cobbles and bricks are drawn by the shader in world space, which is why none of it needs a texture.

A dark dungeon room seen from above: stone brick walls, a checked floor lit in warm banded pools from wall torches, a push block, and a small pool of water
The cave. Torch light is banded like the shade on everything else, and the camera locks to the room the way dungeons do.

Where it beats the engines it was told to beat

Solarus has the best built-in Zelda rules of any free engine, and no way to put a game on the web or to test a change without relaunching. GB Studio proved how much instant sharing matters and has no melee combat. So the list of things to one-up was not hard to write:

The Diorama maker: a dungeon map in the centre with a floor switch selected and a dashed yellow arc curving from it to a door, a list of the room's objects on the left, and an inspector on the right with the switch's position, facing and a checklist of what it opens
This switch opens that door — and the maker draws the arc, so a broken wire is something you see, not something you discover by playing.

The solver earned its keep before the evening was out: it caught a push block that could be spent where the level still needed it, and a key with no door to open.

It plays my old Solarus quests

The part I did not ask for and like most. Two weeks ago I made three openings in Solarus, a 2D engine. Diorama imports Solarus quests: every tile's ground type becomes a height, the entities map across, dialogs come along, and each map's original pixel art is laid onto the tops of the 3D terrain.

A hero in a green cap standing on a pixel-art dirt crossroads between two chunky 3D buildings with pixel-art roofs and doors, a grey-haired villager and a red-clothed villager nearby: a 2D pixel-art map extruded into a 3D diorama
Emberwatch, one of my own Solarus maps, standing up in 3D. All 793 walkable cells match the original and none were lost.

The official Solarus sample quest imports too, all thirteen maps, with camera rooms taken from its separators. Lua is not run — the importer lists what it skipped — so doors that Solarus opens from a script simply stand open, and the checker still finds one soft-lock and four unreachable things in it.

The maker showing Zoria Forest from the Solarus sample quest: a pixel-art forest map with a river, a red-roofed house, a blue-roofed house, bridges and cliffs, extruded into 3D, with the map inspector open on the right showing size 40 by 45, the Toy diorama look, camera locked to rooms and overworld music
Zoria Forest from the Solarus sample quest, open in the maker with the Toy diorama look.

Tested without a person

code
9,490 lines of JavaScript, three.js
tests
18 unit tests plus the solver over every project
bot
finished the demo in 8 steps, keys only
build
3.4 s; 800 KB of JS, 218 KB gzipped
frame rate
60 fps on an integrated Iris GPU at 720p
models
1,153 imported, from 12 CC0 packs

The bot is the detail I trust most. It plays the demo only through the same simulated key presses a person would make, because scripted walks sail straight through the triggers a real player would hit — which is exactly the lesson the Solarus project had already taught the hard way.

Along the way the shared asset library it draws from grew to forty CC0 3D packs — 3,366 models — and twenty audio packs, each licence read off its source page rather than assumed. Every map gets music for its role, and anything without a recording falls back to a synthesised version, so nothing is ever silent.

Still rough

No bombs, bow, boomerang or swimming yet. Imported cliffs come out as low ridges, and side-view maps do not read in 3D at all. The touch controls exist but have never met a real phone. And it is not online yet: the imported Solarus art is CC BY-SA, which travels with the pages the moment they are public, so that is a decision before a deploy, not after.

For one evening and one message, though, that is a lot of engine.