Professional Documents
Culture Documents
Chapter 1. Introduction
The XBox360 Controller Emulator, or x360ce, is a program that allows DInput (DirectInput)
only controllers (i.e. most gamepads, joysticks, steering wheels, etc.) to be used with XInput-
only games and applications. XInput-only games are games that are normally only compatible
with controllers that support XInput, such as the x360c (XBox360 Controller), unless you use
emulation. See this for a more thorough description.
x360ce.exe : this is the x360ce App file. It (a) generates an x360ce Library file (if not
already present in the folder) that provides the actual XInput emulation; and (b) it
generates (if not already present in the folder), and edits, the x360ce Configuration file
(x360ce.ini). Not needed for x360ce operation.
xinput1_3.dll : this is the x360ce Library file. Although it is described as a library, it is
really an application, as it converts the DirectInput from a controller to XInput, that
is then used by XInput-only games. With some games it needs to be renamed. Do not
confuse it with the system file of the same name.
x360ce.ini : this is the x360ce Configuration file. It provides settings for the Library file,
which are controller and game specific. It can be edited by the x360ce App, or manually.
x360ce.gdb : this is the x360ce Game Database file. If the file is present, and the game is
listed in it, HookMasks should be automatic.
dinput8.dll : this is the x360ce Loader file. Goes in the same folder as the Library file. It
is a simple loader, which loads xinput1_3.dll only for the few games that need HookLL
enabled. Do not confuse it with the system file of the same name.
x360ce.ini and x360ce.gdb can be placed in the same folder as xinput1_3.dll. But they can
also be placed them in the following locations. With Windows XP, they can be put in the
%allusersprofile%\Application Data\x360ce folder, which is often C:\Documents and
Settings\All Users\Application Data\x360ce. With Windows Vista / 7 / 8 they can be put in the
%allusersprofile%\x360ce folder, which is often C:\ProgramData\x360ce.
This is a description of the contents of the x360ce Configuration file, i.e. x360ce.ini. It is a
standard text file that can be edited using programs such as Notepad and Notepad++. It is very
similar to to .ini files used by Windows, see this for details. Hopefully this guide will explain how
to generate a x360ce.ini file without using the App.
Like most .ini files, x360ce.ini consists of sections names, surrounded by square brackets,
under which the settings for that section are placed. Section and Settings names are not case
sensitive. For example:
et cetera. Comments can be added by using the hash character, for example:
# This is a comment
[Options]
# General options, not game or controller specific
# Note: True = 1, False = 0
UseInitBeep=1 # 1 = Beep on startup of Library / App
Log=0 # 0 = Log file creation is off (default)
Console=0 # 0 = Console mode is off (default)
DebugMode=0 # 0 = Debug mode is off (default)
InternetDatabaseUrl=http://www.x360ce.com/webservices/
x360ce.asmx # standard URL for App web features
InternetFeatures=1 # Only needed if using x360ce App
InternetAutoload=1 # Only needed if using x360ce App
AllowOnlyOneCopy=1 # 1 = Only one App copy can be loaded
Version=1 # 1 stops x360ce App / Library mismatch error
Override=0 # 0 = uses GDB from %ProgramData%\x360ce
UseInitBeep creates a beep when the library file is loaded by a game, or the App is
started, or the App changes a setting.
Log allows a creation of a log file at %ProgramData%\x360ce\logs (or
%allusersprofile%\Application Data\x360ce\logs with Windows XP) when the library
file or app file is loaded.
Console mode and debug mode are normally for developers.
Internet settings (Internet*=value) are only used if using the x360ce App. If these are
enabled, the App can attempt to get the correct controller configuration from the
Internet. The url of http://www.x360ce.com/webservices/x360ce.asmx is standard.
AllowOnlyOneCopy=1 stops more than one copy of x360ce from being loaded at any
one time.
If Version=1, an error does not occur if using the x360ce App with a different x360ce
library version.
If Override=1, the x360ce Game Database used is the one in the local folder (if present),
rather than that at %ProgramData%\x360ce (or %allusersprofile%\Application
Data\x360ce with Windows XP) (if present).
This section is not needed if using the x360ce Game Database, and the game is included
(Library R578 onwards). x360ce can provide Input Hooking for games that require it. This
section specifies the Input Hooking needed. It is game specific: not all games require Input
Hooking.
What is Input Hooking? When x360ce is active, the general scheme of things is: Controller >
Controller Driver > System dinput8.dll (not the x360ce version) > x360ce library > game or
application. Hooking alters the messaging between the system dinput8.dll, and the game or
application.
Before x360ce Library R574 (3.3.1.574) it would have looked something like this:
[InputHook]
HookMode=1
From x360ce Library R574 (3.3.1.574) onwards, HookMode was removed, and replaced with
HookMask. It now looks something like this:
[InputHook]
HookLL=0
HookCOM=1
HookSA=0
HookWT=0
HookDI=0
HookPIDVID=0
HookName=0
HookLL etc. are termed hooks. Games requiring hooks would need to have these enabled.
For example Assassins Creed needs the HookCOM, HookDI and HookPIDVID enabled, so the
correct [InputHook] is:
[InputHook]
HookLL=0
HookCOM=1
HookSA=0
HookWT=0
HookDI=1
HookPIDVID=1
HookName=0
The above can be replaced with the following if desired, see http://forums.ngemu.com/
showthread.php?t=155113 for why:
[InputHook]
HookMask=0x0000000E
The old HookMode=0 is like disabling all hooks. The old HookMode=1 (Normal) is like enabling
both HookLL (only implemented R553 onwards) and HookCOM. The old HookMode=2
(Compatibility) is a like HookLL, HookCOM, HookDI and HookPIDVID enabled. The old
HookMode=3 (Full or All) is like HookLL, HookCOM, HookDI, HookPIDVID and HookName
enabled. So far, only Beat Hazard titles needs HookSA enabled; so far, only Gears of War
needs HookWT enabled. NB prior to R604, HookPIDVID was titled HookVIDPID.
This should not be needed, but with HookPIDVID enabled, FakePID and FakeVID can be
altered (default values of 0x028E and 0x045E respectively). Additional hooks HookStop and
HookDisable (HookEnable before R601) should not be accessed. See http://code.google.com/p/
x360ce/source/detail?r=574 for details.
[Mappings]
PAD1=Dual Trigger 3-in-1
PAD2=
PAD3=
PAD4=
In the above example, there MUST also be a [Dual Trigger 3-in-1] Controller Section, specifying
how the controller is configured. PAD2=Dual Trigger 3-in-1 would make it controller 2.
If any XInput controllers are also used, they should be put in slots before any DirectInput
controllers, for example:
[Mappings]
PAD1=Controller (Cyborg Rumble Pad - PC/Xbox 360)
PAD2=Dual Trigger 3-in-1
PAD3=
PAD4=
XInput controllers are usually only specified to enable passthrough. With the above example
there must be a [Dual Trigger 3-in-1] Controller Section and a [Controller (Cyborg Rumble Pad -
PC/Xbox 360)] Controller Section. This is an example Controller (Cyborg Rumble Pad - PC/Xbox
360) Controller Section.
The controller sections have settings for individual controllers. It begins [Controller_Name],
where the controller name can be anything, but it must be what is specified in the [Mappings]
section. An example is:
[IG_d7ff4a1052b011e28001444553540000]
# Controller Section for my DInput gamepad
# Name based on InstanceGUID without hyphens
# Find the GUIDs for yours using using ditool.exe
ProductName=Dual Analog Pad
ProductGuid=01120f30-0000-0000-0000-504944564944
InstanceGuid=d7ff4a10-52b0-11e2-8001-444553540000
PassThrough=0 # 0 if a DInput controller
ControllerType=1 # 1 = gamepad
The buttons need to be set to the corresponding DInput button number. This can be
found by running joy.cpl > Properties.
# D-pad setup
D-pad POV=1
D-pad Down=DOWN
D-pad Left=LEFT
D-pad Right=RIGHT
D-pad Up=UP
The D-pad settings allow the D-pad to be used by the library. They are standard settings
common to most controllers.
If you disable the D-pad POV (D-pad POV=0), you can map digital buttons to x360ce D-
pad.
The left and right and left analog sticks can assigned to controller buttons if desired. For
example Left Analog Y+ Button=4 would map button 4 to x360ce Left Analog Y+. In the
above example this is disabled. These entries are not required.
The above settings are dead zone settings. They increase dead zone. These are all settings for
10% dead zone.
For the Left Trigger (TriggerDeadZone) and the Right Trigger (RightTriggerDeadZone) it is
the percentage multiplied by 2.56. So 100%=256.
For the analog sticks it is the percentage multiplied by 327.67. So 100%=32767.
The above settings are anti dead zone settings for 10%. This reduces dead zone on controllers.
Left analog anti-dead zones are percentages multiplied by 78.49. So 100%= 7849.
Right analog anti-dead zones are percentages multiplied by 86.89. So 100%=8689.
Mapping to the x360ce D-Pad (a.k.a. POV Hat, Direction Pad, etc.)
App refers to x360ce Application (x360ce.exe). > means maps to.
Obviously the normal mapping is DInput D-Pad > x360ce D-Pad. This works as long as D-
pad POV=1 is in .ini file. To set it in the App, set the drop down menu for D-Pad to D-Pad
1.
It is not possible to set e.g. Up to Down.
DInput Digital Buttons > x360ce D-Pad. Need D-Pad POV=0 for this to work, then you
have e.g. D-pad Down=3 for button 3 to map to x360ce D-Pad down. To set this in the
App set the D-Pad drop down to <empty>. Then set e.g. D-Pad Up drop down menu to
Buttons > Button 2.
DInput Axes and Sliders > x360ce D-Pad. Although it is possible to set this in the App,
this does not work.
DInput Left Analog Stick > x360ce D-Pad. See Axis to D-pad in the controller section.
In the App Controller 1 > Advanced > Axis to D-Pad. This works, but not very well with
current x360ce Libraries. In particular Left and Right are inverted, and you can't change
this.
Mapping to the x360ce Analog Buttons, i.e. Left and Right Triggers
DInput Digital Buttons > x360ce Trigger Digital Buttons. This is the usual set up with
controllers with digital trigger buttons.
DInput Axes > x360ce Trigger Analog Buttons. This is the usual set-up for controllers
with analog trigger buttons.
Although you can set it in the App, D-Pad buttons can not map to x360ce Trigger Digital
Buttons.
[Options]
# General options, not game or controller specific
# Note: True = 1, False = 0
UseInitBeep=1 # 1 = Beep on startup of Library / App
Log=0 # 0 = Log file creation is off (default)
Console=0 # 0 = Console mode is off (default)
DebugMode=0 # 0 = Debug mode is off (default)
InternetDatabaseUrl=http://www.x360ce.com/webservices/
x360ce.asmx # standard URL for App web features
InternetFeatures=1 # Only needed if using x360ce App
InternetAutoload=1 # Only needed if using x360ce App
AllowOnlyOneCopy=1 # 1 = Only one App copy can be loaded
Version=1 # 1 stops x360ce App / Library mismatch error
Override=0 # 0 = uses GDB from %ProgramData%\x360ce
[InputHook]
# These HookMasks are game specific
# = 1 to set, = 0 to unset
HookLL=0
HookCOM=1 # 1 = HookCOM set
HookSA=0
HookWT=0
HookDI=0
HookPIDVID=0
HookName=0
[Mappings]
# DirectInput devices should be put in the slots after XInput
devices, to not collide.
PAD1=IG_d7ff4a1052b011e28001444553540000
PAD2=
PAD3=
PAD4=
[IG_d7ff4a1052b011e28001444553540000]
# Controller Section for my DInput gamepad
# Name based on InstanceGUID without hyphens
# Find the GUIDs for yours using using ditool.exe
ProductName=Dual Analog Pad
ProductGuid=01120f30-0000-0000-0000-504944564944
InstanceGuid=d7ff4a10-52b0-11e2-8001-444553540000
PassThrough=0 # 0 if a DInput controller
ControllerType=1 # 1 = gamepad
# D-pad setup
D-pad POV=1
D-pad Down=DOWN
D-pad Left=LEFT
D-pad Right=RIGHT
D-pad Up=UP