Native Steam Controller 2 support: what already works and what is missing (research)
还没有人认领这个 Issue。
评估
调研方向
Start with the SDL gamepad type switch in runtime/src/gfx/platform.cpp:111-126 and the PadKind definition in runtime/include/nxrt/input.h:70; the issue says the controller has not been tested with physical hardware. The proposed first step is to detect the Steam type, map it to Xbox prompts, log the SDL type name in pkp.log, and test with the controller. The broader options also involve prompt parsing and overwrite code, launcher pages, and [padmap], so the scope and expected behavior need decisions.
由索引模型根据 Issue 内容生成。
描述
Read-only research on the second-generation Steam Controller (Valve's "Triton" in SDL). Nothing was run with the physical device; every behaviour below is read from source or public pages.
Summary
- The device is real and shipped: the second-generation Steam Controller launched 2026-05-04 at $99. SDL calls it "Triton" and has had a driver since 2025-11-12.
- Recompia already links SDL 3.4.18, which came after that driver, so the pad should already be read as a normal SDL gamepad, with gyro, accel and rumble.
- What is missing is only the presentation: the runtime shows Xbox, PlayStation, Switch or keyboard prompts. A Steam Controller falls into
PadKind::Other, soautoprompts would not pick a matching glyph set. - CC0 glyph art exists: Kenney Input Prompts 1.5 added Steam Controller art, and the project already ships a pack built from Kenney 1.5a.
Our code
- Pad kind is decided by a switch over
SDL_GetGamepadType(runtime/src/gfx/platform.cpp:111-126). There is noSDL_GAMEPAD_TYPE_STEAMcase, andPadKindhas only four values (runtime/include/nxrt/input.h:70). [prompts] styleacceptsswitch, xbox, playstation, keyboard, auto. A new glyph set needs a new value, a parser alias and a launcher entry.- The prompt overwrite only knows Xbox, PlayStation and keyboard art (
runtime/games/pkp/pkp_kbm.cpp:578). - Gyro and accel already flow (
runtime/src/gfx/platform.cpp:167-168); rumble goes through the two SDL motors. Paddles, trackpad clicks and touch are unused. [padmap]has no paddle, QAM or trackpad source entries.
What a new device needs, place by place:
- Type detection: add
SDL_GAMEPAD_TYPE_STEAM(and check the Triton type) inplatform.cpp:111, and addPadKind::Steam(or map it to Xbox). - Glyph set: a
steam/folder inprompt_icons.pak, aPromptStyle::Steam, a parser alias, and a case inpkp_kbm.cpp:578. - Labels: Steam face buttons are lettered A/B/X/Y like Xbox, so
label_abxykeeps working. - Gyro/touch: gyro already flows; trackpads are not read. The game has no pointer input, so trackpads would be for menus/camera only.
- Rumble: already used.
- F1 and launcher pages: add the entry to the Button prompts list.
Icons and licenses
- Kenney Input Prompts 1.5 added "Steam Controller, Frame, Valve Index & Meta Quest"; the pack is CC0. The project already ships a Kenney 1.5a pack and keeps the CC0 licence text; CC0 is GPL-3.0-compatible.
- Valve's glyph API returns art loaded at run time from the player's Steam folder; that is not a licence to copy it into the repo. Rule: do not copy Valve art; use Kenney CC0 art only.
- Using the Steam Input API needs the Steamworks SDK and an app id, which a Non-Steam shortcut does not have.
Options
- A. Steam Input as an Xbox pad plus a shipped layout. Small effort, low risk. Players get a working pad with Xbox glyphs. Needs a layout document and a device test.
- B. SDL gamepad type plus our own glyph and gyro code (recommended). Small–medium effort, low risk: detect the type, add a Steam glyph set from Kenney CC0 art, show it under
auto, add paddle and trackpad-click entries to[padmap]. Under Proton with Steam Input on, the game sees an Xbox pad, so the Steam glyphs would not show there unless a setting is added. - C. Steam Input API through Steamworks. Large effort; needs an app id, the SDK and a licence check.
- D. Raw HID. Large effort, high risk, duplicates SDL. Not advised.
First small step: add a pad-kind case for the Steam type, map it to Xbox prompts, log the SDL type name in pkp.log, and test with the real pad.
Not verified
- Nothing was run with the physical controller.
- Whether SDL reports
SDL_GAMEPAD_TYPE_STEAMfor it, and the USB IDs. - Which SDL release first contained the Triton driver, and whether 3.4.18 has all of today's fixes.
- Whether Kenney's Steam Controller art is the new controller and covers paddles and trackpads.
- Whether Steam picks up a layout file written by the launcher for a Non-Steam shortcut.
- The Steamworks SDK licence terms for redistribution in a GPL-3.0 project.
Open questions
- Can a physical controller be used to check the first step?
- Which platforms come first: Windows native, Linux/Proton, or the Steam Deck?
- Should the game show Steam glyphs when Steam Input hands it an Xbox pad, or only when the real Steam pad is seen?
- Should gyro aiming be on by default in the shipped layout?
- 主要语言
- C++
- 星标
- 224
- 派生
- 0
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
featureJosh/Recompia 的其他 Issue
-
enhancement
难度 2/5 1-3 小时 新手友好度 74/100
featureJosh/Recompia#522 ·
-
enhancement
难度 4/5 3-5 天 新手友好度 42/100
featureJosh/Recompia#535 ·
-
bug low priority
难度 3/5 1-2 天 新手友好度 52/100
featureJosh/Recompia#534 · 2 条评论 ·
-
Game crashes multiple times at random moments | CachyOS Hyprland可能已有人在做 @featureJosh 今天认领。 未关闭bug
featureJosh/Recompia#533 · 已指派 1 人 ·
-
Frequent Crashes on Steam Deck: The graphics device was lost, so Pokopia must close可能已有人在做 @featureJosh 今天认领。 未关闭bug high priority
featureJosh/Recompia#531 · 1 条评论 · 已指派 1 人 ·
查看 featureJosh/Recompia 的全部 Issue
相似的 Issue
-
backlog
难度 2/5 1-3 小时 新手友好度 78/100
EchoTools/nevr-runtime#2385 ·
维护者通常 1 天内回复
-
type:bug
难度 2/5 1-3 小时 新手友好度 65/100
tensorflow/tflite-micro#3995 ·
维护者通常 1 天内回复
-
CPU update 1.31x未关闭speed-report
难度 1/5 1 小时以内 新手友好度 75/100
mw00/project-maya#961 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
-
not for AI lovers
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复