[Gamepad extension] "is a controller of type PS4" condition never triggers for official DualShock 4 v2 (Product ID 09cc) on GDevelop 5.6.277

GDevelop version: 5.6.277 (editor full version: 5.6.277-968a68faf69f56d0e41d47471b9ee56e04b360d3, core version: 5.6.269-0)

Extension: Gamepads (controllers) — updated to latest available version via the extension manager, issue persists after update.

Controller: Official Sony DualShock 4 (v2 / CUH-ZCT2), connected via Bluetooth. Confirmed authentic via gamepad-tester.com / hardwaretester.com:

  • Name: “Wireless Controller”

  • STANDARD GAMEPAD, Vendor: 054c, Product: 09cc

  • Mapping: standard

  • All buttons, sticks and vibration work correctly on the tester.

Steps to reproduce:

  1. Connect a DualShock 4 (v2, Product ID 09cc) via Bluetooth.

  2. Close Steam completely (ruled out Steam Input interference — verified with Steam fully closed via Task Manager, and also with Steam Input disabled for PlayStation controllers in Steam’s own settings before closing it).

  3. In GDevelop preview, use Gamepads::ConnectedGamepadsCount() → correctly returns 1.

  4. Display Gamepads::GamepadType(1) in a Text object, updated every frame.

  5. Use the conditions “Gamepad 1 is a controller of type ‘PS4’” / “PS3” / “Xbox” / “Steam” in events.

Actual result:

  • GamepadType(1) displays the raw gamepad ID string: Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc) — so the extension does receive full, correct info about the controller from the browser.

  • However, none of the “is a controller of type …” conditions (Xbox, PS4, PS3, Steam) ever trigger for this controller. It always falls through to my generic/fallback branch, despite being an official, correctly-mapped Sony controller.

Possible cause (unverified): I was not able to find public documentation or source listing the exact Vendor/Product ID combinations the “is a controller of type …” condition matches against. One possibility is that this list only includes the older DualShock 4 v1 Product ID (05c4) and not the v2 Product ID (09cc) used by this (still very common) revision of the controller — but this is a guess based on the symptom, not a confirmed cause.

Question for maintainers: Is there an official/documented list of the exact controller identifiers (Vendor ID / Product ID, or name strings) recognized by the “is a controller of type …” condition for each type (Xbox, PS3, PS4, Steam)? If such a list exists, could it be shared or linked here? That would help confirm whether 09cc is simply missing from it, and would also help other users diagnose similar detection issues themselves in the future.

Impact: Any game relying on the “is a controller of type PS4” condition to show correct button prompts cannot reliably detect this common DualShock 4 revision, forcing a fallback to generic-only prompts even for official Sony hardware.

Share a very simple GDevelop project showing the bug

It has to include the assets along with the game.json

Update / workaround found:

For anyone hitting the same issue: since Gamepads::GamepadType(1) does correctly return the raw gamepad ID string (including the real Vendor/Product ID, e.g. Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 09cc)), you can bypass the broken “is a controller of type …” condition entirely by checking for the vendor ID substring directly in that same condition field:

  • "054c" → matches any Sony controller (PS3/PS4/PS5, regardless of exact Product ID)

  • "28de" → matches any Valve/Steam controller

  • "Xbox" (and optionally "045e" as a fallback for Bluetooth-connected Xbox controllers that report via HID instead of XInput) → matches Xbox controllers

This works because the condition appears to do a substring match against the raw ID string rather than an exact match against a fixed list — so typing the vendor ID directly into the “Gamepad is a controller of type …” field works just as well as typing “Xbox” or “PS4”, and covers every model from that vendor at once instead of needing one line per Product ID.

Still think the original bug is worth fixing though, since new users won’t know to try this and the “PS4”/“PS3” values suggested by the condition’s own UI don’t work for this common DS4 revision.

The type verification for PS3, PS4, PS5, etc., is based on the returned text; since there is no “ps4” string in the type returned by the hardware, the extension don’t return the information.
However, if you open the extension, you can indeed edit and add the code that you believe belongs to the PS4 controller.

I don’t know of such a hardware code list, but if it needs to be done, I will look into it more carefully if others people have the same issue.

Thanks for confirming how the matching works — that’s helpful context.

I understand editing the extension is technically possible, but I don’t think it’s a realistic fix for most users: GDevelop is largely aimed at people without a coding background, and this specific feature (showing the right button prompts per controller brand) is exactly the kind of thing non-programmers would want to use without touching extension source code. Asking each user to maintain their own list of hardware IDs individually defeats the purpose of having a built-in “type” condition at all.

Would it be possible to make the built-in condition match on vendor ID substrings (e.g. “054c” for any Sony controller, “28de” for Valve, etc.) instead of relying on literal strings like “ps4” appearing in the raw hardware string? That would cover all PS3/PS4/PS5 revisions automatically, since the Sony vendor ID doesn’t change between models — same for Xbox/Microsoft (“045e”) and Steam/Valve. This seems like it would fix the root issue for everyone at once, rather than requiring per-user, per-device workarounds.

Happy to share the exact vendor IDs I’ve confirmed work if that’s useful (054c = Sony, 28de = Valve).

that would be quite helpful

fwiw from what I recall this is what we did for matching input icons when using unreal before they added the new UI frameworks

would be worthwhile to probably update the gdevelop extension, there are lists with these ids you can find online or if you have the controllers available you can just check by printing the values

So as a heads up, you can already do this if you need to. The Gamepads::GamepadType(ID here) expression will return the full gamepad name, including the vendor and product IDs as a string.

You could just have a condition of “Compare two strings” with that expression on one side, “contains”, and whatever ID you want on the other side.

Because this is already possible natively without editing anything, I doubt the extension gets updated by the author.

{1C3594D6-D4A6-4E02-ADF4-591307FE69A7}

Might be worth converting both sides to all uppercase via the ToUpperCase() expression, but otherwise should work.

As always, if your gamepad is not properly showing the vendor, or they change their IDs, it won’t display correctly. This is why a ton of modern PC games just let you choose whatever button emblem types you want on PC.

Try this new version and let me know of any regressions or unexpected changes.
It should detect the product IDs you mentioned.
Please note that I only have an Xbox controller and cannot test everything; if you have multiple controllers, I welcome any feedback you can provide.

Gamepads 0.9.3.zip (14,5 Ko)