Skip to content
LucasAntunesdeAlmeidaPublic

About

A platform fighting game that is also an arena for AI agents. Any MCP-speaking agent can walk in, discover the controls, and fight. Built on the Collider engine.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Fighter

A platform fighting game that is also an arena for AI agents. Any agent that can speak MCP (a Claude client, a Python script, your own bot in any language) can walk in, discover the controls, and fight: against the built-in CPU, against another agent, or against you.

Built on Collider, a code-first 2D game engine for Go whose games are agent-playable out of the box. That's why it was chosen: Collider treats "an AI can play this" as an engine feature, not an afterthought, and this game pushes that idea as far as it goes.

Agent vs Agent

Two external agents fighting over MCP. The HUD says who's at the controls: PLAYER-1, CPU-2, or AGENT-1.

The arena: any agent can fight

The game binary is the server: nothing to install, no SDK required. Run it with two environment variables and its stdio speaks MCP (newline-delimited JSON-RPC 2.0):

$env:COLLIDER_AGENT = "mcp"          # headless; "mcp-window" = real time, watchable
$env:FIGHTER_MATCH  = "p1=agent:kael,p2=cpu2:torg,stage=skyreach,stocks=3"
go run .                             # or the built fighter.exe

Or hand it straight to an MCP client:

claude mcp add fighter -e COLLIDER_AGENT=mcp -e "FIGHTER_MATCH=p1=agent:kael,p2=cpu2:torg" -- C:\path\to\fighter.exe

Everything an agent needs is served on connect, no docs required:

  • initialize returns the rules and a match briefing: stage geometry, blast zones, both fighters' stats and per-move frame data.
  • act lists this game's controls in its own description (p1-attack, p1-heavy, p2-jump, ...) and holds them for N ticks.
  • Every observation carries the full battle state: positions, damage, stocks, state machines, hitstun, projectiles.

Headless matches step deterministically and simulate in seconds, built for training and evaluation loops. mcp-window runs the same match in the real-time window, where agent input merges with the keyboard: that's how a person fights an agent in the same game.

Every matchup works:

Matchup How
Player vs CPU the normal game (go run .)
Player vs Agent arena -p1 human -p2 sage -window
Agent vs CPU arena -p1 berserker -p2 cpu3
Agent vs Agent arena -p1 berserker -p2 sage

Two Claude-powered example agents ship in examples/agents as references for building your own: BERSERKER, a relentless rushdown strategist, and SAGE, which profiles the opponent's habits and counter-picks. Each pairs a Claude strategist (a tactic decision every ~2s) with a deterministic micro-policy (frame-level execution). The arena command above runs any matchup, including a scripted bot that needs no API key. The examples README documents the wire format with a complete Python agent in ~20 lines.

The game

A polished platform fighter in its own right: knockback rises with damage, KOs happen past the blast zone, last stock standing wins.

go run .
  • Four fighters with distinct silhouettes and frame data: Kael the Tide Blade (swordsman, wave projectile), Torg the Mountain (slow, armored, huge damage), Lyra the Starweaver (floaty zoner, warp recovery), Volt the Live Wire (fastest in the game).
  • 18 moves each: jabs, tilts, chargeable smashes, five aerials with a meteor, dash attack, grab and throws, two specials.
  • Movement: dashes, double jumps, fast-fall, drop-through platforms, ledge grabs, shields, rolls, spot and air dodges.
  • Two stages: Skyreach Temple (day, wind, drifting clouds) and Neon Harbor (night, rain, neon, lightning), with parallax and a dynamic camera.
  • Modes: local versus (2P or vs CPU levels 1-3), training, stocks or timed rules.
  • Feel: hitstop, screen shake, KO slow-motion, hit sparks, baked weapon trails, squash-and-stretch everywhere.

Controls

Action P1 P2
Move W A S D Arrows
Jump Space Numpad 0 / Right Ctrl
Attack J Numpad 1 / ,
Heavy (hold to charge) K Numpad 2 / .
Special L Numpad 3 / /
Grab U Numpad 4 / M
Shield / dodge Left Shift Right Shift

Esc pauses. F11 toggles fullscreen. Every sprite, sound and song is generated procedurally by code in this repository, no hand-drawn assets anywhere.

Built with Collider

Collider provides the window, scenes, objects, input, text, audio and the MCP agent server; this game provides a 60Hz world-space battle simulation on top (platform-fighter physics don't fit AABB-solid resolution) and renders it through pooled Collider scene objects projected by its own camera.

The agent story is pure engine API. Three optional calls make any Collider game, however complex, fully agent-playable:

g.Controls(battle.MCPControls())            // named inputs, self-described to agents
g.AgentState(func() any { ... })            // full game state in every observation
g.AgentDocs("rules + match briefing JSON")  // served on MCP connect

If you're building your own Collider game, the same three lines put it in reach of every agent that can play this one.

Development

main.go               window, embedded assets, agent/demo modes
gamestate/            JSON shapes of the agent-facing state
internal/data         single source of truth: stats, frame data, balance
internal/battle       fighter state machines, physics, hits, camera, HUD, FX
internal/agentmode    FIGHTER_MATCH parsing + the three engine agent hooks
internal/ai           built-in CPU opponents
internal/menus        title, selects, rules, settings, results
examples/agents       Claude example agents, policy layer, MCP client, arena
tools/genassets       generates every asset into assets/
go test .                        # headless battle + MCP end-to-end tests
go run ./tools/genassets         # regenerate all art/audio (characters ~2 min)
$env:FIGHTER_DEMO='battle'; $env:COLLIDER_RECORD='docs/demo.gif'; go run .   # record a CPU demo

Fonts are Bungee and Rajdhani (SIL Open Font License). During development the engine is used from a local checkout via go.work (see AGENTS.md).

About

A platform fighting game that is also an arena for AI agents. Any MCP-speaking agent can walk in, discover the controls, and fight. Built on the Collider engine.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages