Skip to content
This repository has been archived by the owner on Jan 1, 2024. It is now read-only.

Settings

Travis Nickles edited this page Apr 11, 2021 · 40 revisions

Virtual controller type

Controller

DS4Windows application can read input from an official Sony DS4 gamepad controllers plus from several 3rd party DS4 compatible gamepads, run through inputs via re-mapping and macro rules defined in a profile and then output the result to a virtual gamepad controller device (or into keyboard and mouse event queues if those options are used in re-mapping rules). Games would see button and analog axis movements through this virtual output gamepad device.

Profile can set the type of virtual output device using "Controller" option. The default type of the virtual output gamepad device is xbox360 controller, because most games on Windows support this xinput device. If a game supports DS4 gamepad then you can alternatively set the output device type as dualshock4.

Controller: xbox360 or DualShock4

Axis Zone Mapping

Deadzone

A deadzone represents the region of an axis that should be considered as having zero output. Having a deadzone in place will better ensure that there is no accidental output value generated by having your finger at rest on an analog stick or trigger and no accidental output value is generated from an axis that does not return to the absolute resting position. This is especially important if you re-map an analog LS or RS axis to digital buttons (for example D-pad buttons). A digital button is either on or off, so having a deadzone in LS/RS analog axis makes sure that an analog axis drifting is not constantly converted as digital button event. Some controllers may require bigger deadzone than others because of hardware differences.

LS: 0.09
RS: 0.09
L2: 0.30
R2: 0.30

Anti-Deadzone

An anti-deadzone acts as an offset for use with an axis to denote the minimum output value generated after an axis has left its assigned deadzone. This is mainly meant to help with mapping an axis to the assigned deadzone value used for an axis in a video game. For example, the typical assigned deadzone for XInput LS in a video game is around 8000 (25%). With no anti-deadzone assigned, an axis would have to move past the assigned deadzone in DS4Windows along with the game's assigned axis deadzone.

LS: 0.25
RS: 0.25
L2: 0.00
R2: 0.00

Maxzone

A maxzone denotes how far an axis will have to travel before the maximum output value will be generated. This setting mainly helps with older controllers as an axis might not be able to reach its maximum output value as an axis gets worn out with use. This setting can also help if you would like to reduce the amount of travel required to reach the maximum axis value.

LS: 1.00
RS: 1.00
L2: 1.00
R2: 1.00

Max Output

In some situations, it might be useful to limit the maximum value that is output by the output analog stick. Max Output allows throttling the final output value of the analog stick. The default is 1.00.

LS: 1.00
RS: 1.00

Vertical Scale

Allows scaling the vertical output (Y axis) of the analog stick compared to the value of the X axis. It an be useful depending on POV settings in a game. It can also be useful when mapping an analog stick to Mouse Controls and you want to have a different vertical mouse speed. The default is 1.00.

LS: 1.00
RS: 1.00

Rotation

The rotation setting is meant to help correct the orientation of an analog stick if your thumb is slightly shifted when moving an analog stick. For example, your thumb might be slightly shifted from center when the analog stick is moved fully north. My thumbs shift slightly to the right when moving an analog stick fully north due to the way my hands grip the DS4. The value used denotes the number of degrees used to adjust the final axis output value.

LS: -4
RS: 4

Output Curve

You can assign an output curve to LS/RS/L2/R2/SA axies when the normal linear curve doesn't work well in some use cases. This is especially useful if LS/RS stick is used to emulate a mouse because the normal linear output curve doesn't give a "mouse like feeling" or precision. Predefined enhanced precision output curve works well when a stick is used as a mouse.

Custom output curve is useful when you need, for example, more accurate aiming precision in a game and the default linear curve is too fast in the beginning of the curve. The custom output curve option lets you to tweak the curve to feel better.

DS4Windows supports following output curve options:

Linear: The normal default output curve.
Enhanced Precision: Slower output curve in the beginning, but gets faster towards the end of the curve.
Quadratic: Slow easein curve (easein quadratic).
Cubic: Very slow easein curve (easein cubic).
Easeout quad: Fast in, but the curve gets slower towards the end of the curve.
Easeout cubic: Very fast in, but slow easeout.
Custom: User customized output curve (a graphical web app to draw the curve)

The custom option uses bezier curve to tweak the output curve. In practice bezier curve supports both easein and easeout curves (or both at the same time). Custom output curve web app

To some degree it is possible to achieve similar results just using the custom output curve setting than using dead-zone, sensitivity and max zone settings together to tweak the output curve of an analog axis.

Square Stick

Normally when LS/RS stick is fully extended to one direction (N/S/E/W compass directions) and you start to move move the stick along the vertical or horizontal axis side ways (NW/NE/SW/NE compass directions) the output value of LS/RS stick follows an arc curve. This means that the 1.0 output value of the axis starts to move slightly towards 0.0 value. This might be an issue especially in games where LS/RS stick is re-mapped as digital d-pad keys. You can tweak how DS4Windows smooths out the output value of LS/RS stick corners by tweaking Square Stick setting and 0..5 roundness value. The following post has pictures explaining this better than words can do. Square Stick - Roundness option value

Fuzz

Fuzz specifies the minimum number of units the analog stick moves before the output is registered as changed in the mapper. This setting can be useful for worn sticks that cannot maintain a constant position. The value is expressed in raw stick units. The default value is 0 units.

LS: 0
RS: 0

Sensitivity

LS: 1.00
RS: 1.00
L2: 1.00
R2: 1.00
Sixaxis X: 1.00
Sixaxis Z: 1.00

Two Stage Triggers

Utilizing Two Stage Triggers allows two actions to be bound to the L2 or R2 trigger. When using Two Stage Triggers, one Soft Pull action will be bound for most of the trigger and a Full Pull action can be bound when the trigger hits its maximum value. There are several different modes of operation for how the two zones behave.

Two Stage Modes

Disabled

Disables use of Two Stage Triggers. Only bind one action to L2 or R2

Normal

Normal (simple) Two Stage Trigger activation. Activates Soft Pull action when under maximum output. Activates Full Pull action as well when trigger reaches maximum value.

Exclusive

Activates Soft Pull action when under maximum output. When trigger reaches maximum output, deactivate Soft Pull action and then activate Full Pull action

Hair Trigger

Similar to Normal Two Stage Trigger mode with one difference. Activates Soft Pull action when under maximum output. Activates Full Pull action as well when trigger reaches maximum value. When the trigger is partially released from Full Pull, both Full Pull and Soft Pull actions deactivate. Activating Full Pull action will activate the Soft Pull again as well.

Hip Fire

Takes the Hip Fire Delay time into account. The trigger will not activate an action until the time has expired. Once the time has expired, the current action for the trigger output will be determined. This mode allows skipping the activation of Soft Pull and only firing a Full Pull action.

Hip Fire Exclusive

Similar to Hip Fire mode. The main difference is only one action will ever be activated.

Gyro As Mouse

One new way to control the camera in a game is to use the gyroscope built into the DS4 as opposed to the traditional approach of using the right analog stick. You would tilt the controller in the direction you want the camera to move and the camera would stop panning once you stop moving the controller. This allows the DS4 to behave like a typical relative mouse and it allows for faster mouse movement than emulating a relative mouse with an analog stick. The main problem is that the orientation of your hands matters and you will occasionally have to move your hands back to a comfortable resting position; this is similar to picking up your mouse to move it back to a center position.

Triggers: L1
Trigger Behavior - Turns Gyro: Off
Gyro Sensitivity: 100
Vertical Scale: 100%
X Axis: Yaw
Invert X: Off
Invert Y: Off
Smoothing: On
Smooth Weight: 0.500

Gyro Mouse Joystick

Mouse Joystick is an output type for the gyro that is useful for games that do not allow simultaneous XInput + mouse input. Using that output mode, the gyro will be mapped to the Xbox 360 Right Stick but it will fake relative motion to mimic mouse control. Although not as precise as Gyro Mouse, Mouse Joystick works pretty well for games that only work well with a controller. The sensitivity of the stick can be customized along with the minimum output of the right stick that will be seen by the game. It will also be necessary to increase the stick/camera sensitivity in game to minimize controller rotation.

Triggers: L1
Trigger Behavior - Turns Gyro: Off
Dead Zone: 30
Max Zone: 830
Minimum X: 0.40
Minimum Y: 0.40
Vertical Scale: 100%
X Axis: Yaw
Invert X: Off
Invert Y: Off
Smoothing: Off
Smooth Weight: 0.500

Other settings

Mouse Sensitivity

This setting is only useful when using an analog stick to emulate a mouse. This can be used in a fully KB+M profile or in a mixed XInput + Mouse profile.

Mouse sensitivity: 34

Enable Touchpad Toggle

If you have enabled the "touchpad - Use as mouse" option and you have this "enable touchpad toggle" option enabled then you can use "PS" DS4 button to temporarily disable and enable the touchpad mouse functionality (toggle on/off).

Use DInput only

When using a fully KB+M configuration in a profile, you can enable Use DInput only option. When this option is enabled then DS4Windows app won't create a virtual output controller. Games can use the native physical DS4 controller directly and DS4Windows app will output only keyboard and mouse related key mappings (ie. DS4Windows app won't do any gamepad key re-maps with LS/RS/Triangle/Cross/Square/outputCurves and so on). If you want to use any of those DS4 controller key remaps or LS/RS output curve modifiers then this option should be disabled (=unchecked) because the virtual output device is required to do those fancy DS4 key/stick output modifications on the fly.

If you use "Hide DS4 Controller" option or HidGuardian tool to hide the physical DS4 controller from games then do not enable this option because then you would not have any gamepad controllers (the physical gamepad controller is hidden but because this option is enabled DS4Windows app won't open a virtual gamepad controller either).

Steering Wheel

Using the accelerometer built into the DS4, it is possible to play racing and other driving games by holding the DS4 so the lightbar is pointing up towards the ceiling and tilting the DS4 to each side like it were a steering wheel. There are nowadays actually two ways to use DS4 and DS4Windows app as a steering wheel.

Steering wheel option 1 Map sixaxis X tilting as a left or right stick. Following settings have been found that get the experience pretty close though. These settings have been tested in the game DiRT Showdown. You can use, for example, left stick X axis (LX) as an output axis. In that case remember to unmap the default mapping of LX axis to avoid conflicting values (or set big enough deadzone to LX to avoid it double feeding the output axis).

However, using raw values of tilting sensor directly is very limited in turn range and in precision, so this option may not be very useful with serious racing games. Nowadays there is a better way to do this (see steering wheel option 2).

Sixaxis X Deadzone: 0.03
Sixaxis X Anti-Deadzone: 0.41
Sixaxis X Max Zone: 0.72

Steering wheel option 2 DS4Windows application has a new "steering wheel emulation" configuration option which is specifically meant to be used as a steering wheel alternative. It gives much greater precision and supports 90/180/270/360/520/720/900 steering wheel turn ranges. This option can be enabled in options screen per profile and each controller is calibrated to increase precision. Use DS4Windows options screen and "Calibrate" button to calibrate a new DS4 controller (need to do only once with a new DS4 controller).

While calibrating a controller, set the wheel center point first and then 90deg left and finally 90deg right positions (all 3 calibration points required). You must keep the controller steady while setting each of those calibration points. Sometimes it may be a bit hard to keep the controller steady and consistent enough with "free hands in the middle of the air". This is why do-it-yourself steering wheel rig is recommended to get the best "steering wheel" like immersion and precision (DIY steering wheel rig.

Please note that the steering wheel option 2 doesn't require you to unmap the default behavior of an output axis because this feature overrides the default behavior of an output axis anyway.

If a game supports more than one controller then you can install a VJoy virtual joystick driver and send steering wheel output values to a VJoy axis also. This would leave all DS4 analog axies for normal usage because SA steering wheel emulation would not reserve any of the existing DS4/x360 axies.

This feature works best with do-it-yourself rig for a DS4 Controller. Sixaxis sensor values are more consistent with a calibrated values and "a steering wheel" immersion is much better when DS4 controller is attached to a rig like a "real steering wheel". See following link for example pictures of a cardboard DIY rig. When you have stopped laughing then go ahead and try it. The rig, DS4 controller and DS4Windows steering wheel emulation feature works surprisingly well even in serious racing games. Details of steering wheel emulation

Steering wheel emulation axis: None/LX/LY/RX/RY/R2+L2/vJoyX/vJoyY/vJoyZ output axis
Steering wheel range: 90/180/360/720/900/etc

Sixaxis X Deadzone: 0.00 (or use 0.02 or 0.03 if deadzone is really needed in DS4Win driver level. If game supports customizable deadzone range then it may be better to set SA x deadzone to 0 in DS4Win and use the in-game setting).
Sixaxis X Anti-Deadzone: 0.00  (if a game has built-in fixed deadzone then proper value here depends on the game). 

Steering wheel emulation axis: Default value is None (=feature disabled). LX=Left stick X axis. LY=Left stick Y axis. R2+L2 is a combined left and right analog trigger axis. VJoy axies require installation of VJoy virtual joystick driver (see the vJoyInterface web link for vJoy installation tips).

Steering wheel range: Default value is 360 degrees (ie. -180 degrees left and +180 degrees right turn range from the calibrated center point, total range 360). 360 or more range is good for EuroTruckSimulator/AmericanTruckSimulator/FarmingSimulator type of games with a slow pace. More arcade type of racing games might work better with 180 range because you probably don't have time to keep spinning steering wheel several rounds during a high speed chicane. Steering wheel emulation works with rumble/forcefeedback games also, but because of DS4 hardware issues rumble motor may affect the gyro sensor results while the gamepad is shaking a lot. It may be good idea to tune down the intensity of a rumble or to disable it completely (via rumble value in DS4Windows profile or via game specific settings).

Steering wheel axis anti-deadzone: If a game was originally made for analog sticks of a gamepad controllers then the game probably has quite a big built-in deadzone. If the game supports steering wheel settings then you probably can customize deadzone value within the game and set it even down to zero, so anti-deadzone setting in DS4Win app is not needed (set it to 0.00). However, analog sticks are "unstable" in a hardware level and resting a thumb on a stick generates slight movement all the time, so especially arcade type of racing games often have built-in deadzone for analog sticks. DIY rig and the steering wheel emulation in DS4Win app on the other hand is more precise and capable of doing small movements around the "dead center" position. Therefore, if a racing game has a built-in fixed deadzone then you might wanna eliminate it via sixaxis X anti-deadzone setting in DS4Win profile editor. The optimal value varies between games, but start with sixaxis X anti-deadzone 0.10 value and see if a car in the game turns better when you turn the "DIY steering wheel" just few degrees left and right. If you feel that there is still a deadzone gap in the game until the car actually starts to turn then increase the anti-deadzone value until you feel that there is no more unnecessary deadzone gap within the game. If you feel that the car starts to turn too much even when you turn a steering wheel just few degrees then try to decrease the sixaxis X anti-deadzone value.

Macros and Special Actions

DS4Windows app has a special actions functionality where a gamepad key or keys can be linked to a certain special action. The special action can run macros, load profiles, launch external programs and so on.

Special action "Record macro" (=run a macro) options

  • Scan code = Sends out keyboard key events using Windows scan code values (sometimes this works better than using ascii key codes).
  • Run on trigger release = The special action macro is NOT run when a trigger key was pressed down. The macro is run when the trigger key is released.
  • Synchronized run = DS4Windows allows to have multiple macros to use the same trigger key. For example one macro could be as a normal key down macro and other macro as a "run on trigger release" macro. In this scenario it is often required that the key down macro is completed before the key release macro is run. If these two macros don't have "synchronized run" option then those macros may run interleaved if the trigger key was pressed and immediately released (ie. key release macro is fired already before the key down macro was completed). Synchronized option makes sure that previous macro is completed before the next macro is run for the same trigger key (FirstIn-FirstOut order of macros).
  • Keep key state = By default macro resets all keys used in a macro back to their default state when a macro is completed. If macro doesn't explicitly send key up event then DS4Windows will do it automatically. If this "keep key state" option is set then DS4Windows won't automatically reset key states, so if a macro leaves a key state in down state then it continues to be in that state until you press that key to generate a key up event.
  • Repeat while held = Macro is automatically repeated as long the trigger key is held down.

How to do "auto-fire" type of trigger button using a special action?

Auto-fire trigger in this context means that you keep holding a trigger key down and DS4Windows application will automatically send out periodic key down/key up/key down/key up events to a game as long you keep holding down the trigger key.

DS4Windows V1.7.16+ version supports new options in "Record Macro" (=run macro) special action which makes it easy to implement auto-fire type of macro. Earlier versions of DS4Windows made this possible only via macros defined via keybord/gamepad key mapping table. See following issue post for more info about this kind of solution: https://github.com/Ryochan7/DS4Windows/issues/678

If you want to do this via special actions then in V1.7.16+ version you can do it like this:

  • Define a special action with type of "Record Macro" and select for example "Cross" key as trigger key.
  • Record a macro with "record delays" option and record one key down and key up event using a gamepad key you want to auto-fire.
  • Modify delays between key down and key up events to something you want to have as a rate of auto-firing (for example 40 ms). Make sure there is a delay after the key up event also because otherwise the next key down event would be fired too fast (see the picture).
  • Choose "Repeat while held" option in a special action options.
  • Note! If you use the same gamepad key both as an auto-fired macro key and as a trigger key then you have to unbind the regular key rule from the trigger key and let only the macro to drive the status of that key. SpecAction_AutoFireGamepadKey

How to change a profile on the fly via a certain gamepad button using a special action?

  • DS4Windows application supports a general "Swipe touchpad to change profile" option. However, it cycles through all profiles. You cannot define which profiles are cycled through. Also, using touchpad for mouse and swipe to change profiles may be a bit difficult because of DS4Windows app may sometimes detect the swipe as "mouse movement" event.
  • To load a certain profile you can create a special action with a type of "Load profile" and then bind a certain gamepad key (or multiple keys) to that action.
  • Load Profile -special action supports three operating modes:
  • Mode 1: Trigger+Untrigger key defined (trigger and untrigger keys can be the same or different keys): Pressing the trigger will load the specified profile. This profile remains active until you press the untrigger key to unload the loaded profile and go back to default profile. You cannot change to yet-another profile until you press untrigger key.
  • Mode 2: Only trigger key defined (ie. untrigger undefined): Pressing the trigger key will load the specified profile. This profile remains active, but if the new profile has another load profile special action defined then you can move on to that profile by pressing the trigger key (the trigger key of the another special action can be the same as in the previous special action). This allows you to link unlimited number of certain profiles to a gamepad key and each time you press the key DS4Windows app will move on to the next profile. Until "the last profile" loads the first profile again and the profile sequence starts again from the beginning. Tip. Each profile may have a different lightbar color to indicate which profile is active.
  • Mode 3: Only trigger key defined and "unload on trigger release" option checked. Pressing the trigger key will load the specified profile. The profile remains active until you release the trigger key (ie. profile is automatically unloaded when the trigger key is released and goes back to previous profile). This mode is a bit like "shift modifier" for the whole profile instead of key specific shift modifier. For example you could have a profile-A while moving around and another profile-B when you need to occasionally aim in a game. This mode 3 allows you to quickly switch between profiles.

UDP Server

DS4Windows application has a built-in UDP server which various applications (CemuHook, PadTest) can use to read gamepad status and feed gamepad events. By default this is disabled, but if you enable it then you can define optional listen address of the UDP Server and UDP port number. The default address is 127.0.0.1 which allows only local host connections (no remote incoming connections allowed). Other addresses allow remote incoming connections, but use those only if you can trust your network or secure the UDP server and port address using a VPN tunnel (PC or network router vpn tool).

UDP Server 127.0.0.1 (default, localhost only, no remote connections)
           0.0.0.0 (all ipv4 interfaces, remote connections allowed)
           specific IP address (ipv4 interface to listen incoming connections, remote connections allowed) 
UDP Port 26760