← All work

Games · Godot 4 · Blender · WebAssembly

Emberwake

A 3D action roguelike. Descend through an endless crypt of seeded rooms, fight guardians, gather soulfire and choose blessings — in a browser tab.

How to play

  • Click the game to capture the mouse. Moving it turns the camera and the hero together.
  • W and S move forward and back, A and D step sideways, a left click or J strikes, and Space dashes.
  • E uses a shrine, Esc pauses, and 1–3 choose a blessing. Needs a keyboard, a mouse and WebGL 2; about 40 MB downloads the first time.

What I built

  • Procedural rooms, lighting, combat particles and synthesized sound effects, all generated at runtime from a seed.
  • A third-person chase camera with mouse look and controls relative to the hero; it pulls in when a wall would block the view.
  • Characters animated in code: each model's parts are grouped under joint pivots at spawn, then posed every frame for walk cycles, a streaming cloak, sword slashes, claw lunges and overhead slams. Enemy attacks wind up before they land, so they can be dodged.
  • Low-poly characters and props built by a Python script in Blender, so every asset is reproducible from source.
  • An agent bridge: an AI model can observe and play the game over TCP, which doubles as an automated test harness.
  • A web export pipeline: single-threaded WebAssembly with its start-up script moved out of the page so it runs under a strict Content-Security-Policy.

A bug the web build caught

Testing the browser build showed the start button never responded: an empty overlay layer was invisible but still took every click, on desktop too. The smoke test called the start function directly, so it had missed it. One line fixed it. A second pass caught every character facing backwards: the models face glTF's +Z forward while the code assumed Godot's −Z. The video above is rendered frame by frame with Godot's movie writer, driving the hero through the same agent interface an AI model uses.

Status
Playable prototype
License
MIT
Built with
Godot 4, Blender, GDScript