Airtime docs Play ▸

Timer triggers

Timer gates are volumes (usually boxes, any convex brush is fine) placed in the map. Passing through one fires it. They are invisible to collision; the player never bumps into them. Optionally they can be drawn (a glowing frame, a coloured floor).

Gate kinds#

GateFires whenDoesUrT / others
Startthe player enters it, ready, movingstarts the timer of its route; restarting while inside or re-entering restarts itut_jumpstart (needs ready + nonzero velocity, ignored if the same route started < 5 s ago); Defrag target_startTimer; surf start zone
Stopthe player enters it with that route's timer runningstops it, the time is the resultut_jumpstop; Defrag target_stopTimer
Cancelthe player enters it with a timer running (of its route, or any route)stops the timer without a resultut_jumpcancel (type > 0 must match)
Checkpointthe player enters it during a run of its routerecords a split (the time so far); the first pass countsFliserv ut_jumpcheckpoint; Defrag target_checkpoint; Trackmania checkpoints
Stage start / endas start and stop, but for a stage inside a routetimes the stage alone, while the route's timer keeps runningsurf stages
Reset / respawnthe player enters itputs the player back (at the route start, the last checkpoint in practice, or a spot), and cancels the run or not as settrigger_teleport falls, kill brushes
Leet markerthe player passes it during a runrecords "made leet X", optional own boardAirtime

Start gate details#

  • Leaving vs entering: UrT starts on touch (entering). Surf starts on leaving the zone, so the time starts when you go. A gate option: on: enter | leave.
  • Prespeed limit: an optional maximum speed when the timer starts (surf), so nobody starts at full speed after looping around. UrT has none, only "must be moving".
  • Cooldown: UrT ignores a start of the same route within 5 s. Classic maps keep it; Airtime maps set their own.
  • Ready: UrT needs /ready. In Airtime the run type decides (pro / practice), see gameplay/runs.md.

Checkpoint details#

  • Order: ordered (must be passed in order, a missing one makes the stop invalid, like Trackmania) or free (any order, only splits).
  • Required: a stop is only valid if all required checkpoints were passed. This stops shortcuts the author didn't want. Shortcuts the author likes simply have no required checkpoint.
  • Practice respawn point: in practice runs, the reset key goes back to the last checkpoint (position, view and the speed it was passed with, or zero, set per checkpoint).

Shared gates: several routes, one start#

Routes often share gates. Two routes can start at the same gate and finish at the same gate, and differ only in the checkpoints you must pass on the way: the left side of the map vs the right side, the safe line vs the leet line, "all checkpoints" vs "any %". UrT has no idea of this (a start belongs to exactly one way), so Airtime defines it:

  • Gates belong to no route by themselves. A route is a list: its start gate, its stop gate, and its checkpoints (required or not, ordered or free). One gate can appear in any number of routes.
  • Extra checkpoints: each route says whether passing a checkpoint that isn't in it is allowed (default: "any %" style, extra checkpoints don't matter) or forbidden (passing one means you're not on this route: "left side" vs "right side").
  • Two routes may not be identical (same start, same stop, same required checkpoints): the editor refuses it.

Which route is the player on?#

Three ways, used together:

  1. Choose before the start (route picker). The player picks the route: a menu, a key that cycles the routes of the nearest start gate, or in the world: a route sign or pad in the start area (stand on the blue pad = route 2). The HUD shows the chosen route, its colour and its next checkpoint. Only that route can finish this run.
  2. Narrow down while running (auto). Without a choice, passing a shared start begins a run with all routes of that start as candidates. Every checkpoint narrows them: a route drops out when the player passes a checkpoint it forbids, or misses one it requires in order. The HUD shows the candidates ("Route: Left · Right") until one is left.
  3. Decide at the stop. At the stop gate, every candidate whose required checkpoints were all passed is valid. The run counts on every valid route's board (a run that passed all checkpoints is also a valid "any %" run). If none is valid, the run ends without a result, and the HUD says which checkpoint was missed.

What the choice changes:

Chosen routeAuto (candidates)
Timetable and race ghostthat route's splits and ghost from the startthe last route you finished (or the first candidate); switches when the candidates narrow
Checkpoint hints in the worldonly that route's next checkpoint lights upthe next checkpoint of every candidate
Missed a required checkpointthe HUD warns at once ("missed: Aqua Bowl")the route silently drops out
Resultsthat route onlyevery valid route

Default: auto, with the picker always available. A map can force the choice (route pads only, e.g. for routes that are hard to tell apart).

Shared stops and overlapping gates#

  • A shared stop ends the run for the route being run (or the remaining candidates). It never starts or ends a different route's run by accident.
  • A gate that is both the stop of one route and the start of the next (chained routes, a "stage" map): passing it finishes the first run and starts the second in the same instant.
  • Overlapping starts of different routes in one place are the same as one shared start with several routes; the editor merges them.
  • Ghosts and replays store the route (or the valid routes) of each finished run, so a replay always knows which board it belongs to.

Filters (only fire for some players)#

From Fliserv, the custom server of the UJM jump servers. A filter sits between a trigger and what it fires, or is a condition on a gate.

FilterPasses when
Run filterthe player is in a run of route N / not in a run / in any run
Speed filterhorizontal speed above (or below) a threshold; or vertical speed
Stamina filterstamina above (or below) a threshold
Team filterthe player is in team X (team modes)
Leet filterthe player has made leet X in this run

Example: a leet exit gate that only opens (teleports you on) above 1200 ups = a speed filter before a teleport.

How it's stored#

In UrT BSPs (compatibility): trigger_multiple with target → ut_jumpstart / ut_jumpstop / ut_jumpcancel (key "type" = route, "name", "color"). Imported as typed gates.

In the Airtime map format (../map.md): gates are typed volumes, and routes refer to them by id, so one gate can serve several routes:

"gates": [
  { "id": 201, "gate": "start", "shape": { "box": [[0,0,0],[256,32,128]] }, "on": "enter", "prespeed": null, "cooldown_ms": 5000 },
  { "id": 202, "gate": "checkpoint", "name": "Aqua Bowl", "shape": { … } },
  { "id": 205, "gate": "checkpoint", "name": "Steel Slide", "shape": { … } },
  { "id": 203, "gate": "stop", "shape": { … } },
  { "id": 204, "gate": "cancel", "routes": "any", "shape": { … } }
],
"routes": [
  { "id": 1, "name": "Left", "colour": "#6ec6ff", "start": 201, "stop": 203,
    "checkpoints": [{ "gate": 202, "required": true }], "order": "ordered", "extra": "forbidden" },
  { "id": 2, "name": "Right", "colour": "#ffb347", "start": 201, "stop": 203,
    "checkpoints": [{ "gate": 205, "required": true }], "order": "ordered", "extra": "forbidden" },
  { "id": 3, "name": "All checkpoints", "start": 201, "stop": 203,
    "checkpoints": [{ "gate": 202, "required": true }, { "gate": 205, "required": true }], "order": "free" },
  { "id": 4, "name": "Any %", "start": 201, "stop": 203, "checkpoints": [], "extra": "allowed" }
]

All four routes share the start and the stop. A run through the left checkpoint only is valid for Left and Any %. A run through both checkpoints is valid for All checkpoints and Any % (the extra checkpoint rules it out of Left and Right). Its time goes on every valid board.

Overlay for classic maps: a separate file of gates for a map hash. Adds checkpoints and fixes broken timers without touching the BSP (like surf zones stored on the server).

Exactness#

  • Gates fire from the game's trigger touch, the same as UrT (G_TouchTriggers, per command). On classic maps, timing behaviour matches UrT, so imported demos agree.
  • The exact crossing time is in clock.md.

Editor#

  • Place a gate like a piece. Its route colour and kind are shown in the editor and, optionally, in the game.
  • A route panel: pick the start and stop gates (shared ones allowed), add checkpoints, set required ones and their order, see if the route is complete (start + stop present) and not a duplicate of another route.
  • Route pads / signs for the in-world route picker, placed like pieces.
  • Validation before publishing: every route has a start and a stop, and the author has finished it.