A free, procedural 2.5D boss fight written in Geno. A cloaked knight faces a glass-winged guardian in a floating, moonlit sanctum.
The game runs in a desktop browser with a keyboard. No download, account, or installation is required to play.
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.
| 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.
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.pyOpen dist/index.html in a browser, or serve it locally:
python3 -m http.server 8765 --bind 127.0.0.1 --directory distThen 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.
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.
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.
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.
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.
