“MSFS Immersive” Game Link Profile Details

<– Back to “Improved Game Link Profile for MSFS 2020/2024”

This profile was designed for use with the Yaw 3 and its Game Link app.

My Yaw 3 is configured with the 15 degree tilt seat mount installed and the following settings: Power =40%, Pitch forward =20 deg., Pitch backward =30 deg., Roll =19 deg., Yaw =180 deg. (unlimited), Vibration = enabled + infinite, Return =0.  Anti-jump (YAW) is enabled with jump threshold=15 (but I have yet to see how this affects anything), Convergent Limit is not enabled and Anti-Rollover is not set.

I’m told this profile works with the Yaw 2 but I don’t know if it behaves as intended or if the multipliers I use need to be re-tuned for use with the Yaw 2.

MSFS Immersive Profile Inputs (v3.0+)

This profile makes use of five custom outputs I added to the Game Link MSFS plugins: roll_dynamic, pitch_dynamic, yaw_dynamic, heave_dynamic and surge_dynamic.  Their implementation is more complex and makes use of numerous functions that are not available in Game Link.

You can see the code for these plugins on GitHub.

Input: roll_dynamic: ROLL

Simulates the lateral forces that would actually be felt using MSFS lateral acceleration data by tilting the motion rig left or right on its roll axis. It does NOT mimic the aircraft’s roll attitude because, in a coordinated turn, lift tilts with the aircraft and the combined forces of lift and gravity are felt straight down into the seat rather than sideways as in a car.  This variable therefore calculates only uncoordinated lateral forces – lateral forces that would actually be felt in a real aircraft such as slip or skid from improper rudder input, crosswinds, turbulence or rough landings.  In other words, the motion rig will not tilt to one side or the other when the turn is fully coordinated but only backwards to simulate the increased force down into the seat.

As of version 3.1, this variable now also let’s through rotational forces during fast roll maneuvers (as with acrobatic planes or fighter jets) which tend to overwhelm any force coordination so that you feel the force of the roll acceleration.

As of version 3.1, this variable now let’s through lateral forces while a helicopter is hovering or not moving forward enough to provide significant force coordination.

Input: pitch_dynamic Output: PITCH

Simulates the shifting forward/aft of the downward force of gravity due to the aircraft’s pitch attitude and any positive or negative G-force loads that would be felt from diving, climbing or banking and any downward force resulting from a coordinated turn.  All of these cues are applied by tilting the motion rig forward and backward on the pitch axis proportionately.  These cues are additive and one can even counteract another during a maneuver like pulling out of a dive.  You can feel the change in g-force direction well before the pitch of the aircraft crosses the horizon.  This variable also simulates the feeling of being inverted in near level flight by pitching forward to imply the feeling of “hanging in the straps”. This effect is tempered by the aircraft’s pitch attitude.

Keep in mind that we can only perceive acceleration: change in velocity or direction over time, not constant, steady-state velocity.  This means that the motion rig’s pitch position will reflect whatever acceleration you would be experiencing – either from the constant acceleration from gravity/lift or from rotational acceleration as you push forward or pull back on the stick or yoke in a climb, dive or banked turn.  The pitch of the motion rig will fall back to an appropriate gravity/lift orientation when your climb or descent rate turns constant.  Or it will begin to pitch in the opposite direction as you start to reverse a dive or climb — even while the aircraft is still pitched up or down.  Again, the profile simulates the acceleration forces felt, not merely the orientation of the aircraft.

Input: heave_dynamic Output: PITCH

Used to simulate transient heave (up/down) motions from vertical turbulence, bumps and touchdown impacts.  It’s applied via the pitch axis since the Yaw 3 has no up/down heave axis.

Input: surge_dynamic Output: PITCH

Simulates forward/backward acceleration from things like engine thrust, braking, or air drag.  Since the Yaw 3 doesn’t have a forward/back surge axis, these effects are applied to the pitch axis by tilting back for forward acceleration and forward for deceleration. As with all acceleration data, this reflects changes in velocity, not constant velocity.  This means that it simulates a force felt by tilting forward or back only as long (or as much) as you’re experiencing sustained acceleration – so only as long as you’re still increasing or decreasing velocity.

(This variable would need a washout function applied to it if it were to be applied to a true surge axis.)

Input: yaw_dynamicOutput: YAW via INCREMENT

Used to simulate rotation about the body-relative vertical axis (yaw). This custom input variable tries to scale the magnitude of the motion based on the size of the aircraft and how far you would be from the center of rotation. There’s no length telemetry in MSFS so it uses the totalWeightYawMOI data as a rough substitute. It uses Game Link’s INCREMENT type to rotate by increments rather than moving to a specific position. If you have a yaw limit set, Game Link will stop moving in that direction but it will still allow movement in the opposite direction.

Input: rotationVelocityBodyYOutput: YAW via INCREMENT

Used to simulate turning motions while on ground only. Tests for being both on ground and not a helicopter to avoid double rotation.

Input: rotationVelocityBodyYOutput: YAW via INCREMENT

Used to simulate turning motions while in a helicopter, regardless of on ground or not.  (Kept separate from the above to allow for independent scaling.)

Input: Constant OutputOutput: HZ

Set to allow vibration effects to trigger up to 50 times per second. Whether a vibration occurs at any given moment depends on what input is sent to AMP. Turning this off will disable all vibration effects.

There’s an upper limit to how quickly the Yaw 3 can vibrate. It feels like it tops out somewhere under 100 Hz.

Input: engine_rpm_1/2/3/4 & engineCount Output: AMP

Simulates engine vibrations for piston engines only (more rough).

Input: engine_rpm_1/2/3/4 & engineCountOutput: AMP

Simulates engine vibrations for all non-piston engines only (more smooth).

Input: contactPointCompression0/1/2 Output: AMP

Simulates ground surface vibrations on up to three contact points (like nose gear, left & right gear) and it’s scaled up by velocity.

Input: contactPointCompression5/4/3Output: AMP

Applies only to aircraft models with mis-numbered contact points (eg, Cessna 172): same as above, simulates ground surface vibrations on up to three contact points.

 

NO LONGER USED directly as of version 3.0:

Input: rotaitonAccelerationBodyZ  Output: ROLL

Adds initial sideways sensation of initiating a change in roll attitude. Helps things feel more responsive.

Input: accelerationBodyY  Output: PITCH

Used to simulate positive and negative G’s from body-relative vertical acceleration – tilting back for positive, forward for negative. This applies regardless of orientation: in turns, climbs, dives, etc. Since this doesn’t use pitch attitude for its input, you’ll get nice side benefits like feeling turbulence, rough landings, stalls, etc. – anything that’ll come through in acceleration telemetry.  I’ve kept this separate from pitch_dynamic to allow for easier relative scaling adjustments.

Remember that this is acceleration data which reflects ongoing change in velocity, not constant velocity.  This means that it tilts back or forward only as long as you’re increasing or decreasing your climb or descent rate — it will ease off when your climb or descent rate turns constant.  Or it’ll pitch the opposite direction as you start to reverse a dive or climb — even while the aircraft is still pitched up or down.  Again, this is simulating the forces felt, not the orientation of the aircraft.

Input: accelerationBodyZ  Output: PITCH

Used to simulate forward/backward acceleration — tilting back for forward acceleration. As with all acceleration data, this is reflecting changes in velocity, not constant velocity.  This means that it tilts back or forward only as long as you’re increasing or decreasing velocity.

Vertical/Horizontal Axes Someday?

The Yaw 3 currently only has roll, pitch and yaw motion but if there were ever an ability to add vertical and horizontal translation motions (“heave”, “surge”, “sway”), one would need to calculate appropriate motion cues extracted from the same accelerationBodyX, Y and Z sim variables.  As of version 3.0 of my MSFS Game Link plugins, I’ve added a couple of variables (heave_dynamic and surge_dynamic) which do some of these calculations but because these are currently being applied to the Yaw 3’s pitch axis they do not need to wash out any motion cues.  To support a true heave or surge axis, these would have to be modified to wash out each motion cue to allow for subsequent motion cues on the same axis.

Axis Orientations

For reference, this is how positive and negative axis values are interpreted by MSFS and the Yaw 3 motion rig:

negative positive
MSFS x axis (lateral) left right
MSFS y axis (vertical) down up
MSFS z axis (longitudinal) backward forward
Yaw 3 Motion Rig pitch up, roll right pitch down, roll left
Here’s the MSFS SDK Documentation on all the available simulation variables.

 

Version History

IN PROGRESS: Version 3.1, Coming soon: 2026-04 ?

After successfully replacing the roll axis wheels on my Yaw 3, I was able to continue work on my Game Link plugins and profile for MSFS.  This version fixes some problems introduced with my new calculation model in 3.0 and adds a number of behaviors and improvements.

  • This profile depends on my updated and included v3.1 Game Link plugins for MSFS 2024 and 2020 but, as usual, these updated plugins break compatibility with my earlier profiles.
  • Improved roll handling and coordinated turn logic
    • Helicopters: now includes full roll attitude & lateral acceleration effects
      • (suppresses force coordination estimate based on amount of forward velocity)
    • Snap rolls: now includes motion cues during fast snap rolls (like in acrobatic planes and fighter jets)
    • Static rolls: now always reflects some roll attitude in extreme bank angles
    • Ground motion: blends centripetal force at slow speeds with sideslip effects at higher speeds
  • Simulates coordinated down force in pitch axis from coordinated turns
    • (pitch_dynamic was mistakenly subtracting out this effect in 3.0)
  • Improved blending of positive and negative G effects on pitch axis
  • Improved inverted flight effect by integrating it into the overall pitch_dynamic logic
    • (eliminated newly added invertedCue variable introduced in 3.0)
  • Adjusted pitch_dynamic curve and rate limit for better behavior across range of aircraft
  • Stopped surge and heave effects from exaggerating pitch maneuvers in twitchy, acrobatic planes
    • (was caused by compounding effects from surge and heave variables introduced in 3.0)
  • Added suppression of noisy MSFS variables that causes violent shaking when some helicopters sit idle on the ground
  • Adjusted heave_dynamic to improve touchdown impacts and include faster turbulence effects

CURRENT VERSION: Version 3.0, 2026-03-06 (download): Requires Game Link v2.73 or newer

My apologies for being so busy with other things all year that I’ve neglected this MSFS profile.  After this year-long hiatus and setting up a new gaming PC, I noticed a few disappointing behaviors with my last iteration of the profile (v2.1).  In the process of improving those behaviors, I ended up completely reworking all the calculations and motion cues for the roll and pitch axes and even added a few more custom variables to the Game Link MSFS plugins.

  • This profile depends on my updated and included v3.0 Game Link plugins for MSFS 2024 and 2020 but, as usual, these updated plugins break compatibility with my earlier profiles.
  • Greatly improved the simulation of lateral forces from coordinated versus uncoordinated turns
    • Reimplemented roll_dynamic variable
      • no longer uses turn_coordinator_ball which would suppress lateral turbulence effects
      • now based on the difference between accelerationBodyX and the expected lateral gravity component
    • Eliminated use of rotationAccelerationBodyZ (previously used to get feeling of roll initiation)
    • Added power curve function to emphasize small slips while still carrying large forces across range of motion rig
    • Now applies low pass smoothing to suppress jitters from signal noise but still carry through turbulent bumps
    • Now applies rate limiting to help carry a feeling of mass through violent maneuvers
  • Reimplemented pitch_dynamic variable to use a linear scaling function proportional to pitch angle
    • Improved feeling of small pitch attitude changes (was too violent, didn’t match VR visuals)
  • Increased range of backward pitch motion for extreme upward pitch angles
    • Also compresses forward tilt motion to allow for wider useable range of backward tilt motion
  • Improved handling of positive and negative g-forces and improved responsiveness to vertical turbulence effects
    • The pitch_dynamic variable now includes a G-force calculation based on separate low and high pass filter results from accelerationBodyY
    • Now applies an arctangent saturation curve to keep the smaller forces linear while still handling a full range
      • Needed to better support the range from light general aviation aircraft to high g-force aircraft like military jets
    • Now applies rate limiting to help carry a feeling of mass through violent maneuvers
  • Implemented new heave_dynamic variable to replace old profile’s direct usage of accelerationBodyY
    • Based on difference between sustained (slow low pass) and immediate acceleration values
    • Provides better handling of bumps and vertical turbulence (applied to Yaw 3’s vertical axis)
  • Implemented new surge_dynamic variable to replace old profile’s direct usage of accelerationBodyZ
    • Now subtracts out unwanted pitch-related gravity effect from accelerationBodyZ
    • Provides better handling of longitudinal acceleration: engine thrust, braking, air drag
  • Implemented new invertedCue variable to add simulated negative G-effect (forward pitch) for inverted flight
    • (In 3.1, this cue was integrated into the pitch_dynamic variable.)
  • Adjusted yaw_dynamic calculation to increase difference in yaw movement based on aircraft size

OLDER VERSIONS:

Version 2.1, 2025-02-11 (download): Requires Game Link v2.73 or newer

  • This 2.1 profile depends on my updated (v2.1) custom plugins for MSFS 2024 and 2020.
    –> These are included in Game Link v2.73 and later but they can be downloaded here
  • Now keeps telemetry (and motion rig) disabled while selecting an aircraft or loading a flight
    • No more unexpected motion while loading!!
  • Added new custom variables
    • roll_dynamic – rough simulation of coordinated lateral forces
    • pitch_dynamic – acceleration from vertical gravity component based on pitch and bank angles
    • yaw dynamic – rotational acceleration scaled by aircraft size
  • Renamed “velocity” input variable as “ground velocity” to clarify which MSFS variable this is.
  • Added MSFS variables “sim on ground”, “delta heading rate”, “total weight yaw MOI”
  • Replaced timer code with more efficient function
  • Improved roll effects:
    • Improved roll initiation effect by limiting strength
    • Removed misguided inertial/centrifugal effect
    • Uses actual lateral acceleration forces now — which means:
      • No longer based on roll orientation to fake forces
      • Includes lateral effects of turbulence now (not just in pitch & yaw)
      • Includes lateral effects from side-slipping
    • Two versions of roll behavior now:
    • “RAW” version (uses raw accelerationBodyX):
      • Less realistic but more consistent and more responsive (not dampened)
      • Does NOT simulate coordinated forces
        (tilts to the inside of banked turns even when it shouldn’t)
    • “COORDINATED” version (uses roll_dynamic):
      • More realistic but less responsive (dampened)
      • Rough simulation of coordinated vs uncoordinated lateral forces
      • Expect some unintuitive but realistic behaviors:
        • No sideways tilt in a banked turn when the forces are balanced and coordinated into your seat
        • Feel slip or skid to the inside or outside of a turn
        • Pitching down in smaller planes generates an uncoordinated side force despite being level
          • (Surprised me — I had to look up why it was happening.)
        • Different planes have different designs and will behave differently
          • dihedral wings, yaw damping, differential ailerons, swept wings, etc
          • some will and some won’t need rudder correction to keep coordinated to various degrees
          • some planes won’t generate any lateral force during normal banked turns
      • CAVEATS since it relies on MSFS’s “turn coordinator ball” variable:
        • Dampened and oscillates in big maneuvers
        • Doesn’t behave consistently in some aircraft? (eg, seems to stick in F/A-18 Hornet)
        • May diminish lateral turbulence feeling?
  • Improved pitch effects:
    • Improved turbulence effects during high G maneuvers
    • Removed direct dependency on pitch attitude:
      • gravity/lift component now comes from trig components of pitch/bank angles
      • better handling of positive/negative g forces (ascent/descent, stalls, etc)
  • Adjusted yaw effects:
    • Rotational acceleration effect now scaled to size of aircraft (slower for larger aircraft)
      • —> still needs more tuning though
    • Fixed double application of rotation while helicopter still in contact with ground
  • Adjusted vibration effects:
    • Restored and improved runway surface vibrations (accidentally disabled in 2.0)
    • Added workaround for badly configured aircraft (missing or misnumbered contact points)
    • Adjusted prop plane engine rpm vibrations

Version 2.01, 2025-01-19 (download):

  • Patch fix: Removed line in MSFS plugins (not profile) that was pausing sim if it saw an extreme altitude (> 53818 ft)
    • Such altitudes are actually possible and not necessarily invalid

Version 2.0, 2025-01-15 (download):

  • Includes custom plugins for both MSFS 2024 and 2020
    • Provides McFredward’s nice additions like smoothly transitioning to neutral position when you pause the sim
      • Includes his added input variables (normalized roll and yaw values, etc.)
    • Fixes a problem in YawVR’s original plugin where many input variables are mislabeled or have wrong values.
      • Old profiles are not compatible with this plugin and can even crash Game Link!
      • Took advantage of this situation to reorganize/regroup existing variables
    • Adds various new input variables like Airspeed, Engine Type, Engine Count, Sim Pause State, etc.
    • Reorganized the list of input variables
  • Adjusted roll effects:
    • roll amount now normalized with pitch angle (better behavior with extreme pitch)
  • Adjusted pitch effects:
    • Tuned overall pitch effect again
  • Adjusted vibration effects:
    • Improved contact/compression point handling for landing impacts
      •  oops: looks like I also broke runway surface vibrations (fixed in 2.1)
    • Improved handling of engine rpm vibrations
      • Now piston engines are handled differently than all others (turboprops, jets)
      • Reduced significantly for non-piston engines
      • I recommend adding transducers and using SimHaptic
        • has different effects for different aircraft, responds to rpm, plus many other kinds of haptics

My pre-2.0 profiles are no longer compatible because there was a bug in the original plugins that caused many of the telemetry variables to give incorrect values.  Game Link’s plugins were updated to include my fix and other improvements.

Version 1.3, 2025-01-03 (download) – no longer compatible with current Game Link!

  • Adjusted yaw effects:
    • restricted rotational velocity effect to aircraft with rotors (helicopters)
      • previous conditional would cause yaw jump when transitioning between slow and fast flight
      • now relying on only rotational acceleration for yaw effects on ground and in flight for fixed wing aircraft
    • reduced amount of yaw on rotational acceleration slightly
  • Adjusted roll effects:
    • reduced roll amount for rotational acceleration (essentially ground movements)
  • Adjusted pitch effects:
    • restored lost acceleration variable – now responds better to turbulence and ground impact on landing
    • increased overall pitch effect
  • Adjusted vibration effects:
    • added contact/compression point for rear wheels (most noticeable on landings)
    • reduced intensity of engine rpm vibrations
      • -50% for single engine, even less with more engines (bigger aircraft)
      • still doesn’t correspond well to engine type or engine rpm
      • can’t make smooth or realistic enough and make smoother with faster engine rpm
      • I recommend disabling this and adding transducers and using SimHaptic instead
        • has different effects for different aircraft, responds to rpm, plus many other kinds of haptics

Version 1.2, 2024-12-29: (download) – no longer compatible with current Game Link!

  • Adjusted roll effects:
    • Handles full roll over smoothly now by reversing roll past +/-90 degrees
      • moves as slow or as fast as the roll maneuver now
      • full inverted ends up full upright
    • Strengthened main inverse roll effect slightly
    • Disabled additional roll effect from rotational acceleration
      • can’t find a way to gently washout the return motion
    • Added inverse roll from yaw movements using rotational velocity
      • adds centrifugal force feel to yaw maneuvers
      • also good for ground steering motion
  • Adjusted pitch effects:
    • Strengthened pitch effects to include some missing pitch motions
    • Adjusted longitudinal acceleration to not drown out rotational acceleration
    • Removed smoothing that was masking aircraft shake during extreme pitching
  • Adjusted yaw effects:
    • reduced multiplier on rotational acceleration and removed smoothing
      • need a way to washout unwanted return movement though
    • Limited rotational velocity-based yaw motion to slow speeds
      • still gives ground taxiing motions and helicopter hovering rotations
      • added bonus of simulating stall/tail spin with yaw sliding/slipping effect
  • Vibration effects:
    • Restored constant vibration frequency to 50 Hz
      • Can’t feel difference with higher hertz, lower values are even rougher
    • I’ve switched to using dedicated transducers and SimHaptic
      • Much more immersive and provides lots of different telemetry haptics

Version 1.1, 2024-12-25: (download) – no longer compatible with current Game Link!

  • Redesigned around focusing on mimicking perceived forces rather than aircraft orientation
    • Inverse roll effect to mimic centrifugal force plus secondary longitudinal rotational velocity
      • (need to find a way to calculate true force of turn rather than using roll position)
    • Pitch effect to mimic longitudinal acceleration and velocity
    • Inverse pitch effect for dive/climb forces overcoming gravity
  • Added yaw effect based on rotational acceleration and velocity
  • Tweaked vibration hertz value but left
    • engine vibrations still feel too rough

<– Back to “Improved MSFS Profile for MSFS 2020/2024”