Storm the Gates
Three rooms between you and the gate: the Graveyard, the Crypt, the Gatehouse. Five chests to gather, 120 seconds on the clock, and the soil never stays still — fell a zombie and its grave simply starts again. ← → move, ↑ jump, ↑↓ climb, Z / Space / X throws the lance. Your armour takes the first hit. After that it's just you and your underthings.
What makes it Ghouls'n Ghosts
- The armour — two hits, not one, and the first is comedy: the
contactevent is cancelled, the Knight character is swapped for a pale man mid-stride (one line — looks are characters, not hard-code), and the world becomes much more serious. Fresh plate with each life. - The lance — strict C64 controls (
jumpKeys: ['up']) free the fire button to be a weapon: a flat-flyingProjectile, two aloft at most, felled zombies paid through Rules. The throw itself is a moveset move withpose: false— the engine owns the press and the timing; the lance is the visual. - The risen — zombies are never gone. Each grave is one mob cycling forever: mound → heave → shamble → felled or departed → mound. The state machine is the respawn — they never leave the world's mob list.
- The gate — the run ends at the engine's Exit, demanding all five chests. You don't finish a Ghouls level; you earn it — against a clock whose expiry costs a life and re-arms (
onExpire: 'die', straight from the RULES JSON in rooms.js).
Download & remix
Both files are live in the SOURCE panel — edit and RUN ▶. Take them home: main.js · rooms.js · engine bundle. Remix ideas: a second weapon on a pickup (dagger — faster, shorter); graves that spawn two; the classic indignity of being sent back to the graveyard when the clock dies.