DiRT 4 How to Save Controller Config in Dirt 4?

OK - so I finally figured out how to config things to use my wheel in Dirt4. But now I have another question:

Every time I re-start Dirt 4, I need to manually re-configure the controller inputs all over again. Obviously, this is a PITA! So exactly how do I save a controller configuration in order to re-load it upon start-up?

I've read on Steam discussions that if I assign a button on my wheel to get past the opening splash screen (instead of tapping "enter" of clicking the mouse button), that would open Dirt 4 with my wheel as controller. That would be a workable alternative, but I haven't figured out how to do that. Can someone explain exactly which input function in Dirt 4 to assign to a wheel button in order to accomplish this?

I find Dirt 4 to be lots of fun, but the console-based UI is frustrating!

Thanks!
 
Thank you for that link. I had not seen that post before. Here's what I've tried as suggested in that link:

No button on my wheel gets me past the "Press Start to Continue" prompt by default. :(

I've tried binding a wheel button to "Menu Start" in-game, but that doesn't work either. :(
I have NOT tried editing that .xml file yet, though. Can you clarify exactly what I should be changing in that file?

Finally, I would also like to try the last suggestion - copying an existing config, editing it, then saving it under a new name. Is that done in-game somehow? If so, I don't see how. If it's done by editing an .xml (or other type) file. Exactly what would I need to do?

Thanks!
 
Do you have a gamepad? Some people say that starting the game with their gamepad doesn't reset their wheel settings.


If you want to edit an existing file to introduce that keybind, you would probably need to edit input/actionmaps/direct_input_wheel.xml to do that.

If you want to copy one of the presets, you would probably first need to edit input/devices/device_defines.xml and add an entry with the hardware ID of your wheel. I don't think this is going to be easy, though.
 
Do you have a gamepad? Some people say that starting the game with their gamepad doesn't reset their wheel settings.


If you want to edit an existing file to introduce that keybind, you would probably need to edit input/actionmaps/direct_input_wheel.xml to do that.

If you want to copy one of the presets, you would probably first need to edit input/devices/device_defines.xml and add an entry with the hardware ID of your wheel. I don't think this is going to be easy, though.
No gamepad, unfortunately. In any event, I have no remaining USB ports available anyway.

Regarding editing of the file you mentioned - Do you have any suggestions as to what value(s) to change?

Thanks for all your help.

BTW - Merry Christmas!
 
I would need to look inside some of the files in input/actionmaps. Unfortunately I don't have the game installed anymore. Can you upload the files input/actionmaps/direct_input_wheel.xml and input/actionmaps/lg_g920.xml somewhere or post their content here?
 
direct_input_wheel.xml is:

<?xml version="1.0" encoding="utf-8"?>
<action_map name="direct_input_wheel" device_name="lib_direct_input_wheel" library="lib_direct_input" version="2" >
</action_map>


lg_g920.xml is:

<?xml version="1.0" encoding="utf-8"?>
<action_map name="lg_g920" device_name="lg_g920" library="lib_direct_input">
<group name="driving">
<action name="accelerate">
<axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
</action>
<action name="brake">
<axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
</action>
<action name="change_view">
<axis name="di_button_3" />
</action>
<action name="clutch">
<axis name="di_slider_0" type="negative" deadzone="0.2" saturation="0.6" />
</action>
<group name="gear">
<group name="h_pattern">
<action name="1">
<axis name="di_button_12" />
</action>
<action name="2">
<axis name="di_button_13" />
</action>
<action name="3">
<axis name="di_button_14" />
</action>
<action name="4">
<axis name="di_button_15" />
</action>
<action name="5">
<axis name="di_button_16" />
</action>
<action name="6">
<axis name="di_button_17" />
</action>
<action name="reverse">
<axis name="di_button_11" />
</action>
</group>
<group name="sequential">
<action name="up">
<axis name="di_button_4" />
</action>
<action name="down">
<axis name="di_button_5" />
</action>
</group>
</group>
<action name="handbrake">
<axis name="di_button_1" />
</action>
<action name="headlights">
<axis name="di_button_2" />
</action>
<group name="look">
<action name="back">
<axis name="di_button_9" />
</action>
<action name="left">
<axis name="di_dpad_0_left" />
</action>
<action name="right">
<axis name="di_dpad_0_right" />
</action>
</group>
<action name="pause">
<axis name="di_button_6" />
</action>
<action name="reset_vehicle">
<axis name="di_dpad_0_down" />
</action>
<action name="roadside_repair">
<axis name="di_dpad_0_up" />
</action>
<group name="steer">
<action name="left">
<axis name="di_x_axis" type="lower" deadzone="0.0" saturation="1.0" />
</action>
<action name="right">
<axis name="di_x_axis" type="upper" deadzone="0.0" saturation="1.0" />
</action>
</group>
<action name="wipers">
<axis name="di_button_0" />
</action>
</group>
<group name="school">
<action name="instructor_recap">
<axis name="di_dpad_0_up" />
</action>
</group>
<group name="menu">
<group name="button">
<action name="3">
<axis name="di_button_2" />
</action>
<action name="4">
<axis name="di_button_3" />
</action>
<action name="start">
<axis name="di_button_1" />
</action>
<action name="select">
<axis name="di_button_8" />
</action>
<group name="shoulder">
<action name="left">
<axis name="di_button_5" />
</action>
<action name="right">
<axis name="di_button_4" />
</action>
</group>
</group>
<group name="navigate">
<action name="back">
<axis name="di_button_1" />
</action>
<action name="down">
<axis name="di_dpad_0_down" />
</action>
<action name="left">
<axis name="di_dpad_0_left" />
</action>
<action name="right">
<axis name="di_dpad_0_right" />
</action>
<action name="select">
<axis name="di_button_0" />
</action>
<action name="up">
<axis name="di_dpad_0_up" />
</action>
<group name="scroll">
<action name="down">
<axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
</action>
<action name="up">
<axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
</action>
</group>
<action name="cancel_keybinding">
<axis name="di_button_6" />
</action>
</group>
</group>
<group name="replay">
<action name="exit">
<axis name="di_button_1" />
</action>
<action name="forward">
<axis name="di_x_axis" type="upper" deadzone="0.0" saturation="1.0" />
<axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
</action>
<action name="rewind">
<axis name="di_x_axis" type="lower" deadzone="0.0" saturation="1.0" />
<axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
</action>
<action name="playback_step_up">
<axis name="di_dpad_0_up" />
</action>
<action name="playback_step_down">
<axis name="di_dpad_0_down" />
</action>
<action name="pause">
<axis name="di_button_0" />
</action>
<group name="toggle">
<action name="music">
<axis name="di_button_3" />
</action>
<action name="ui">
<axis name="di_button_9" />
</action>
</group>
<group name="camera">
<action name="previous">
<axis name="di_button_5" />
</action>
<action name="next">
<axis name="di_button_4" />
</action>
</group>
</group>
<group name="network">
<group name="toggle">
<action name="voice">
<axis name="di_button_7" />
</action>
</group>
</group>
</action_map>

Thanks!
 
No idea whether this is going to work, but I would try replacing the contents of direct_input_wheel.xml with the following:

XML:
<?xml version="1.0" encoding="utf-8"?>
<action_map name="direct_input_wheel" device_name="lib_direct_input_wheel" library="lib_direct_input" version="2">
    <group name="menu">
        <group name="button">
            <action name="start">
                <axis name="di_button_1" />
            </action>
        </group>
    </group>
</action_map>

In theory, this should make it possible to load up the game by pressing one of the wheel buttons when prompted. You should simply try all of the buttons to see if it's working.
 
No idea whether this is going to work, but I would try replacing the contents of direct_input_wheel.xml with the following:

XML:
<?xml version="1.0" encoding="utf-8"?>
<action_map name="direct_input_wheel" device_name="lib_direct_input_wheel" library="lib_direct_input" version="2">
    <group name="menu">
        <group name="button">
            <action name="start">
                <axis name="di_button_1" />
            </action>
        </group>
    </group>
</action_map>

In theory, this should make it possible to load up the game by pressing one of the wheel buttons when prompted. You should simply try all of the buttons to see if it's working.
We're (aactually You're;)) making progress, but not fully "there" yet.

I replaced the contents of the file as you suggested, and now I can load up the game by pressing a button on the wheel. :)

Unfortunately, whenever I'm prompted to hit ENTER to "Continue" or "Skip" or "Go Back" within the game, neither the mouse nor any wheel button works on that. IOW, the only way to proceed to the next screen is to hit the appropriate key on the keyboard. And when I do that, I lose the wheel configuration all over again. :(

Any idea on how to get the wheel of mouse to work on those prompts?

Thanks! You've been a great help and appreciate you taking the time to try to solve this for me.
 
We could try binding the rest of the menu buttons to your wheel so you can control the menus with your wheel only. Your wheel should have a little joystick to move around the cursor, and you should be able to control the menu actions using the buttons with the labels of an Xbox gamepad.

XML:
<?xml version="1.0" encoding="utf-8"?>
<action_map name="direct_input_wheel" device_name="lib_direct_input_wheel" library="lib_direct_input" version="2">
    <group name="menu">
        <group name="button">
            <action name="3">
                <axis name="di_button_2" />
            </action>
            <action name="4">
                <axis name="di_button_3" />
            </action>
            <action name="start">
                <axis name="di_button_1" />
            </action>
            <action name="select">
                <axis name="di_button_8" />
            </action>
            <group name="shoulder">
                <action name="left">
                    <axis name="di_button_5" />
                </action>
                <action name="right">
                    <axis name="di_button_4" />
                </action>
            </group>
        </group>
        <group name="navigate">
            <action name="back">
                <axis name="di_button_1" />
            </action>
            <action name="down">
                <axis name="di_dpad_0_down" />
            </action>
            <action name="left">
                <axis name="di_dpad_0_left" />
            </action>
            <action name="right">
                <axis name="di_dpad_0_right" />
            </action>
            <action name="select">
                <axis name="di_button_0" />
            </action>
            <action name="up">
                <axis name="di_dpad_0_up" />
            </action>
            <group name="scroll">
                <action name="down">
                    <axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
                </action>
                <action name="up">
                    <axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
                </action>
            </group>
            <action name="cancel_keybinding">
                <axis name="di_button_6" />
            </action>
        </group>
    </group>
</action_map>
 
Thank you so much for this, Majuh. I think (hoping) that we're 99% there. I bound all the important functions to my wheel and had a successful "Joyride" session with the Mini to test things out. All functions that I bound to the wheel worked as they should!

But then, as a test, I backed out to Windows and started Dirt4 again. This time, although I could enter the game without using the keyboard, when I returned to "Joyride" to test if my assigned bindings "stuck", neither steering nor sequential gearing (ie - paddle shifters) worked anymore. :( However, the button functions on the wheel still worked.

FWIW, IIRC, at no time did I touch the keyboard while in Dirt 4 or between Dirt 4 sessions.

I'm no programmer like you, but it seems like the last file you provided just needs some kind of tweak in order to not lose the wheel's driving functionality.

Thanks again for all your help with this!
 
In this case, I would try simply defining default keybinds for all actions in the game as in the default Logitech G920 profile. This way, you probably don't even need to define any keybinds ingame as it is all done in direct_input_wheel.xml.

XML:
<?xml version="1.0" encoding="utf-8"?>
<action_map name="direct_input_wheel" device_name="lib_direct_input_wheel" library="lib_direct_input" version="2">
    <group name="driving">
        <action name="accelerate">
            <axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
        </action>
        <action name="brake">
            <axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
        </action>
        <action name="change_view">
            <axis name="di_button_3" />
        </action>
        <action name="clutch">
            <axis name="di_slider_0" type="negative" deadzone="0.2" saturation="0.6" />
        </action>
        <group name="gear">
            <group name="h_pattern">
                <action name="1">
                    <axis name="di_button_12" />
                </action>
                <action name="2">
                    <axis name="di_button_13" />
                </action>
                <action name="3">
                    <axis name="di_button_14" />
                </action>
                <action name="4">
                    <axis name="di_button_15" />
                </action>
                <action name="5">
                    <axis name="di_button_16" />
                </action>
                <action name="6">
                    <axis name="di_button_17" />
                </action>
                <action name="reverse">
                    <axis name="di_button_11" />
                </action>
            </group>
            <group name="sequential">
                <action name="up">
                    <axis name="di_button_4" />
                </action>
                <action name="down">
                    <axis name="di_button_5" />
                </action>
            </group>
        </group>
        <action name="handbrake">
            <axis name="di_button_1" />
        </action>
        <action name="headlights">
            <axis name="di_button_2" />
        </action>
        <group name="look">
            <action name="back">
                <axis name="di_button_9" />
            </action>
            <action name="left">
                <axis name="di_dpad_0_left" />
            </action>
            <action name="right">
                <axis name="di_dpad_0_right" />
            </action>
        </group>
        <action name="pause">
            <axis name="di_button_6" />
        </action>
        <action name="reset_vehicle">
            <axis name="di_dpad_0_down" />
        </action>
        <action name="roadside_repair">
            <axis name="di_dpad_0_up" />
        </action>
        <group name="steer">
            <action name="left">
                <axis name="di_x_axis" type="lower" deadzone="0.0" saturation="1.0" />
            </action>
            <action name="right">
                <axis name="di_x_axis" type="upper" deadzone="0.0" saturation="1.0" />
            </action>
        </group>
        <action name="wipers">
            <axis name="di_button_0" />
        </action>
    </group>
    <group name="school">
        <action name="instructor_recap">
            <axis name="di_dpad_0_up" />
        </action>
    </group>
    <group name="menu">
        <group name="button">
            <action name="3">
                <axis name="di_button_2" />
            </action>
            <action name="4">
                <axis name="di_button_3" />
            </action>
            <action name="start">
                <axis name="di_button_1" />
            </action>
            <action name="select">
                <axis name="di_button_8" />
            </action>
            <group name="shoulder">
                <action name="left">
                    <axis name="di_button_5" />
                </action>
                <action name="right">
                    <axis name="di_button_4" />
                </action>
            </group>
        </group>
        <group name="navigate">
            <action name="back">
                <axis name="di_button_1" />
            </action>
            <action name="down">
                <axis name="di_dpad_0_down" />
            </action>
            <action name="left">
                <axis name="di_dpad_0_left" />
            </action>
            <action name="right">
                <axis name="di_dpad_0_right" />
            </action>
            <action name="select">
                <axis name="di_button_0" />
            </action>
            <action name="up">
                <axis name="di_dpad_0_up" />
            </action>
            <group name="scroll">
                <action name="down">
                    <axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
                </action>
                <action name="up">
                    <axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
                </action>
            </group>
            <action name="cancel_keybinding">
                <axis name="di_button_6" />
            </action>
        </group>
    </group>
    <group name="replay">
        <action name="exit">
            <axis name="di_button_1" />
        </action>
        <action name="forward">
            <axis name="di_x_axis" type="upper" deadzone="0.0" saturation="1.0" />
            <axis name="di_y_axis" type="negative" deadzone="0.0" saturation="1.0" />
        </action>
        <action name="rewind">
            <axis name="di_x_axis" type="lower" deadzone="0.0" saturation="1.0" />
            <axis name="di_z_axis_rotation" type="negative" deadzone="0.0" saturation="1.0" />
        </action>
        <action name="playback_step_up">
            <axis name="di_dpad_0_up" />
        </action>
        <action name="playback_step_down">
            <axis name="di_dpad_0_down" />
        </action>
        <action name="pause">
            <axis name="di_button_0" />
        </action>
        <group name="toggle">
            <action name="music">
                <axis name="di_button_3" />
            </action>
            <action name="ui">
                <axis name="di_button_9" />
            </action>
        </group>
        <group name="camera">
            <action name="previous">
                <axis name="di_button_5" />
            </action>
            <action name="next">
                <axis name="di_button_4" />
            </action>
        </group>
    </group>
    <group name="network">
        <group name="toggle">
            <action name="voice">
                <axis name="di_button_7" />
            </action>
        </group>
    </group>
</action_map>
 
Majuh, You are a genius, my friend! That latest file you provided works 99.9 percent perfectly for me.

The only remaining little niggles are:

1. that I still can't save my preferred FF and vibration settings as defaults to re-use later - I need to reset them to where I want them every time I start the game, and,

2. same thing with the few default bindings that I prefer changed (like look left/right). They always reset to the G920 defaults when re-starting the game.

Otherwise all seems to working fine.

Dirt 4 is finally usable for me!

Thanks so much!
 
Majuh, You are a genius, my friend! That latest file you provided works 99.9 percent perfectly for me.

The only remaining little niggles are:

1. that I still can't save my preferred FF and vibration settings as defaults to re-use later - I need to reset them to where I want them every time I start the game, and,

2. same thing with the few default bindings that I prefer changed (like look left/right). They always reset to the G920 defaults when re-starting the game.

Otherwise all seems to working fine.

Dirt 4 is finally usable for me!

Thanks so much!
I guess I can't help you with your Force Feedback settings because the default values aren't stored in these .xml files.

Regarding the default bindings, you could directly change those bindings in direct_input_wheel.xml. As you can see, there's a group called "look" containing two actions called "left" and "right". If you want to change these mappings, you would simply need to replace their values "di_dpad_0_left" and "di_dpad_0_right" with other button names.
 
Back
Top