You can find the primary documentation site here.

* * *

Overview

The Affinity Engine is an open-source, browser-based game engine. It’s entirely free: no licensing, no royalties, and no price tag. And since it’s browser-based, its games are de facto cross-platform: PCs, Macs, iPhones, Androids, you name it. In fact, that lovely little greeting Ember and Diy just gave you is itself an Affinity Engine playing in your browser.

The engine is adept at making interactive fiction and visual novels, but it has the potential to do a whole lot more. Rather than locking game designers into a single, monolothic solution, the engine actually consists of dozens of small modules that designers can pick and choose from. Each module adds new functionality to your game, while also exposing a simple, human-readable API that often feels like a theatrical script or screen play. In this way, the engine attempts to be both easy to use and infinitely extensible.

While the engine is currently still in beta, its API is largely stabilized and you should feel free to start making games with it today. Or, as our winsome host Diy would put it, make games you’ll love.

Features

  • Free, open-source, and browser-based!
  • Complete VN support: text, menus, images, and music/voice/sound effects
  • Advanced Layering: everything on the stage is divided into layers, which you can individually animate for perspective effects
  • Transitions: everything supports animated transitions, from background images to menus to full scenes
  • Text Animation: text is animated and has markup for changing speed, animation, pausing, and more; you can even changing character expressions when the text arrives at a particular point!
  • Data Management: multi-save, load, reset, and rewind
  • i18n: easily manage multiple languages
  • And more:
    • Configurable keyboard and mouse support
    • Full mobile support
    • Multiple style choices, or design your own!
    • Use FontAwesome icons! (Or another icon set of your choosing)

Code Sample

export default Scene.extend({
  start: task(function * (script) {
    script.backdrop('bedroom').fadeIn();
    const diy = script.character('diy').fadeIn();
    const ember = script.character('ember').fadeIn();
    yield diy._.text("We'd like to welcome you!");
    yield ember.expression('smiling')._.text("We'll be your tour guides.");
  }
});