Skip to content

Watch a Replay

  • Browse a gallery of past games (Konquista + Destreect)
  • Filter by game type, sort by newest/oldest/longest/shortest
  • Watch turn-by-turn replays with full game state
  • AI commentary from ORIANA (Konquista) or URBANO (Destreect)
  • Verify replay determinism (same seed = same outcome)

Every Ludus game is recorded as a sequence of ReplayEntry records — (turn, playerId, action, rngState) — with a deterministic seed. Anyone can replay the game and verify the outcome matches.

import { ReplayPlayer } from '@ludus/game-engine';
const player = new ReplayPlayer(konquistaGame);
const verified = await player.verify(replay); // true if deterministic

Browse replays with the ReplayGallery component:

import { ReplayGallery, useReplayList } from '@ludus/game-engine-react';
function GalleryPage() {
const { replays, loading, loadMore } = useReplayList({
gameType: 'konquista',
orderBy: 'newest',
limit: 10,
});
return <ReplayGallery replays={replays} onSelect={handleSelect} />;
}

CommentedReplayShell combines replay playback with AI commentary:

import { CommentedReplayShell } from '@ludus/game-engine-react';
import { ORIANA } from '@ludus/commentator';
<CommentedReplayShell replay={gameReplay} persona={ORIANA} />

The useReplayCommentary hook pre-generates all commentary on load, then filters by the current turn as you scrub through the replay.

useReplay gives you full control: play, pause, seek to turn, adjust speed.

import { useReplay } from '@ludus/game-engine-react';
const { currentTurn, isPlaying, play, pause, seek, setSpeed } = useReplay(replay);
seek(15); // Jump to turn 15
setSpeed(2); // 2x playback speed