New

Games and playing

A page per game in the desktop app — play it, see its busiest servers and its leaderboards — plus how the app installs, updates and launches TMC's own games and joins a server from a tmc:// link.

A page per game

Every game in the app’s Apps list opens to a page of its own (/apps/<id> inside the app) with three things the card has no room for:

  • Play — for a game the site can launch or the app can install. It opens the same play dialog as everywhere else, so you choose how to join rather than being dropped into something.
  • Its busiest servers — the same rows, filters and live query as the server browser, cut to a short list with a link to the full one.
  • Leaderboards and your figures, when you are signed in — any statistic the game’s servers record, ranked by the site, with your own rank and value beside the board even when you are not on it.

Why the stat picker only shows some stats

There is no “list every stat this game has” route, so the page learns which stats exist from the ones you hold values for, and offers those. For any other, type its key (for example kills). A game you have never played shows none until you do. See Statistics for where the numbers come from.

TMC’s own games

Games TMC publishes — the Dot games among them — are installed by the app as real programs, not run in a browser:

  • the app picks the build for the machine it is on (operating system and architecture), downloads it, verifies it and unpacks it;
  • installed games appear under Library → TMC Games, separate from what you have subscribed to, and each can be removed from there;
  • each is kept up to date automatically, and automatic updates can be switched off per game;
  • a build that is no longer published for your machine still runs — it is marked as such, and you can still remove it.

When the app launches a game onto a server, the server’s address is passed on the command line. For a Godot game the app keeps the -- separator in front of the game’s own arguments: Godot reads everything after a bare -- as the game’s, and everything before it as the engine’s.

UDP by default, TCP/WebSocket if you need it

A TMC game joins a server over UDP (ENet) by default whenever the server serves it, and falls back to WebSocket if the UDP attempt does not get through. Every TMC server listens on both, so UDP players and WebSocket or browser players play together on the same server: the choice only changes how your machine reaches it.

If your network drops UDP silently, the game waits out its UDP attempt on every join. Turn off Settings → Games → Connect over UDP and the app launches the game with --transport ws after the argument separator, so it joins over WebSocket (TCP) straight away. A server that advertises no UDP port is joined over WebSocket regardless.

The in-game server browser

When the app launches a TMC game it also tells the game which site to list servers from (--browser-backbone-url, set to the app’s own API base, after the -- separator). A shipped client has no web page to take that from, so without it the game’s server browser would list nothing. A --browser-backbone-url already in the game’s arguments, or a DOT_BROWSER_BACKBONE_URL in your environment, wins: the app never overrules a choice you made.

Solo (no server)

A game that supports Solo can be launched with no server at all. The app starts the game with the game pack’s <owner>/<repo> id and, optionally, the version to mount (the newest when none is named). The site tells the app which pack through the launch answer (Resolving a launch), and a link can name it too, as shown below.

On the website the same thing is the Play solo button: a game pack with nothing to connect to opens in the browser tab and runs the game’s own offline mode. When the game also has servers, Play (the matchmaker) is the primary button and Solo the grey one beside it; with no servers, Solo is the only button. A game with nothing published cannot be launched without a server.

The builds and how the app finds the right one are described in Where is this game’s build?.

A tmc://play/<host>:<port> link on the website opens the app on that server. It shows which game is running there and the latency measured from your machine, then the ways you can actually join it.

A link can also open one game’s launch screen with no server, and name the Solo pack to run:

tmc://play/app/<app>?solo=<owner>/<repo>&solo_version=<version>

<app> is the game’s slug or id; solo_version is optional. Both values are checked as single, safe command-line arguments (letters, digits, ., _, -; nothing starting with -), and a value that fails is dropped rather than refused, so the link then behaves as a plain tmc://play/app/<app> link.