Skip to content

Packages

Optional, composable packages that add functionality to your game. Install what you need — each package is self-contained with minimal dependencies.

Add packages to an existing game interactively:

bash
npm run add-system

Available Packages

PackageImportDescription
Inputquantum-forge/inputKeyboard, mouse, gamepad, touch, gestures, local multiplayer
Collisionquantum-forge/collisionAABB, circle, point collision with SpatialGrid optimization
Audioquantum-forge/audioHowler.js wrapper for sounds and music
Particlesquantum-forge/particlesBurst, trail, and continuous particle effects
Animationquantum-forge/animationTweening with easing functions
Entitiesquantum-forge/entitiesEntity management with spatial queries and tagging
State Machinequantum-forge/state-machineGeneric finite state machine
Timerquantum-forge/timerGame-aware timers (pause-aware, delta-based)
Savequantum-forge/saveSave management with versioning and auto-save
Scenesquantum-forge/scenesScene management with stack-based lifecycle

Collision

typescript
import { SpatialGrid, checkCollision } from "quantum-forge/collision";

const grid = new SpatialGrid(cellSize);
grid.insert(entity);

const nearby = grid.query(entity.bounds);
for (const other of nearby) {
  if (checkCollision(entity, other)) {
    // handle collision
  }
}

Audio

typescript
import { AudioManager } from "quantum-forge/audio";

const audio = new AudioManager({ logger });
audio.loadSound("hit", "/sounds/hit.ogg");
audio.play("hit");
audio.setVolume(0.8);

Particles

typescript
import { ParticleSystem } from "quantum-forge/particles";

const particles = new ParticleSystem();
particles.burst(x, y, {
  count: 20,
  speed: 100,
  lifetime: 0.5,
  color: "#a855f7",
});

// In game loop
particles.update(dt);
particles.render(ctx);

Animation

typescript
import { Tween, easeOutCubic } from "quantum-forge/animation";

const tween = new Tween({
  from: { x: 0, y: 0 },
  to: { x: 100, y: 200 },
  duration: 500,
  easing: easeOutCubic,
  onUpdate: (values) => {
    sprite.x = values.x;
    sprite.y = values.y;
  },
});

Save

typescript
import { SaveManager } from "quantum-forge/save";

const saves = new SaveManager({
  key: "my-game",
  version: 1,
  autoSave: true,
  autoSaveInterval: 30000, // 30s
});

saves.save({ gameState, quantumLog }); // includes quantum recording
const data = saves.load();

Scenes

typescript
import { SceneManager } from "quantum-forge/scenes";

const scenes = new SceneManager();
scenes.register("menu", menuScene);
scenes.register("game", gameScene);

scenes.push("menu");   // enter menu
scenes.push("game");   // push game on top
scenes.pop();           // back to menu

Powered by Quantum Forge