Skip to content

Repository files navigation

Moonveil — The Last Lantern

Play Moonveil →

A free, procedural 2.5D boss fight written in Geno. A cloaked knight faces a glass-winged guardian in a floating, moonlit sanctum.

Moonveil's moonlit arena and winged guardian

The game runs in a desktop browser with a keyboard. No download, account, or installation is required to play.

Is it really written in Geno?

Yes. Gameplay, physics, collisions, boss AI, procedural artwork, animation, particles, menus, and the HUD are in Main.geno, World.geno, and Paint.geno.

Geno compiles these files to JavaScript, which runs in the browser using Geno's Canvas runtime. Python is used for the compiler, the small packaging helper, and the test harness. There is no third-party game engine or external artwork.

Controls

Action Keys
Start Enter or click the game
Move A / D or left / right arrows
Double jump Space, W, or up arrow; release between jumps
Sword J or Z; hold to repeat swings
Dash / evade Shift, K, or X; release before another dash
Pause / resume Escape or P; Enter also resumes
Restart after pausing, defeat, or victory R

The Glass Warden cycles through a marked dive, a needle volley, and rising spires. Strike during its lowered recovery posture for triple damage. Below half health, it enters a faster second phase. The knight has five health points and a dash that grants brief invulnerability.

Build locally

Use Python 3.10–3.13; the automated build uses Python 3.11. Node.js 22 is needed for the tests, not for compiling or playing the game.

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements-dev.txt
python3 build.py

Open dist/index.html in a browser, or serve it locally:

python3 -m http.server 8765 --bind 127.0.0.1 --directory dist

Then open localhost:8765.

The compiler is pinned to a specific public Geno commit in requirements.txt. The generated HTML contains the game and runtime, so it can also be played offline. The other generated files provide the website's favicon, sharing image, and license.

Tests

python3 -m geno check --target browser .
python3 -m geno test .
python3 -m pytest
python3 -m ruff check .
python3 -m ruff format --check .

The behavioral tests execute the compiled browser lifecycle with deterministic keyboard input. They cover movement, double jumps, pause/resume, dash immunity, one hit per swing, armor, boss telegraphs, projectiles, defeat, victory, restart, and suspended frames. They also validate numeric drawing arguments. Pure Geno helpers have example clauses; drawing helpers are explicitly marked untested at the clause level and are exercised by the compiled tests.

Publishing

The GitHub Actions workflow checks, tests, builds, and publishes the game to GitHub Pages on every successful push to main. Pull requests run checks without publishing. The live site is built from Geno source; generated output is not committed.

Project layout

  • World.geno — deterministic simulation, platform collision, combat, boss AI.
  • Paint.geno — scanline triangles, ellipses, scenery, articulated characters.
  • Main.geno — input, fixed 120 Hz simulation, menus, and HUD.
  • build.py — compiler invocation, responsive HTML, metadata, and attribution.
  • tests/test_moonveil.py — gameplay tests against the compiled JavaScript.
  • assets/ — a game screenshot and favicon for the public website.

Rendering uses layered 2.5D Canvas geometry. It is a small game demo, not a complete general-purpose 3D engine. There is no audio, touch input, or saved progress. Pause before switching apps: Geno's current browser runtime retains held keys on window blur. Rendering follows the display refresh rate; the 120 Hz simulation is separate from rendering FPS.

License

Apache License 2.0. Copyright 2026 David Iach. The generated game includes the Geno browser runtime under the same license. The full license is embedded in the generated HTML and included with the website.

About

Moonveil — The Last Lantern. A procedural 2.5D boss fight written in Geno. Play in your browser.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages