Implementation notes

How we made Horde Hour with AI

Published Oct 14, 2026 · Updated Oct 15, 2026

Why this game first

The design starts with round-based zombie tension in a browser tab: move, survive a wave, then choose an upgrade. It offers an original alternative to running a commercial game port and does not reuse those games' assets.

Design constraints

The game draws its sprites with Canvas 2D primitives rather than downloading image assets. Startup speed still depends on the browser and device; no cross-device load-time benchmark is published.

One-thumb playable: auto-aim removes the twin-stick problem on phones, so the only input is movement.

Deterministic daily mode: all randomness flows through a seeded PRNG (mulberry32) so a date string fully determines spawns and upgrade offers.

Spawns and mobile input

Enemy variety and the difficulty ramp shape each run. Spawn positions, wave timing and simultaneous enemy counts are important tuning points to revisit during full playtests.

Mobile needed real thought: a floating joystick that appears wherever your thumb lands, and an upgrade screen with cards large enough to tap.

How the site talks to the game

The game runs in an iframe and posts small messages to the page (ready, start, game over with score). The page owns the leaderboard, the share card, and analytics, which keeps the game itself a single static file that any portal could host.

Example prompts

These examples describe the game design and are not a preserved transcript of the build session. Build duration and performance across devices have not been independently measured.

Core loop. Build a single-file HTML5 canvas game: top-down zombie wave survival. Player moves with WASD; weapon auto-fires at the nearest enemy. Enemies: walker, runner, brute. Waves escalate. Between waves, offer 3 random upgrades. All randomness must come from a seeded PRNG so a date string reproduces a run. No external assets.
Mobile pass. Add touch controls: a floating virtual joystick that spawns where the thumb touches the left half of the screen. Upgrade cards must be tappable and at least 44px tall. Pause automatically on visibilitychange.