Motions of the Dead

Posted on Sep 20, 2026

The horde is a text buffer read side-on. Your cursor is the gun, dw kills a walker faster than llllllx does, and the difference is the time it took to bite you. That is the whole pedagogy: inefficient motions get you killed.

The waves follow a Vim syllabus one lesson at a time, so the horde only ever asks for a motion you have been shown, and your service record keeps what you actually know — the motions you use, the ones you missed that would have won the fight, and your keystrokes per kill, run over run.

Vite, TypeScript and Canvas 2D, with zero runtime dependencies. Nothing here is an asset: every glyph and figure is drawn procedurally and every sound is synthesised when the page loads.

Before you play

  • Graphic violence. This is a zombie game. It is pixel gore rendered in text, but it is gore: blood, dismemberment and a lot of dying. The options screen has three gore levels if you want it turned down.
  • Flashing and screen shake. Muzzle flashes, red damage flashes and camera shake are frequent and can be intense. If you are sensitive to flashing imagery or prone to photosensitive seizures, please skip this one.
  • Anonymous analytics. The game sends four anonymous counts — a run started, a run ended, a mission finished, a drill finished — to Umami, a cookieless analytics service that honours Do Not Track. No cookies, no account, no identifiers, and nothing about who you are. See the privacy policy for the details.
  • Your progress stays in your browser. The game saves to your browser’s local storage under motd.save. It is never sent anywhere and I never see it. Clearing your site data erases it, and there is no cloud save or account to restore it from — the game’s save screen can export it if you want a copy.
Open in a new tab ↗

Everything is Vim, starting with the menu: the title screen is an eight-row menu you navigate the way you navigate a buffer. Press G on it for the about pages, which cover the idea, the keys, the lesson and the build.