Force feedback support

Tell me about it. But if you want a working FFB function, this is how you do it.

1 Like

What about Brunner, how well is it implemented in MSFS as of today?

I have seen posts on both sides of the fence, some say it needs native support in msfs and others that say with XPFORCE it is amazing. I guess the gripe is having to run another software to get this to work. I’m looking at the Brunner myself and I believe it will work beautifully. Either way, make sure you click on the vote vote button at the top of of this topic

Thanks for your feedback and already voted a long time ago

1 Like

Well, i’ve only seen Gamermuscle do only one item on the brunner’s force feedback in MSFS2020, nobody else jumped on the bandwagon.

Having just delved into the brunner forum, i guess reading through here will give you some idea of the state that the brunner is actually in. https://forum.brunner-innovation.swiss/forums/topic/1695/

Yes, ffb is working, no not natively… hell, even has to use Vjoy to get some parts to work. So, in my humble opinion, it’s doesn’t appear to be an actual consumer product with just one installer and automatically working in sims… it requires certain steps to get it working properly. Read through the forumpost if you like, i’m just posting here what it feels like from my side of the fence (Logitech G940 owner) whilst reading that… and yeah, i’d like to have a fully functioning product without hassle, just one installer and be done with it… i got enough of that fiddling with msfs VR (quest2) and racing on a simucube FFB system… sorry Brunner, keep evolving, you’ve caught my attention. Hope msfs will pitch in for you with required sdk to be fully implemented and recognizing the brunner flight system… and to help all the other people in here who have FFB joysticks wanting it to be implemented properly into msfs.

Woof ~ Woof & Salute!

Steiny

PS… might want to read through here as well, some great and not so great experiences… see for yourself: Any Brunner yoke users? - Microsoft Flight Simulator (2020) - The AVSIM Community

2 Likes

It is actually both at once, with XPForce you get really good basic FFB that adds a lot to the sim BUT there is also stuff that cannot be emulated and needs the game to provide more data.

2 Likes

Yes, it is old indeed, but nonetheless it’s from Microsoft itself and as far as my limited knowledge goes, it seems to be just a software limitation, a simple driver update would do the trick. The hardware is great, otherwise it wouldn’t last 20 years like mine, and it is surviving beautifully must I say.
I managed to make it work like you said, but had to assign all the commands and button one by one and still no force feedback. Sometimes it’s better to fly with the power cable unplugged as it’s natural behaviour is to center the stick. Either way, let’s hope Microsoft fix it soon. Thanks

Not so easy as I don`t want to invest in new and cumbersome gear mostly cause I already own the best joystick of all times :crazy_face:.
I’m sure there are great new stuff out there, but I’m happy with the one I own, even without the forcefeedback it still works ok, but like I said, it’s sad to see Microsoft going the “commercial” way, appealing to graphics, visuals, scenery rather than focusing on delivering a more realistic simulator. It’s just a game, not a simulator like it was previously. I guess it sells more, and money is king. Sadly in this case.

Will try that, thanks. Although it is a little frustrating like [StruckZebra9] said, as you’d expect Microsoft would incorporate that on it’s own software.

Good question. I don’t believe I have a solve for your question, but related to it, here is a topic about force feedback you might want to check out to see if you agree with:

Force feedback support - #107 by Steinways

It’s 20+ years old. Why would they support it? They also don’t support other really old controllers! They want you to buy the new stuff thats out. Time to upgrade.

1 Like

Force feedback is so 2000!

It might depend on what is your definition of “supporting” it, but this wouldn’t take much either in my opinion:

[see my post below which got merged here]

I’m summing up below my current understanding about supporting FFB and the SWFFB2 joystick

1) “supported” peripherals are just an XML file in the WindowsApp folder:

C:\Program Files\WindowsApps\Microsoft.FlightSimulator_1.17.3.0_x64__8wekyb3d8bbwe\Input

example with Alpha_Flight_Controls.xml
<?xml version="1.0" encoding="utf-8"?>
<DefaulftInput Primary="1">
  <Version Num="1588" />
  <Device DeviceName="Alpha Flight Controls" GUID="48473d10-eab1-11e9-8001-444553540000" ProductID="1900">
    <Axes>
      <Axis AxisName="X" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="Y" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="Z" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="rX" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="rY" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="rZ" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="SliderX" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
      <Axis AxisName="SliderY" AxisSensitivy="0" AxisSensitivyMinus="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisNeutral="0" AxisResponseRate="-1" />
    </Axes>
    <Context ContextName="COCKPIT_CAMERA">
      <Action ActionName="KEY_COCKPIT_QUICKVIEW3" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_RIGHT">257</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_COCKPIT_QUICKVIEW4" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_LEFT">259</KEY>
        </Primary>
      </Action>
    </Context>
    <Context ContextName="EXTERNAL_CAMERA">
      <Action ActionName="KEY_CAMERACHASE_RESET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button2">1</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CHASE_QUICKVIEW1" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_RIGHT">257</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CHASE_QUICKVIEW2" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_DOWN">258</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CHASE_QUICKVIEW3" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_LEFT">259</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CHASE_QUICKVIEW4" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_UP">256</KEY>
        </Primary>
      </Action>
    </Context>
    <Context ContextName="INSTRUMENTS_CAMERA">
      <Action ActionName="KEY_COCKPIT_BACKCYCLE" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_LEFT">259</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_COCKPIT_CYCLE" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_RIGHT">257</KEY>
        </Primary>
      </Action>
    </Context>
    <Context ContextName="MODES">
      <Action ActionName="KEY_COCKPIT_RESET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button2">1</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CYCLE_PILOTVIEW_BACK" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_DOWN">258</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_CYCLE_PILOTVIEW_NEXT" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="POV1_UP">256</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_VIEW_MODE" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button3">2</KEY>
        </Primary>
      </Action>
    </Context>
    <Context ContextName="PLANE">
      <Action ActionName="KEY_ALTERNATOR_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button13">12</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_AP_MASTER" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button4">3</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_AVIONICS_MASTER_1_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button17">16</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_AVIONICS_MASTER_2_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button19">18</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_AXIS_AILERONS_SET" Flag="4" ValueEvent="0">
        <Primary>
          <KEY Information="Axis X">1026</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_AXIS_ELEVATOR_SET" Flag="4" ValueEvent="0">
        <Primary>
          <KEY Information="Axis Y">1042</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_BEACON_LIGHTS_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button21">20</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_ELEV_TRIM_DN" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button6">5</KEY>
          <KEY Information="Button8">7</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_ELEV_TRIM_UP" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button5">4</KEY>
          <KEY Information="Button7">6</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_LANDING_LIGHTS_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button23">22</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MAGNETO_BOTH" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button34">33</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MAGNETO_LEFT" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button33">32</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MAGNETO_OFF" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button31">30</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MAGNETO_RIGHT" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button32">31</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MAGNETO_START" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button35">34</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_MASTER_BATTERY_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button15">14</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_NAV_LIGHTS_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button27">26</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_RUDDER_TRIM_LEFT" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button9">8</KEY>
          <KEY Information="Button11">10</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_RUDDER_TRIM_RIGHT" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button10">9</KEY>
          <KEY Information="Button12">11</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_STROBES_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button29">28</KEY>
        </Primary>
      </Action>
      <Action ActionName="KEY_TAXI_LIGHTS_SET" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button25">24</KEY>
        </Primary>
      </Action>
    </Context>
    <Context ContextName="SMART_CAMERA">
      <Action ActionName="KEY_TOGGLE_SMART_CAMERA" Flag="2" ValueEvent="0">
        <Primary>
          <KEY Information="Button1">0</KEY>
        </Primary>
      </Action>
    </Context>
  </Device>
</DefaulftInput>

2) “supported” peripherals images are referenced in a list:

The list of default devices images is found in the following file

C:\Program Files\WindowsApps\Microsoft.FlightSimulator_1.17.3.0_x64__8wekyb3d8bbwe\Packages\fs-base-ui\DeviceConfig.xml

This file lists the per-device folders where the images are stored, from the following root folder:

C:\Program Files\WindowsApps\Microsoft.FlightSimulator_1.17.3.0_x64__8wekyb3d8bbwe\Packages\fs-base-ui\html_ui\Textures\Menu\Control

DeviceConfig.xml file content
<?xml version= "1.0" encoding= "utf-8" ?>
<DeviceConfig>
	<Device ProductId="0x1900" TextureFolder="H.Alpha Flight Control" />					<!-- Alpha Flight Controls -->
	<Device ProductId="0x1901" TextureFolder="Bravo Throttle Quadrant" />					<!-- Bravo Throttle Quadrant-->
	<Device ProductId="0x884B" TextureFolder="Keyboard"					Priority="-10" />	<!-- Keyboard -->
	<Device ProductId="0x378D" TextureFolder="Mouse"					Priority="-9" />	<!-- Mouse -->
	<Device ProductId="0xC215" TextureFolder="Saitek Extreme 3D Pro Stick" />				<!-- Logitech Extreme 3D (NB: Saitek = Logitech) -->
	<Device ProductId="0xA2AE" TextureFolder="Saitek Flight Instrument Panel" />			<!-- Saitek Flight Instrument Panel -->
	<Device ProductId="0x0D06" TextureFolder="Saitek Flight Multi Panel" />					<!-- Saitek Flight Multi Panel -->
	<Device ProductId="0x0D05" TextureFolder="Saitek Flight Radio Panel" />					<!-- Saitek Flight Radio Panel -->
	<Device ProductId="0x0D67" TextureFolder="Saitek Flight Switch Panel" />				<!-- Saitek Flight Switch Panel -->
	<Device ProductId="0x0763" TextureFolder="Saitek Pro Flight Rudder Pedals" />			<!-- Saitek Pro Flight Rudder Pedals -->
	<Device ProductId="0x0C2D" TextureFolder="Saitek Pro Flight Throttle Quadrant" />		<!-- Saitek Pro Flight Quadrant -->
	<Device ProductId="0x2221" TextureFolder="Saitek Pro Flight X-56 Rhino Stick" />		<!-- Saitek Pro Flight X-56 Rhino Stick -->
	<Device ProductId="0xA221" TextureFolder="Saitek Pro Flight X-56 Rhino Throttle" />		<!-- Saitek Pro Flight X-56 Rhino Throttle -->
	<Device ProductId="0x0BAC" TextureFolder="Saitek Pro Flight Yoke" />					<!-- Saitek Pro Flight Yoke -->
	<Device ProductId="0x075C" TextureFolder="Saitek X52 Flight Control System" />			<!-- Saitek X52 Flight Control System -->
	<Device ProductId="0x0762" TextureFolder="Saitek X52 Pro Flight Control System" />		<!-- Saitek X52 Pro Flight Control System -->
	<Device ProductId="0xB68F" TextureFolder="T-Pendular-Rudder" />							<!-- -Pendular-Rudder -->
	<Device ProductId="0xB678" TextureFolder="T-Rudder" />									<!-- T.Flight Rudder Pedals -->
	<Device ProductId="0xB679" TextureFolder="T-Rudder" />									<!-- T-Rudder -->
	<Device ProductId="0xB10A" TextureFolder="T.16000M" />									<!-- T.16000M -->
	<Device ProductId="0xB67B" TextureFolder="T.Flight Hotas 4" />							<!-- T.Flight Hotas 4 -->
	<Device ProductId="0xB68D" TextureFolder="T.Flight Hotas One" />						<!-- T.Flight Hotas One -->
	<Device ProductId="0xB108" TextureFolder="T.Flight Hotas X" />							<!-- T.Flight Hotas X -->
	<Device ProductId="0xB106" TextureFolder="T.Flight Stick X" />							<!-- T.Flight Stick X -->
	<Device ProductId="0x0402" TextureFolder="T.Hotas Warthog Joystick" />					<!-- T.Hotas Warthog Joystick -->
	<Device ProductId="0x0404" TextureFolder="T.Hotas Warthog Throttle" />					<!-- T.Hotas Warthog Throttle -->
	<Device ProductId="0xB687" TextureFolder="TWCS Throttle" />								<!-- TWCS Throttle -->
	<Device ProductId="0x0DA3" TextureFolder="V.Ruddo Plus" />								<!-- VirtualFly - RUDDO+ -->
	<Device ProductId="0x0DA1" TextureFolder="V.TQ3+" />									<!-- VirtualFly - TQ3+ -->
	<Device ProductId="0x0DA2" TextureFolder="V.TQ6" />										<!-- VirtualFly - TQ6+ -->
	<Device ProductId="0x0DA4" TextureFolder="V.V3rnio TPM" />								<!-- VF - TPM V3RNIO -->
	<Device ProductId="0x0DA0" TextureFolder="V.Yoko The Yoke Plus" />						<!-- VirtualFly - YOKO+ -->
	<Device ProductId="0x0001" TextureFolder="XInput Gamepad"			Priority="-1" />	<!-- XInput Gamepad -->
	<!-- Devices without images -->
	<Device ProductId="0x4843" TextureFolder="Unknown Device" />							<!-- Custom DR400 cockpit, BU0836X Interface -->
	<Device ProductId="0x3E20" TextureFolder="Unknown Device" />							<!-- Custom DR400 cockpit, BU0836X Interface -->
	<!-- T.A320 -->
	<Device ProductId="0x0405" TextureFolder="T.A320 Pilot" />								<!-- T.A320 Pilot (Left handed) -->
	<Device ProductId="0x0406" TextureFolder="T.A320 Copilot" />							<!-- T.A320 Copilot (Right handed) -->
	<Device ProductId="0x0407" TextureFolder="T.A320 Quadrant throttle" />					<!-- Airbus T-A320 Quadrant throttle -->
</DeviceConfig>

3) Your personal profiles are just an XML file in a cryptic folder:

They are also saved with the same format but hidden in pain sight under a cryptic path and file name.

Here is the path to my SWFFB2 profile:

C:\Users\name\AppData\Local\Packages\Microsoft.FlightSimulator_8wekyb3d8bbwe\SystemAppData\wgs\xxxxxxxxxxxxxxxx_000000000000000000000000xxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

NB: I’ve replaced numbers with x because these are most likely unique to my setup.

example with my SW FFB2 profile
<?xml version="1.0" encoding="UTF-8"?>
<Version Num="1588"/>
<FriendlyName>SideWinder Force Feedback 2 Joystick profile</FriendlyName>
<Device DeviceName="SideWinder Force Feedback 2 Joystick" GUID="{2D4DA090-2B33-11EA-8001-444553540000}" ProductID="27">
	<Axes>
		<Axis AxisName="X" AxisSensitivy="-14" AxisSensitivyMinus="-14" AxisNeutral="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisResponseRate="2000"/>
		<Axis AxisName="Y" AxisSensitivy="-14" AxisSensitivyMinus="-14" AxisNeutral="0" AxisDeadZone="2" AxisOutDeadZone="0" AxisResponseRate="-1"/>
		<Axis AxisName="rZ" AxisSensitivy="-12" AxisSensitivyMinus="-12" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
		<Axis AxisName="SliderX" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
	</Axes>
	<Context ContextName="ATC">
		<Action ActionName="KEY_ATC_MENU_1" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 1">0</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_ATC_MENU_2" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Left">259</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_ATC_MENU_3" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Right">257</KEY>
			</Primary>
		</Action>
	</Context>
	<Context ContextName="EXTERNAL_CAMERA">
		<Action ActionName="KEY_CHASE_LOOK_DOWN" Flag="1">
			<Primary>
				<KEY Information="Joystick Pov Down">258</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_DOWNLEFT" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Down_Left">261</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_DOWNRIGHT" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Down_Right">262</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_LEFT" Flag="1">
			<Primary>
				<KEY Information="Joystick Pov Left">259</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_RIGHT" Flag="1">
			<Primary>
				<KEY Information="Joystick Pov Right">257</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_UP" Flag="1">
			<Primary>
				<KEY Information="Joystick Pov Up">256</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_UPLEFT" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Up_Left">260</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_CHASE_LOOK_UPRIGHT" Flag="2">
			<Primary>
				<KEY Information="Joystick Pov Up_Right">263</KEY>
			</Primary>
		</Action>
	</Context>
	<Context ContextName="INGAME_UI">
		<Action ActionName="KEY_ATC" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 2">1</KEY>
			</Primary>
		</Action>
	</Context>
	<Context ContextName="MODES">
		<Action ActionName="KEY_SLEW_TOGGLE" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 7">6</KEY>
			</Primary>
		</Action>
	</Context>
	<Context ContextName="PLANE">
		<Action ActionName="KEY_AXIS_AILERONS_SET" Flag="4">
			<Primary>
				<KEY Information="Joystick L-Axis X ">1026</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_AXIS_ELEVATOR_SET" Flag="4">
			<Primary>
				<KEY Information="Joystick L-Axis Y ">1042</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_AXIS_RUDDER_SET" Flag="4">
			<Primary>
				<KEY Information="Joystick R-Axis Z ">802</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_ELEV_TRIM_DN" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 3">2</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_ELEV_TRIM_UP" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 4">3</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_FLAPS_DECR" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 6">5</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_FLAPS_INCR" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 5">4</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_THROTTLE1_AXIS_SET_EX1" Flag="4">
			<Primary>
				<KEY Information="Joystick Slider X ">514</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_THROTTLE2_AXIS_SET_EX1" Flag="4">
			<Primary>
				<KEY Information="Joystick Slider X ">514</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_TOGGLE_FEATHER_SWITCHES" Flag="2">
			<Primary>
				<KEY Information="Joystick Button 8">7</KEY>
			</Primary>
		</Action>
	</Context>
	<Context ContextName="SLEW">
		<Action ActionName="KEY_AXIS_SLEW_AHEAD_SET" Flag="4">
			<Primary>
				<KEY Information="Joystick L-Axis Y ">1042</KEY>
			</Primary>
		</Action>
		<Action ActionName="KEY_AXIS_SLEW_SIDEWAYS_SET" Flag="4">
			<Primary>
				<KEY Information="Joystick L-Axis X ">1026</KEY>
			</Primary>
		</Action>
	</Context>
</Device>

4) FS2020 aircraft config files are still retaining the FSX force feedback settings

Asobo CAP10C gameplay.cfg file
[FORCEFEEDBACK]
ground_bumps_magnitude1 = 3000 ; 0 - 10000
ground_bumps_angle1 = 8900 ; 0 - 35999 degrees
ground_bumps_intercept1 = 4.0
ground_bumps_slope1 = 0.25
ground_bumps_magnitude2 = 350 ; 0 - 10000
ground_bumps_angle2 = 9100 ; 0 - 35999 degrees
ground_bumps_intercept2 = 0.075
ground_bumps_slope2 = 0.7
crash_magnitude1 = 10000 ; 0 - 10000
crash_direction1 = 01000 ; 0 - 35999 degrees
crash_magnitude2 = 10000 ; 0 - 10000
crash_direction2 = 9000 ; 0 - 35999 degrees
crash_period2 = 75000 ; in microseconds
crash_duration2 = 2500000 ; in microseconds

5) FS2020 is most likely not using DirectInput ForceFeedback API

I’m detailing a reason force feedback is not working and this might only be due because the game is no longer using the correct API for this: Force feedback support - #107 by CptLucky8

I might be wrong and this could just be a bug in FS2020, but it seems it might be just as simple as the game not using the correct API for this, and this might be just due because the Xbox version is not offering this API, but this latter part is just speculation of course, unless same code for both Xbox and PC means PC gamers are loosing PC only advantage in this case.

6) Supporting SWFFB2

With all this you can see that “supporting” a default SWFFB2 joystick profile shouldn’t be anything more than placing a default xml file in the input folder to get started with, along with the device image in the fs-base-ui\html_ui\Textures\Menu\Control folder.

From then, using the DirectInput FFB API in order to initialize a FFB effect using the existing settings already set in the gameplay.cfg is the only thing which seems preventing supporting FFB forces.*

Note to Asobo:

If you don’t have any Microsoft SideWinder Force Feedback 2 Joystick to test it all, I’ll be pleased to assist and help you. I believe you know how to reach me otherwise just leave me a PM here!


*NB: AFAIK FSX supported FFB and the code base using the settings found in the now gameplay.cfg file in order to init a FFB DirectInput Force Effect was already there too. Given FS2020 is using the FSX code base, Asobo has either removed this code or there is a bug preventing it to run. Either way, supporting FFB is not like recreating everything from scratch either because a lot of its foundations seems to be readily available.

5 Likes

You’re right, but that shouldn’t be so.
Why were joysticks more realistic 20 years ago?

I’ve seen several real-life pilots state that trimming an aircraft is much easier IRL than in a sim, since you can feel the forces on the yoke disappear.

1 Like

This is exactly the reason for the FF. The yoke supplies some of the feedback for how the plane is flying, especially the little single engines that can actually float down the side of a mountain.

It would be a simple driver update but MS, et al want more sales. Well, that is how they pay their developers. :wink:

But I have a bunch of 20+ year old peripherals that all work, CH pedals, throttle and yoke, etc. They all work fine. (Except the Microsoft default driver thinks my throttle is a joystick. Still works, though.)

Not more real. More gimmicky! I had one and it was just annoying. It was made for games like Crimson Sky. Arcade games.

The joystick was released in 1998…
I don’t think it would be unreasonable after 20 years to stop supporting the hardware…

2 Likes

@Djorous

Hopefully not! otherwise I won’t even be able to boot up my computer which BIOS still relies on these older 8086 opcodes to run :rofl:

Supporting the SWFFB2 in this case it not about supporting the joystick as a joystick, it is already supported as a joystick. Instead, it is about using the Windows API which are meant to create and use Force Feedback, and this is the only piece lacking in FS2020 despite everything readily available to supporting it.

I’ve tried to summarize everything I’m assuming about this question here:

Force feedback support - #230 by CptLucky8

2 Likes

Ok, I agree with the ffb support, I wasn’t aware that this was the root cause!

Regarding BIOS, isn’t this a bit different? We still rely on this ancient technology because we never moved away from it, so stop using it would render useless every single PC.

The ffb is cool, but it is not really required and we don’t have a lot of options available in the market.