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.