ATC Game

The airport map doubles as a small ATC game built only on the SDK (v0.10): you work ground and tower at one airport while traffic comes and goes.

cd cmd/airport-map && go run .
# open http://127.0.0.1:8080/?icao=LKPR, then Schedule → ATC game → Start game

How it plays

  • A new flight appears every few minutes (the interval ±30 %), alternating departures and arrivals, at most 8 at a time.
  • Departures appear on a free stand that fits them (airline from the call sign) with a SID for the runway, and wait for your Pushback.
  • Arrivals appear at the entry of a STAR for the runway; MSFS AI flies the STAR and the approach transition, the injected approach takes over on final. After landing they wait clear of the runway for your Taxi.
  • Every aircraft holds at each clearance: pushback, taxi (or a progressive taxi by clicking route points), crossings, line up, take-off. When something is in the way: Hold position, Go around, Abort take-off (ATC Commands).
  • Aircraft keep their own distance on the ground (they queue and give way at crossings), but they do not think for you on the runway.

Score

Points
Departure airborne, arrival on its stand +10
A flight waiting for your clearance over a minute −1 every 30 s
Wingtip separation lost on the ground (safe zones overlap, one of them moving) −50
Two aircraft on one runway (lining up, lined up or rolling, landing or rolling out) −100

The same conflict counts again only after a minute. The panel shows the score, flights handled and the next flight; the events log what happened, and the traffic log file keeps every clearance.

API

GET /api/game returns the state (on, icao, runway, intervalSec, score, handled, spawned, started, nextInSec, and the last 40 events); POST /api/game with {"on": true, "icao": "LKPR", "runway": "24", "intervalSec": 180} starts it, {"on": false} ends it. An empty runway means the runway in use.

The game spawns its own flights and gives you every clearance. For traffic that runs by itself from a timetable, see the Traffic Manager.