Skip to content
RUEN

Orbit Assault: an arcade orbital invasion

An arcade on our own engine: waves of aliens descend on your tank, a saucer flies overhead and the shields crumble brick by brick.

Controls: Z — left, X — right, M — fire, Esc — pause. On phones, use the on-screen buttons. Open the game full screen ↗

The task

We wanted an arcade game that runs from a link on any device, stays crisp on any screen, weighs tens of kilobytes and pulls in neither a game engine nor audio files.

The solution

  • DHTML rendering: every sprite is a page element with a sprite sheet in background-position, no canvas. The browser composites the layers itself, and the pixel art stays crisp at any scale.
  • Sound is synthesized on the fly with Web Audio: the saucer siren, shots, explosions and hit crackle are built from oscillators, noise and filters, without a single audio file.
  • Our own engine: a game loop on requestAnimationFrame, an event bus and a collision grid where hits are checked only between neighboring cells.
  • The TypeScript code is split into Feature-Sliced Design layers, and the linter checks the layer boundaries. The platform sits behind an interface, so the same game builds for the site and for game platforms.

Details

  • The field scales to the screen, phones get three on-screen buttons and the layout rebuilds itself in portrait orientation.
  • Five sprite skins are generated by a script: it recolors only opaque pixels by zone, keeping their brightness, so the shapes stay the same.
  • About 200 unit tests plus a headless check of the real scene; promo shots are taken by a script that plays the game itself.

Technologies

  • TypeScript
  • Feature-Sliced Design
  • DHTML sprites
  • Vite
  • Web Audio
  • Pointer Events
  • Yandex Games SDK