For Game Developers
Playing PC games with DualSenseX is like using preset or simulated effects and general trigger vibrations. The game itself does not control these effects; they are mostly emulated or generic behaviors.
In actuality, your game doesn’t know what your controller is doing. It only sees basic inputs, such as button presses. Every trigger effect, including vibration and resistance, is handled outside the game, which is why it never feels truly connected.
If you are a game developer, modder, or even an advanced PC user, why not make your game communicate directly with DualSenseX instead of simply plugging in a controller? This is called real in-game integration, and that’s exactly what this guide is all about.
After integration, your game can control the controller in real time. When you shoot, the trigger can become harder. When you drive, it feels more natural, and during intense moments, the controller reacts instantly. These are no longer random effects; they are fully connected to what’s happening inside your game.
That’s the real purpose of this guide.

Two Ways to Integrate: Text File vs UDP Compared
There are two methods to integrate your game with DualSenseX (DSX). Before we explain both methods, let’s quickly compare them to understand which one is right for your game.
| Text File Method | UDP Method |
|---|---|
| ● Simplest to set up | ● Requires basic networking code |
| ● Works 100% with Bluetooth connection | ● Better for real-time trigger changes |
| ● Extra blank lines increase read delay | ● Faster, lower latency than a text file |
| ● No networking knowledge needed | ● The port file must exist. DSX doesn’t always create it |
Method 1) Text File Integration: Full Setup

Your game writes trigger states to a plain .txt file. DSX reads it continuously and sends the appropriate signal to the controller. Here are all the parameters that the text file can contain:
This text is case-sensitive, which means a slight change in letters, such as writing “lefttrigger” instead of “LeftTrigger,” will not work. Moreover, avoid leaving blank lines or extra spaces in the file because this can cause delays in reading. However, you can use extra lines or spaces if you want to create a delay on purpose.
After defining the parameters, the next step is to choose the trigger state that will be assigned to each parameter. Here are all 19 of them:
All Trigger State Possibilities
The official documentation lists all 19 trigger state names. Each state changes how the trigger feels when you press it. Some feel soft and smooth, some become harder to press, and others make the trigger feel pulsing or mechanical. These trigger states form the foundation of your effect setup because every custom effect starts by choosing one of them first.
Choosing your trigger state is only the first step. For some states, such as Resistance, Galloping, and SemiAutomaticGun, you can change the effect intensity, and that is controlled using force values.
Force Values: What the Numbers in Parentheses Mean
When you use trigger states such as Resistance, Bow, Galloping, or Machine, you need to add a force value in parentheses using ForceLeftTrigger= or ForceRightTrigger=. Here are the exact values for each state, along with their allowed ranges and examples.
| State | Values needed | Allowed ranges | Example |
|---|---|---|---|
| Resistance | 2 values | 0–9 · 0–8 |
ForceLeftTrigger=(0)(0) or ForceRightTrigger=(0)(0) |
| Bow | 4 values | 0–8 · 0–8 · 0–8 · 0–8 |
ForceLeftTrigger=(0)(0)(0)(0) or ForceRightTrigger=(0)(0)(0)(0) |
| Galloping | 5 values |
0–8 · 0–9 · 0–6 · 0–7 · 0–255, but not recommended to go over 40. |
ForceLeftTrigger=(0)(0)(0)(0)(0) or ForceRightTrigger=(0)(0)(0)(0)(0) |
| SemiAutomaticGun | 3 values | 0–7 · 0–8 · 0–8 |
ForceLeftTrigger=(0)(0)(0) or ForceRightTrigger=(0)(0)(0) |
| AutomaticGun | 3 values |
0–9 · 0–8 · 0–255, but not recommended to go over 40. |
ForceLeftTrigger=(0)(0)(0) or ForceRightTrigger=(0)(0)(0) |
| Machine | 6 values |
0–8 · 0–9 · 0–7 · 0–7 · 0–255 NOT recommended to go over 40. Sixth: 0-2 in decimals, examples: 0.1, 0.8, 1.0, 1.8, 2.0, etc. |
ForceLeftTrigger=(0)(0)(0)(0)(0)(0) or ForceRightTrigger=(0)(0)(0)(0)(0)(0) |
| CustomTriggerValue | 7 values | 0–255 each |
ForceLeftTrigger=(0)(0)(0)(0)(0)(0)(0) or ForceRightTrigger=(0)(0)(0)(0)(0)(0)(0) |
Technically, for the Galloping, AutomaticGun, and Machine states, you can set the value up to 255, but the developer only recommends setting it to a maximum of 40. The reason is that above 40, the effect feels unpleasant. So, if you want to enjoy your gaming experience, keep it at 40 or lower.
For the CustomTriggerValue state, you can get even more control by choosing additional sub-modes. These sub-modes decide what type of trigger effect the controller will use.
17 CustomTriggerValue Sub-Modes
When you use the trigger state of ‘CustomTriggerValue,’ you also need to set a mode with CustomTriggerValueLeftMode= or CustomTriggerValueRightMode=. These sub-modes, 17 in total, are also case-sensitive.
- OFF
- Rigid
- Rigid A
- Rigid B
- Rigid AB
- Pulse
- Pulse A
- Pulse B
- Pulse AB
- VibrateResistance
- VibrateResistance A
- VibrateResistance B
- VibrateResistance AB
- Vibrate Pulse
- Vibrate Pulse A
- Vibrate Pulse B
- Vibrate Pulse AB
Examples of Trigger States in Text file
Here are a few ready-to-use examples of trigger states in text files. Mix and match the different types to achieve your desired results.
Apply Normal State
LeftTrigger=Normal
RightTrigger=Normal Apply Rigid State
LeftTrigger=Rigid
RightTrigger=Rigid Apply VibrateTrigger State for the Right Trigger
LeftTrigger=Normal
RightTrigger=VibrateTrigger
VibrateTriggerIntensity=40 GameCube for the Left Trigger and CustomTriggerValue State for the Right Trigger
LeftTrigger=GameCube
RightTrigger=CustomTriggerValue
CustomTriggerValueRightMode=VibrateResistance B
ForceRightTrigger=(10)(255)(0)(0)(0)(0)(0) CustomTriggerValue State for Both Triggers
LeftTrigger=CustomTriggerValue
RightTrigger=CustomTriggerValue
CustomTriggerValueLeftMode=Rigid A
CustomTriggerValueRightMode=VibrateResistance B
ForceLeftTrigger=(10)(255)(0)(0)(0)(0)(0)
ForceRightTrigger=(10)(255)(0)(0)(0)(0)(0) VibrateTrigger State for the Right Trigger and CustomTriggerValue for the left
LeftTrigger=CustomTriggerValue
RightTrigger=VibrateTrigger
VibrateTriggerIntensity=10
CustomTriggerValueLeftMode=Rigid A
ForceLeftTrigger=(10)(255)(0)(0)(0)(0)(0) Machine State for the Left Trigger
RightTrigger=Machine
ForceLeftTrigger=(0)(9)(7)(7)(10)(0.0) Resistance State for the Right Trigger
RightTrigger=Resistance
ForceRightTrigger=(0)(8) AutomaticGun State for the Right Trigger and GameCube for the Left Trigger
LeftTrigger=GameCube
RightTrigger=AutomaticGun
ForceRightTrigger=(0)(8)(15) Batch File
For the best results, make sure to include the batch file with your game and run it as soon as the game starts.
This batch file is a simple script that automatically opens DSX when the game starts. You neither need to open it manually nor connect the controller yourself. It also tells DSX to start applying trigger effects from your text file.
Basically, the batch file is the link between your game, text file, and DualSenseX, making everything work together.
How to use it
- Download the zip file and attach the .bat file to your game folder.
- Open the batch file and edit it:
- Replace GAMENAME with your game name.
- Replace TEXTFILENAME.txt with your text file name (don’t forget to add the .txt).
Important
- The batch file and the text file must be in the same folder (directory) as your game.
- The batch file finds the text file based on its own location.
When you start the game
- First, run the batch file.
- It will open DualSenseX and pass it 2 parameters (game name + text file).
- DualSenseX will then read your text file to apply trigger effects.
If you are playing a game where the trigger effects need to change many times per second, then the UDP method is the better choice.

Method 2) UDP Integration
The UDP method sends trigger instructions directly through a local connection. You don’t need to create or read a text file. It is faster than the text file method. You can use it for games where you need to change the trigger effects many times per second.
To get started, download the official UDP example project directly from the DualSenseX GitHub repository.
Before using UDP, you must manually create the file C:\Temp\DualSenseX\DualSenseX_PortNumber.txt and write only the number 6969 inside it. DSX listens on localhost at port 6969 by default, and your game sends trigger instructions to that address. DSX does not always create this file automatically, so if it is missing, UDP integration will silently fail even if you have set up everything correctly.
Wrapping Up
The text file method is slower because the game first writes the file, and then DSX reads and processes it. It is useful for slower-paced games, such as simulation or casual games, where players do not need trigger effects to update instantly.
On the other hand, UDP works much faster because the game communicates directly with DSX. So, it is a better choice for fast-paced games, such as racing, shooters, and action games, where trigger effects need to switch instantly.
