Rexeh / joystick-diagrams

Automatically output your tool/game HID configs into printable diagrams with all your binds.
https://joystick-diagrams.com
GNU General Public License v2.0
146 stars 23 forks source link

Add Support for FS 2020 #8

Open Rexeh opened 3 years ago

Rexeh commented 3 years ago

Request was made to add Flight Simulator 2020 support.

Things to do:

mike8234 commented 3 years ago

Here is the file where MSFS saves my controller profile I setup for a VKB NXT joystick. This is the folder location where it is saved: C:\Users\mike7\AppData\Local\Packages\Microsoft.FlightSimulator_8wekyb3d8bbwe\SystemAppData\wgs\000901FD59FE6970_00000000000000000000000069F80140\18369854760447D595E7B004774F8C04 If you have other devices such as a throttle device, they are stored one directory above the one listed above, each device gets its own folder. In each device folder the file with the long name of numbers seems to be the mapping, and there is also a file named container.XX which I'm not sure what it is for. MSFSmap.zip

twitchd8 commented 8 months ago

Interesting... I opened the File you attached, called 8EB8B7BC38BF4767AE5D694AB3A7F5EB in notepad++, and it's actually an XML file...

<?xml version="1.0" encoding="UTF-8"?>
<Version Num="1546"/>
<FriendlyName>VKB NXT - [Standard]</FriendlyName>
<Device DeviceName=" VKB-Sim Gladiator NXT R  " GUID="{57762A10-988B-11EB-8001-444553540000}" ProductID="512">
    <Axes>
        <Axis AxisName="X" AxisSensitivy="-50" AxisSensitivyMinus="-50" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="Y" AxisSensitivy="-49" AxisSensitivyMinus="-50" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="Z" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="rX" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="rY" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="rZ" AxisSensitivy="-50" AxisSensitivyMinus="-50" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="SliderX" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
        <Axis AxisName="SliderY" AxisSensitivy="0" AxisSensitivyMinus="0" AxisNeutral="0" AxisDeadZone="0" AxisOutDeadZone="0" AxisResponseRate="-1"/>
    </Axes>
    <Context ContextName="PLANE">
        <Action ActionName="KEY_GEAR_TOGGLE" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 3">2</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_BRAKES" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 1">0</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_SPOILERS_TOGGLE" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 5">4</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_ELEV_TRIM_DN" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 23">22</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_ELEV_TRIM_UP" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 24">23</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_PARKING_BRAKES" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 1">0</KEY>
                <KEY Information="Joystick Button 2">1</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_FLAPS_INCR" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 13">12</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_FLAPS_DECR" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 11">10</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_AILERONS_SET" Flag="4">
            <Primary>
                <KEY Information="Joystick L-Axis X ">1026</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_AILERON_TRIM_LEFT" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 28">27</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_AILERON_TRIM_RIGHT" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 29">28</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_AILERON_TRIM_DISABLED_TOGGLE" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 27">26</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_ELEVATOR_TRIM_DISABLED_SET" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 4">3</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_THROTTLE1_AXIS_SET_EX1" Flag="4">
            <Primary>
                <KEY Information="Joystick L-Axis Z ">1058</KEY>
            </Primary>
        </Action>
    </Context>
    <Context ContextName="MODES">
        <Action ActionName="KEY_COCKPIT_RESET" Flag="2">
            <Primary>
                <KEY Information="Joystick Button 15">14</KEY>
            </Primary>
        </Action>
    </Context>
    <Context ContextName="COCKPIT_GLOBAL_CAMERA">
        <Action ActionName="KEY_COCKPIT_FREELOOK_VRTC_SET" Flag="4">
            <Primary>
                <KEY Information="Joystick R-Axis Y ">786</KEY>
            </Primary>
        </Action>
        <Action ActionName="KEY_COCKPIT_FREELOOK_HRZ_SET" Flag="132">
            <Primary>
                <KEY Information="Joystick R-Axis X ">770</KEY>
            </Primary>
        </Action>
    </Context>
</Device>
Rexeh commented 8 months ago

Thanks @twitchd8 if that is the case then it will be easy to add support in the next version.

Do you know the significance of the key values for each action? In the one below 770

<KEY Information="Joystick R-Axis X ">770</KEY>

Update These seem insignificant on second look. All but buttons can be parsed from the information item, the button will be "value" as appears to be the "real" number, string value is offset1 (or could be flipped but not a major issue to fix)

Hardest part here is navigating users to that awful folder structure!

With the plugin system now live, anyone can pick this up.

Rexeh commented 5 months ago

Rough POC of this is now almost completed, will be on the hunt for testers before release.

Some nuances exist which cannot be modelled in Joystick Diagrams, such as X+ X-, the software does not split these distinctions nor many of the games I've looked at. As such these instances will be merged into something like X+ Action | X- Action for X AXIS out in diagrams.

Rexeh commented 5 months ago

Version working with modifiers, a fair bit of testing will be required as some assumptions have had to be made such as single POV only being supported. I lack the test cases to verify the behaviour with multi POV as no numbering is given in single POV configs.

image