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.
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 .
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:
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.
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.
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.
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.
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âŠ
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
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:
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.
I think it worth mentioning, when we all go dewy eyed about force feedback in FSX, that the native offering was crap. Now, when you added FS Force, it was a different thing altogether and truly excellent. Russ Dirks, the developer of this addon has stated that for the moment at least and because of the limitations mandated because of MSFS as it stands, that he can not currently achieve that same level of functionality and usability.
What I am saying, is that it took time to get there with FSX and providing that we can all keep applying sufficient pressure on Asobo, that one day we will get there with MSFS too. Donât give up on this everyone. Force feedback is such a fundamental and radical improvement of the simulator, that with it and an awakening from hardware suppliers, that we can have something truly fantastic and for hopefully another twenty years too.
If you remove the âgoodiesâ from the question (bumps on the ground, shaker, etcâŠ) the only real thing left which is the base, is just to applying a force on the joystick which is proportional to the force on the virtual yoke.
I donât believe there are many things to consider and I fail to find how could you really mess it all though because in the end, what remains is applying lateral and longitudinal forces to the joystick:
-
for yokes with direct cable links to the ailerons/elevators, use the actual force/pressure of the air on the surfaces. Consider any dropping elevator as well as exercising a force on the yoke.
-
for hydraulic yokes, apply the maximum force minus the hydraulic pressure assistance.
-
for FBW yokes, apply a spring/dampener type of force
The key factor for the 1st one which is missing in the SDK is getting the actual force of the air on the surfaces. This is readily avail in XP11 but not in FS2020. But these values are intrinsic to the flight model engine and they could be used directly should the FFB support was integral to the game. I believe in just using these there is no particular code to do for handling trimming either: youâre either opposing a force or not when moving the yoke.
For the other types of yokes it is easier to do even in just using the SDK.
Wow! Stay away from Logitech/Saitek X56!!! It is filled with hardware design defects! It loses its alignment about half the times the PC is restarted (from shut down or sleep, doesnât matter). Also, the random ghost keypresses on the throttle quadrant makes almost all of its buttons unusable.
@Jubartek , I feel your pain. I had the Sidewinder 3D and the Force Feedback 1, also a quite expensive webcam from Microsoft. When all these products had its support ended in Windows (but not in Linux ) I swore myself to never buy another Microsoft hardware ever again.
I want force feedback as much as the next day, primarily for being able to properly trim GA planes. But other forces, if implemented correctly, would be great (and IMO pretty necessary) too. That said, weâre talking about computer hardware here. This particular joystick is 2 decades old. In a world where 3 years is a long time, 2 decades may as well be an eternity.
So force feedback has my vote. But not on an ancient piece of gear. And donât even bother if it canât be done RIGHT.
Kev