Levels, characters, quests, combat and the HUD in one native editor — and a coding agent that builds the world with you. Written in Rust on Bevy, scripted in Lua, and yours.
Describe a change in plain words. Claude Code, Codex or Gemini CLI edits the level, the editor validates it, and ⌘Z undoes it.
Bevy's 3D renderer behind an orthographic iso camera. Physically based lights, real shadows, flickering torches.
Main and Side quests whose objectives are facts about the world — defeat every enemy, reach the cave, the gate is open.
Factions, weapons and skills, enemy factories, experience, and a passive skill tree in the style of Path of Exile.
Small Lua 5.4 scripts hook into triggers, hits, loot and AI responses, reading and writing the world through one path syntax.
Life and mana bars, action bar, bag, quest tracker and minimap — pinned to the screen's edges and dragged into place.
The editor never calls a model itself. It writes the level and an asset catalogue into the project, starts the coding agent you picked, and streams its progress back. A bundled skill teaches the agent the world format, the Lua API and the quest model, so it uses only your assets, places things near the centre of your view, and never renumbers what is already there.
▸ reading .proscenium/agent/assets.json
▸ reading .proscenium/agent/world.json
▸ placing 4 × UAL2_Standard near cell (3,-2)
▸ labels: enemy · attackable · weapon: Bow
✓ Added four archers around the shrine.
Hooks for triggers, hits, loot and responses. Paths like world.entity[12].life autocomplete as you type.
local enraged = false
function on_hit(hit)
if not enraged and hit.life.value <= hit.life.max // 2 then
enraged = true
self_play_clip("Roar", false)
end
if hit.life.value <= 0 then
self_set_attackable(false)
world.vars.gate_open = true
emit("boss_defeated")
end
end
A level is plain JSON, and its quests live in it — readable by you, writable by the agent.
"quest_book": {
"quests": [{
"id": 1,
"title": "Kill all enemies",
"kind": "Main",
"xp": 250,
"objectives": [{
"goal": {
"kind": "Defeat",
"target": { "Label": "enemy" }
}
}]
}]
}
Native 3D with PBR lights and shadows.
src/camera.rs
src/ground_splat.wgsl
src/model_view.rs
One native macOS window, panels docked.
src/overlay_builder.rs
src/passive_tree.rs
src/audio_mixer.rs
Embedded through mlua, one state per object.
src/scripting.rs
src/quests.rs
src/agent.rs
Proscenium is a work in progress. Subscribe for occasional notes on what's landed, or get in touch with questions, ideas or a game you'd like to build with it.