Skip to the content.

How Detection of Flight State Works

This is a snapshot of v0.9.7 transitions, so it might evolve. It should answer most questions on ‘what fires when’.

Flight State Transition Table

File to Play Things to Check Timing Logic
BoardingWelcome GSX Mode: IsOnGround=True AND IsGSXBoardingInProgress=True AND IsBeaconOn=False
Traditional Mode: IsOnGround=True AND IsLogoLightOn=True AND IsBeaconOn=False
Play once when GSX boarding starts OR logo light first turns on, then repeat every X minutes (configurable, default 5) until BoardingComplete
BoardingWelcomePilot Settings: BoardingWelcomePilot enabled AND BoardingWelcome played AND IsOnGround=True AND IsBeaconOn=False Play once after the initial BoardingWelcome during boarding (off by default)
BoardingMusic BoardingWelcome played AND BoardingComplete not played Loop continuously until BoardingComplete or next BoardingWelcome
DepartureDelayed SimBrief scheduled pushback overdue by ≥ configured minutes AND BoardingWelcome played AND BoardingComplete not played Interrupts BoardingMusic immediately; plays once per boarding session; respects global spacing; BoardingMusic resumes (from offset if resume is enabled)
BoardingComplete IsBeaconOn=True AND IsOnGround=True OR GSX Boarding complete (when GSX enabled) Play once when beacon first turned on OR GSX boarding completed (whichever happens first)
ArmDoors IsOnGround=True AND (IsEngineRunning=True OR GroundSpeed > 1) OR Auto ArmDoors tweak enabled AND BoardingComplete played Play once when engines start or aircraft begins moving, or automatically soon after BoardingComplete if Auto ArmDoors tweak is enabled
PreSafetyBriefing ArmDoors played AND IsEngineRunning=True Wait for ArmDoors to finish playing
SafetyBriefing PreSafetyBriefing played Wait for PreSafetyBriefing to finish playing
CabinDimTakeoff SafetyBriefing played AND IsDaylight=False Wait for SafetyBriefing to finish playing + 10 seconds
CrewSeatsTakeoff IsOnGround=True AND (IsLandingLightOn=True OR IsStrobeLightOn=True) AND IsEngineRunning=True When landing lights (default) or strobe lights are turned on (takeoff imminent)
CallCabinSecureTakeoff CrewSeatsTakeoff played AND IsOnGround=True Wait for CrewSeatsTakeoff to finish playing + 5 seconds
AfterTakeoff AltitudeAGL > TakeoffDetectionAltitudeAGL (3,000 ft) AND IsOnGround=False Wait 2 minutes after takeoff detected (independent timing), configurable altitude
TopOfClimbPilot Settings: TopOfClimbPilot enabled AND Altitude within ±1000 ft of SimBrief initial altitude AND IsOnGround=False AND VerticalSpeed > 0 Wait 20 seconds after conditions met (disabled by default)
FastenSeatbelt Climb/Cruise Phase AND AfterTakeoff played AND Seatbelt Sign OFF→ON transition (CABIN SEATBELTS ALERT SWITCH or ANNUNCIATOR SWITCH binding) 2 Minute Cooldown (Repeatable)
TopOfDescentPilot Settings: TopOfDescentPilot enabled AND Altitude within ±1000 ft cruise band AND 2 minutes at cruise AND Descend ≥500 ft at ≤-500 fpm AND >50% cruise elapsed Play once when all conditions met (disabled by default)
Cruise Climb/Cruise/Descent Phases AND only plays the once per file Use the file naming convention of ‘CruiseElapsedXXPercent’ where XX represents the number % through the flight e.g. CruiseElapsed33Percent is 1/3rd through the flight time
DescentSeatbelts (AltitudeAGL < DescentDetectionAGL (10,000 ft) AND VerticalSpeed < -500) OR LandingLightJustTurnedOn=True When descending below configurable altitude OR when landing lights just turned on
CrewSeatsLanding AltitudeAGL < CrewSeatsLandingAGL (3,000 ft) AND VerticalSpeed < -300 AND IsLandingLightOn=True During final approach phase with landing lights on (configurable altitude threshold)
CallCabinSecureLanding CrewSeatsLanding played AND AltitudeAGL < CrewSeatsLandingAGL + 2000 (5,000 ft) Wait for CrewSeatsLanding to finish playing + 10 seconds (uses CrewSeatsLandingAGL + 2000ft)
AfterLanding IsOnGround=True AND (SpoilersDeployed=False OR GroundSpeed < 15) AND (previous phase was descent/approach OR descent announcements played) After landing and spoilers retracted OR ground speed below 15 knots
AfterLandingMusic AfterLanding completed AND DisembarkStarted not yet played. Loops continuously after AfterLanding completes. May be interrupted by DisarmDoors and then resumes (from offset if resume enabled). Stops when DisembarkStarted plays.
DisarmDoors AreEnginesOff=True AND IsParkingBrakeOn=True AND AfterLanding played Wait for AfterLanding to finish playing
DisembarkStarted DisarmDoors played AND (IsBeaconOn=False OR IsGSXDeboardingInProgress=True) Wait for DisarmDoors to finish playing. When GSX Deboarding completes (State 6), automatically resets flight state for next flight

Airline Detection

Airline folder selection is determined using a priority order so the most reliable source wins, with graceful fallbacks:

1) SimBrief (preferred)

2) Tail number in MSFS

Folder selection

Sound Files and Tagging

The system supports various tagging options using square brackets in filenames:

Aircraft-Specific Tags

The system uses the ATC MODEL simvar (e.g., “737”, “A320”) for enhanced aircraft detection. If this simvar is not available, it falls back to parsing the aircraft title from the TITLE simvar.

Time-Based Tags

Situational Tags

Special Tags

Location (ICAO) Tags

Arrival and Departure Tags ([ARR] and [DEP])

Numbered Variants

You can create multiple versions of the same announcement:

The system will randomly select one variant per flight and maintain consistency throughout the flight.

Tag Priority and Matching

PMDG SDK Integration

Some PMDG aircraft, such as the MSFS 2024 777 family don’t export light values correctly, in that the logo, beacon and landing lights all show ‘ON’ regardless of their switch positions. Note: the MSFS2020 PMDG 777’s are fine, this is just the MSFS 2024 version. This is reported to PMDG but it possible won’t be changed for a while.

To get around this the app uses the PMDG SDK data broadcast feature to read the internal values. Unfortunately this mean this data access has to be manually turned on. Here’s how I did it for the 77l, and hopefully is applicable for others in the family:

Store version:

%localappdata%\Packages\Microsoft.Limitless_8wekyb3d8bbwe\LocalState\WASM\MSFS2024\pmdg-aircraft-77l\work

Steam version:

%AppData%\Microsoft Flight Simulator 2024\WASM\MSFS2024\pmdg-aircraft-77l\work

(with the ‘l’ being the 200ER etc, as that changes per variant, so do each one you have)

[SDK]
EnableDataBroadcast=1

If these signals get updated to use the general simconnect values like other aircraft then hopefully we don’t have to keep doing this.

App Custom light override L:Vars

These optional L:Vars let external programs explicitly force specific exterior lights ON. When set to 1, they override default SimVars and PMDG data, and also bypass IgnoreIncompatibleAircraftLights. If they’re 0 or not present, they are ignored and normal detection applies.

Note: It is recommended you also use the Settings / Tweak Ignore incompatible aircraft lights on with these custom lvars.

L:Var Type Value meaning
L:UNI_ANNOUNCER_LIGHT_LOGO Bool (0/1) 1 = force Logo light ON
L:UNI_ANNOUNCER_LIGHT_BEACON Bool (0/1) 1 = force Beacon light ON
L:UNI_ANNOUNCER_LIGHT_LANDING Bool (0/1) 1 = force Landing light ON
L:UNI_ANNOUNCER_LIGHT_STROBE Bool (0/1) 1 = force Strobe light ON

One possible use of these LVARs is in reading internal WASM/IPC values with MobiFlight or FSUIPC (e.g. ProSim A320 etc) that don’t currently export all simconnect values and then set these accordingly. So you’d script inputs/outputs in the external tool to set these values to bypass any restriction of external light data.

GSX Integration

The Universal Announcer now supports GSX (Ground Services eXtended) integration for more realistic boarding announcements. This feature must be enabled in the Settings → Integrations tab.

GSX SimVar Integration

When GSX integration is enabled, the system monitors three GSX simvars:

GSX Boarding State - L:FSDT_GSX_BOARDING_STATE:

GSX Refueling State - L:FSDT_GSX_REFUELING_STATE:

GSX Deboarding State - L:FSDT_GSX_DEBOARDING_STATE:

GSX Boarding Logic

When GSX integration is enabled:

When GSX integration is disabled:

Manual Flight State Override Menu

The Universal Announcer provides a comprehensive manual flight state override system accessible via the system tray menu. This allows users to jump to any flight phase and get appropriate announcements for that stage of flight.

Right-click the system tray icon → Flight State submenu

Control Options

Menu Option Description State Set
Resume Resume all announcements (only shown when stopped) Resumes automatic detection
Stop Stop all announcements (only shown when running) Pauses all announcements
Auto Return to automatic flight state detection null (automatic detection)
Restart Reset state machine to beginning of flight sequence Clears all played announcements

Flight Phase Options

Menu Option Flight State Announcements Marked as Played What You’ll Get Next
Preflight Preflight None BoardingWelcome when logo light turns on
Taxi Taxi BoardingWelcome, BoardingMusic, BoardingComplete ArmDoors when engines start or aircraft moves
Takeoff Takeoff BoardingWelcome, BoardingMusic, BoardingComplete, ArmDoors, PreSafetyBriefing, SafetyBriefing, CabinDimTakeoff CrewSeatsTakeoff when landing/strobe lights turn on
Climb Climb BoardingWelcome, BoardingMusic, BoardingComplete, ArmDoors, PreSafetyBriefing, SafetyBriefing, CabinDimTakeoff, CrewSeatsTakeoff, CallCabinSecureTakeoff AfterTakeoff after 2 minutes at altitude > TakeoffDetectionAltitudeAGL (3,000 ft)
Cruise Cruise All pre-cruise announcements (boarding through AfterTakeoff) FastenSeatbelt when seatbelt sign turns on, DescentSeatbelts when descending
Descent Descent All pre-descent announcements (boarding through AfterTakeoff) DescentSeatbelts when below DescentDetectionAGL (10,000 ft) OR when landing lights just turned on
Approach Approach All pre-approach announcements (boarding through AfterTakeoff) CrewSeatsLanding when below CrewSeatsLandingAGL (3,000 ft) with landing lights
Landing Landing All pre-landing announcements (boarding through CallCabinSecureLanding) AfterLanding when on ground with spoilers retracted
Done Done All announcements No further announcements (flight complete)

Landing Cabin Reactions

The system can automatically play cabin reaction sounds based on landing quality. This feature monitors landing parameters (vertical speed and G-force) and plays appropriate sounds:

Supported Sound Files:

These files support the same tagging system as other announcements:

Files are searched in airline-specific folders first, then the Default folder. If no custom file is found, embedded default sounds are used.

Note: This feature can be enabled/disabled in Settings → Tweaks tab.