An open-source extension to be used with GameMaker to allow for up to 8 XInput devices. This project contains replacement functions for the majority of stock gamepad functions found within gamemaker. Each replacement function is designed to work exactly like the stock GameMaker gamepad functions. (The current release is setup to support 8 controllers, but this can be extended by rebuilding the OpenXInput with a larger number set and then replacing the OpenXInput1_4.dll within this extension with it.)
Important Note: When using this extension, make sure to run your game with the YYC output option selected. VM output will not use the extension's dll properly. (VM will only allow 4 XInput devices. YYC will allow 8 XInput devices.)
Import the local package to your project.
On game start, call gamepad_oxi_init().
At the start of each step (Begin Step), call gamepad_oxi_update().
On game end, call gamepad_oxi_quit().
Button Functions:
gamepad_button_check_oxi(deviceIndex, buttonIndex)gamepad_button_check_pressed_oxi(deviceIndex, buttonIndex)gamepad_button_check_released_oxi(deviceIndex, buttonIndex)gamepad_button_value_oxi(deviceIndex, buttonIndex)
Axis Functions:
gamepad_get_axis_deadzone_oxi(deviceIndex)gamepad_set_axis_deadzone_oxi(deviceIndex, deadzone)gamepad_axis_value_oxi(deviceIndex, axisIndex)
Other Functions:
gamepad_get_device_count_oxi()gamepad_is_connected_oxi(deviceIndex)gamepad_set_vibration_oxi(deviceIndex, leftMotor, rightMotor)
Parameters for the above functions:
deviceIndex:0-7axisIndex:gp_axislh,gp_axislv,gp_axisrh,gp_axisrvbuttonIndex:gp_face1,gp_face2,gp_face3,gp_face4,gp_shoulderl,gp_shoulderr,gp_shoulderlb,gp_shoulderrb,gp_padu,gp_padd,gp_padl,gp_padr,gp_start,gp_select,gp_stickl,gp_stickrleftMotor:0.0-1.0rightMotor:0.0-1.0
Within the folder OpenXInputExtensionExample, you will find a GameMaker project that uses every function found within this extension.
When ran, you will see the following:
- Step 1: Download the OpenXInput1_4 code from here
- Step 2: Download OpenXInputExtension's code here.
- Step 3: Move the folder
GMOpenXInputExtensionfrom OpenXInputExtension into OpenXInput1_4's working directory. - Step 4: Replace the file
CMakeLists.txtin OpenXInput1_4's working directory with the version found in OpenXInputExtension. - Step 5: Open the folder
OpenXinput-OpenXinput1_4in Visual Studio (I used v2022) and wait for Visual Studio to build out the CMake file (you must have CMake support setup in Visual Studio). - Step 6: You should be able to click build all in Visual Studio to compile the dll.
This extension relys on the open-source project OpenXInput which can be found here.
There is a build of OpenXinput's dll (OpenXinput1_4.dll, originally named Xinput1_4.dll) within the .yymaps file found within the release of this project. This was done to help those who do not wish to rebuild the dll themselves. However, I do encourage you to download and build OpenXInput if you are familiar with C++ and CMake.
