For download links and more information, visit the Paddle homepage.
Gamepad Profiles Format
▸ Gamepad Inputs
▸ Keyboard Outputs
▸ Mouse Outputs
▸ Window Message (WM) Outputs
▸ Repeat Intervals
Game List Format
Paddle is a gamepad-to-keyboard/mouse mapper for Windows.
Its primary function is to add gamepad control to PC games that only support keyboard or mouse input. You can also use it to control web browsers, media players, and many other programs.
Alt+Enter) are possible
While Paddle is running, a P icon is placed in your Windows taskbar. (It may be hidden sometimes. You can configure Windows to always display Paddle's icon.)
The icon is red when no recognized gamepads are connected, gray when gamepads are detected but no outputs are active, and green when outputs are active. The icon will flash when the number of gamepads or the active profile changes.
Most features of the software are accessible from the main menu (right-click or double-click on Paddle's tray icon).
Paddle sub-menu contains basic software information, a shortcut to Paddle's webpage, a shortcut to this documentation, and an option to check online for updates.
Connected Players sub-menu will show a list of recognized gamepads and their currently assigned "Player" numbers. Choosing a gamepad will identify it (by briefly rumbling the controller, if possible).
Gamepad Profile sub-menu lets you activate various mapping profiles. At startup,
Automatic is selected. This mode will switch the active profile automatically if it detects a game configured in your Game List. You can also choose
None, which is always available and acts as a profile with no outputs. (Choosing any profile besides
Automatic will lock it and disable auto-switching, until you choose
Automatic again from this menu.)
Edit Profiles option will open the Profiles editor.
Launch Game sub-menu offers quick access to any of the games you've configured with a valid executable in the Game List.
Edit Games option will open the Game List editor.
Exit option will deactivate all output and close the program.
Paddle includes a simple, built-in text editor which provides useful syntax-highlighting and auto-completion for both the Gamepad Profiles and Game List files.
When editing Gamepad Profiles, the text will automatically be checked for errors each time you stop typing. Detected errors will be described in the status bar at the bottom of the window.
While typing, the auto-complete list will pop up a list of valid inputs or outputs, depending on the position in the text file. While the list is displayed, you can press the
Tab keys to complete the selected word,
Down to change the selected word, or
Escape to hide the list.
When editing the Game List, auto-completion behaves in the same way, but with a shorter list of relevant keywords. The following special hotkeys are available:
Ctrl+E : browse for (and automatically insert) an executable file
Ctrl+P : select from a list (and automatically insert) a Gamepad Profile
In both editor modes, the following hotkeys are available:
Ctrl+S : save changes and close
Escape : cancel changes and close
Ctrl+W : close (prompt to save any changes)
Ctrl+D : duplicate selection (or current line)
Ctrl+L : delete current line
Ctrl+F : basic 'Find' dialog
F3 : next 'Find' result (forward)
Shift+F3 : previous 'Find' result (backward)
F1 : launch this documentation
The editor can only be open in one mode at a time. Profile output is disabled while the Gamepad Profiles editor is open.
All gamepad profiles are stored in one combined text file (
Paddle_Profiles.txt) which contains profile names and mappings in this general format:
[ProfileName] ; A comment GamepadInputs > Outputs GamepadInputs > Outputs ... [ProfileName] /Parameter:Value, Parameter:Value GamepadInputs > Outputs (RepeatInterval) GamepadInputs > Outputs ...
A profile begins with a name between square brackets (
After that, each line should contain exactly one mapping.
A mapping consists of one or more inputs, and one or more outputs, separated by a
This file format is not case-sensitive.
There is no special header at the start of the file.
Blank lines and comments (text following a
; character) are ignored by the parser.
All input names are based on the standard Xbox 360 controller. For example, if you are using a PlayStation controller, the
Triangle buttons would be called
Y in Paddle. See this Xbox 360 controller diagram for reference (but be aware the
Connect buttons are not supported).
Input buttons are always in an active or inactive state. They have no directional value.
The supported buttons are:
RB (the shoulder "bumpers", similar to
R1 on PlayStation)
RT (the back "triggers", similar to
R2 on PlayStation)
The left and right triggers can also be used as two analog axes:
These always have values from
0.0 (not pressed) to
1.0 (fully pressed).
They can also be treated as one combined axis:
This combines the two triggers and has a range of
1.0 (negative is left, positive is right).
These are all considered "single" axes, meaning they only have one component.
Analog Stick Inputs
The left and right analog sticks have two components (horizontal and vertical).
These are considered "double" axes by Paddle:
They can be broken into individual "single" axes:
They can also be treated like directional buttons:
The D-Pad (directional pad) is also considered a "double" axis:
It can be broken into two "single" axes:
It can also be treated as four separate buttons:
There are also two special "double" axes:
Sticks gets its values from
RStick, whichever is currently being pressed more.
Axes gets its values from
DPad, whichever is currently being pressed most.
All inputs can be inverted by placing a
- symbol (minus) before it.
For button inputs, this means the output is activated when the input is not pressed.
For axis inputs, this means the direction is inverted.
You can combine inputs using the
+ symbol (or
- symbol to combine with an inverted input).
A combination of buttons (such as
Start+Back) is considered active when all of the buttons are pressed.
If any buttons are inverted (such as
A-LB), they must not be pressed to activate the output.
You can combine one axis ("single" or "double") with some buttons.
LB-A+LStick will map the
LStick to the specified output, but only when
LB is pressed and
A is not pressed.
You cannot directly combine axes, such as
Finally, you can list multiple inputs (or combinations of inputs) on a single mapping line, separated by the
, (comma) character. If any of the listed inputs are active, then the output will be activated.
A, B+X-Y, LB+Start, RStick.Up-RT
All inputs in one list must have the same dimension (all buttons, all "single" axes, or all "double" axes).
DPad.X, RStick.Y+A is valid, but
DPad.X, RStick+A is not.
The built-in editor will inform you if any dimensions are mismatched.
Outputs are specified on the right-hand side of the
> symbol on a mapping line.
Like inputs, you can list multiple outputs on one mapping line using the
If any of the listed inputs are active, then all of the outputs will be activated.
Output list example:
Start, LB+RB > Space, Enter
Start is pressed or
RB are both pressed, then both the
Enter keys will be activated (see Keyboard Outputs below).
Unlike inputs, outputs generally can't be inverted (with
-) or combined (with
-), except as noted in the following sections.
The most basic form of output is simulated keyboard presses.
Keys are specified by name, which generally correspond to Windows Virtual Key (VK) constants.
Common keyboard outputs:
Right (the arrow keys)
Other valid keys:
Menu (the context menu key, "VK_APPS")
Win (the "Windows" key, also
There is a pair of "Volume" control keys:
There is a set of "Media" action keys:
There is a set of "Browser" action keys:
Finally, there are some special keyboard outputs which act as axes rather than buttons.
Arrows allows you to map a "double" axis to the arrow keys
Arrows.Y allow you to map "single" axes to the arrow keys
WASD.Y allow you to map axes to the
IJKL can be mapped like
Volume allows you to map a "single" axis to
Keyboard axes example:
DPad > Arrows LStick > WASD RStick.Y > Volume
A single mapping can specify one or more keyboard outputs, but be aware that they will be activated as long as the input is active.
Start > Ctrl, F could be used to toggle fullscreen in a game by triggering
F. However, you probably don't want to hold this key combination longer than necessary. It might be better to use a key sequence output.
A key sequence is a group of keyboard outputs that are guaranteed to be pressed together and are activated briefly when you first trigger the input (even if you hold the input longer). This is useful for common hotkeys, such as "Ctrl+S" to save a file or "Alt+Enter" to toggle fullscreen.
You specify a key sequence by key names combined with
+ and surrounded by double quote (
Key sequence example:
Start > "Ctrl+F" Y > "Alt+Enter" RB+A > "Ctrl+Shift+S"
You can map a gamepad input (typically an analog stick) to mouse movement by using the "double" axis output:
You can also map to the individual "single" component axes:
You can map to four mouse directions independently as buttons:
The mouse speed and acceleration can be adjusted (see Parameters below).
Mouse movement example:
LStick > Mouse Triggers > Mouse.X A > Mouse.Up
The left, right, and middle mouse buttons are mapped just like keys:
Mouse button example:
A > LClick RStick.Click > RClick
The mouse wheel can be mapped as a "single" axis:
It can also be mapped as up/down buttons, to scroll in discrete steps.
Mouse wheel example:
RStick.Y > MouseWheel Y > MouseWheel.Up A > MouseWheel.Down
You can assign button inputs to post Windows API messages as outputs (see WM message list).
Currently only a small number of WM messages are supported:
WM_LBUTTONUP will automatically follow)
WM_RBUTTONUP will automatically follow)
WM_MBUTTONUP will automatically follow)
Window message example:
A > WM_LBUTTONDOWN LB + RB > WM_CLOSE
You can configure mapped outputs to auto-repeat (as long as the inputs are held) by specifying a time interval in
() parentheses at the end of a mapping line.
The time is specified in milliseconds, as a positive integer. For example,
(500) will cause an output to auto-repeat twice per second, and
(100) will auto-repeat ten times per second.
This can be used to auto-hit a key or auto-click the mouse rapidly, auto-scroll the mouse wheel at a desired rate, etc.
Note: The repeat interval applies to all of the listed outputs on a mapping line, not just the last one preceding the parentheses.
A > Enter (500) Start > X, C (100) ; Both X and C are repeated RStick.Up > MouseWheel.Up (750)
In addition to regular mapping lines, a profile can contain optional parameter lines. These are extra settings which can be used to configure the profile in more detail.
A parameter line begins with a forward slash (
/) and contains one or more parameters, separated by the comma (
,) character. Most parameters require a numeric value, specified as a
This parameter is used for multi-player (multi-gamepad) profiles. All subsequent mappings will only apply to the specified player. The default player number is
1, and the max is
16. You can also use the valueless parameters
P2, etc. to achieve the same effect.
/Player:1 A > X /P2 A > Enter
These parameters are used to adjust the maximum speed and acceleration of mouse movement. Both are specified as positive scaling factors, based on the default speed and acceleration (meaning a value of
1.0 is the default,
2.0 is twice as fast). These parameters apply to the entire profile and all gamepads, not just the mappings which follow.
Mouse speed/acceleration example:
/Mouse.Speed:2.0, Mouse.Accel:0.5 LStick > Mouse
This parameter affects the speed of axis inputs mapped to mousewheel scrolling output. Similar to
Mouse.Speed, the value must be a positive scaling factor, with a default of
Mousewheel speed example:
/Mouse.WheelSpeed:5.0 ;/Mouse.WheelSpeed:0.25 ; Try this for comparison RStick.Y > MouseWheel
These parameters set the axis thresholds to be used when mapping axis inputs to button (pressed or unpressed) outputs, for example
RT. Thresholds must be between
1.0, with a default of
Axis threshold example:
/LStick.Thresh:0.9, RStick.Thresh:0.25 LStick.Up, RStick.Up > A
These parameters set the axis deadzones to be used when mapping axis inputs to axis outputs. Deadzones are the areas around the value
0.0 (axis idle position) in which slight axis movement does not register as output movement. For example, if your analog stick causes slight mouse movement when you aren't touching it, you might want to increase its deadzone above
0.20 (the default value).
Axis deadzone example:
/LStick.Dead:0.8 ;/LStick.Dead:0.01 ; Try this for comparison LStick > Mouse
Paddle stores a list of games in an editable text file (
Paddle_Games.ini). Usage of this file is completely optional, but it provides two extra features:
(1) automatic profile activation if Paddle detects a game you have properly configured
(2) ability to quickly launch games from the Paddle tray icon menu
Paddle does not scan your filesystem for games. You must manually add them using the built-in editor or any other text editor.
The Game List follows the common ".ini" text format:
[GameName] Exe = C:\Path\To\Game.exe ExeParams = -Param1 -Param2 Pattern = *\G*e.exe | *\G?me.exe CRC = 01020a0b MD5 = 000102030405060708090a0b0c0d0e0f Profile = MyGameProfile ...
Similar to the Gamepad Profiles file, blank lines and comments (starting with
;) are ignored, and the keywords are case-insensitive.
A game entry begins with its name in
 brackets, on its own line.
This is followed by various properties, one per line. A property consists of a keyword, followed by the equals (
=) character, followed by a text value. All properties are optional. You can specify any combination of relevant properties for each game you add.
Exe is the path of the game executable. If specified, the game will appear in the tray icon's
Launch Game sub-menu for quick access.
ExeParams are commandline parameters that you want to pass to the executable (when launched from the tray icon menu).
Pattern is one or more file path patterns, in Windows wildcard format (
* matches any characters;
? matches any single character). This is used (in addition to the
Exe property) for detecting a game and automatically activating the appropriate gamepad profile. Multiple patterns can be specified, separated by the
CRC is the CRC32 checksum of an executable in 8-digit hex format.
MD5 is the MD5 hash of an executable in 32-digit hex format.
These are useful for distinguishing games with the same executable name, especially if they're built on the same game engine.
These can easily be inserted via the right-click menu.
Profile is the name of the gamepad profile which should be used for this game (assuming you are running Paddle in
Aborting a profile: You can deactivate the current profile by holding the special "abort" combination
LB + RB + Start for 5 seconds. (This is very useful in fullscreen games, in case the wrong profile is configured, or the game already has built-in gamepad support.)
Note: This "abort" action simply activates the
None profile. Paddle will not automatically switch to any other profiles unless you select
Automatic from the
Gamepad Profile menu again.
Saved file locations: Paddle tries to save the Gamepad Profiles and Game List to the same directory as the program itself. If it cannot save there (lacks write privileges), the files will be saved in a
Paddle sub-folder within your
Unrecognized gamepads: Many common gamepads are recognized by Paddle (via SDL). If your gamepad is not recognized, you can specify additional mappings in a SDL2-format text file called
gamecontrollerdb.txt, placed in the same folder as Paddle.
Paddle is developed by Ryan Touk (email)
SDL 2.0 is used for gamepad input (license)
Scintilla is used for the text editor component (license)
Version 1.2 (10 Feb 2018)
Version 1.1 (11 Feb 2016)
Version 1.0 (8 Feb 2015)
▲ Top · Back