Skip to content

Departure & Center

Available now, through initial enroute climb.

Departure

Once Tower hands you off above 1,000 ft AGL and you check in on Departure's frequency, you get:

"Seattle Departure, radar contact, climb and maintain one zero thousand"

The climb altitude is capped at 10,000 ft (or your filed cruise altitude, if that's lower) -- a real Departure climbs an aircraft in steps toward its filed altitude, which this engine doesn't model yet; it assigns one capped initial climb and stops there. This also advances the flight phase to DEPARTURE.

Departure hands off to Center

As the climb nears that same capped altitude (9,000 ft MSL), Departure hands you off to Center:

"contact Seattle Center one two eight point three"

The Center facility is found from the aircraft's actual position (xatc.world.xplane_data.artcc_for_position, point-in-polygon containment against atc.dat's own Center airspace blocks -- see Any-airport data loading), not hardcoded to any one ARTCC. Its frequency then comes from xatc.atc.center_selector.select_center_frequency -- a documented placeholder rule (ADR 0003), since atc.dat doesn't actually encode real sector-to-frequency subdivisions within a block: it picks a frequency by a bearing wedge from the block's polygon centroid to the aircraft's position, not real controller sector geometry. If no Center block covers the aircraft's position at all, the handoff simply doesn't fire and the aircraft stays on Departure rather than guessing at a frequency.

The Center controller position is created dynamically, the moment the handoff fires -- unlike ATIS/Clearance/Ground/Tower/Departure, which all come from the airport's own apt.dat rows, there's no static "Center position" sitting around ahead of time. Its frequency, facility id, and callsign (e.g. "Seattle Center") all come from whichever atc.dat controller block the frequency-selection rule actually matched.

Checking in on Center gets:

"climb and maintain one eight thousand"    (below FL180)
"climb and maintain flight level three five zero"    (at or above 18,000 ft)

-- your full filed cruise altitude this time, not a capped one, and it advances the flight phase to ENROUTE.

Direct-to, or resume own navigation, at radar contact

If Tower's takeoff clearance carried a heading (a radar-vectors departure, no SID), the radar-contact check-in above also turns the aircraft loose from that heading:

"...radar contact, climb and maintain one zero thousand, cleared direct Battle Ground"
"...radar contact, climb and maintain one zero thousand, resume own navigation"

Direct is issued to the first fix on the filed route if there is one to go to; otherwise it's a plain "resume own navigation." A SID departure never gets this -- there's no assigned heading to release in the first place, since the SID itself is flown as published from the takeoff roll. Once you're navigating your own route, en-route requests and route tracking take over as normal.

Check-ins are only accepted after a real handoff actually happened -- being in the right phase isn't enough by itself. The engine also checks that Clearance.expected_next_freq_khz still points at the exact frequency you're checking in on, so a check-in transmission heard too early (before Departure's own handoff has fired) doesn't jump the phase; it gets "say again" instead. A handoff also starts a check-in reminder if you never answer it.

Center-to-Center handoffs

Fly far enough enroute or on a descent and you can cross into a genuinely different ARTCC's airspace -- Center now hands you off across that real boundary, not just once for the whole flight:

"contact Oakland Center one two six point four"

Which Center facility you're on is real: artcc_for_position re-checks the aircraft's position against atc.dat's actual Center polygons every tick, and a handoff fires once a genuinely different facility has covered the aircraft for a sustained 30 seconds (so briefly clipping a border doesn't trigger one). Within one facility, an altitude band change (crossing into a different FT/FL block that happens to use a different frequency) hands off the same way, immediately. A same-facility, same-band frequency change from the bearing-wedge rule alone (see below) only ever triggers while ENROUTE -- never while descending -- and only after 10 minutes on the current one, so a track that clips several wedges close together doesn't chatter. Once you're within 60 nm of the destination and descending, Center stops handing off sector to sector at all -- Approach is next.

Checking in on the new Center repeats your assigned altitude only if you didn't already report it within 300 ft:

"Oakland Center, roger"                                   (you reported the assigned altitude)
"Oakland Center, roger, maintain flight level three five zero"   (you didn't)

Configuration

xatc run --departure KPDX --atc-dat <path>   # an explicit atc.dat needs --departure too

See Any-airport data loading for the full precedence (--apt-dat/--atc-dat, then an X-Plane install via --xplane-root, then the bundled fixtures) and how the departure airport itself is chosen.

Limitations

  • No step climbs beyond the two capped handoff altitudes (Departure's 10,000 ft cap, then straight to full cruise at Center) -- a real Departure/Center climbs an aircraft incrementally.
  • No crossing restrictions (a specific altitude or speed to meet at a fix along the way).
  • Which ARTCC facility is real (see above), but the frequency chosen within it is still the same deterministic placeholder (a bearing wedge from the block's polygon centroid) -- there's no source data for actual named-sector boundaries inside one facility in atc.dat, ARTCC or TRACON.
  • Center starts the aircraft down for arrival and hands off all the way through landing and taxi-in -- see Arrival for the full descent-through-parking chain.