|
I am trying to see if I can help out with anything in this project, but I'm having a hard time gathering how this application will be ran. Is this going to be ran alongside steam (sibling processes) or is this application going to be ran as a child of steam, potentially integrating with Steam API? Why is the CEF interface required? It seems less desirable and sound to use a debugging interface as a main form of integration. Are there any quick links I could read up on to avoid asking someone to explain a bunch of stuff to me? Even pointing to major architecture points in the code would be helpful. Specifically, I was interested in the "why" of #3, so I was trying to understand "how" this process runs. I do understand that this will create virtual devices to forward steam-input through, so maybe this application runs as a child process of Steam? |
Replies: 3 comments 4 replies
Both are valid options with their own advantages and drawbacks. In essence, it's reliant on the Steam Overlay to grab Steam's virtual controllers in order for them to be re-emulated as more compatible controllers. (Though SISR can operate in a non-Steam mode, too!)
As a non-Steam program, we don't have such luxury :(
I actually used this a learning experience for Rust, which I have never written before, so it's quite a mess, honestly Anyway, here's how SISR operates, in essence: The software uses 4 "main threads" that communicate using events.
(Simplified) main flow:
Point 3 is also the reason for #3 , as that would allow having SISR as a general background-app alongside Steam and deactivate itself momemtarily when anything is launched from Steam. For all of this, Steam, however, allows registering callbacks within the |
|
@Alia5 Thank you a ton for the detailed write up, it was super helpful. Few questions/clarifications I need about your simplified flow steps:
Where are we checking if there is a non-Steam shortcut, somewhere on the disk or the process's exec?
The real controller being the physical USB HID device, and the Steam Virtual game controller being... a virtual controller from steam overlay? Below is a little bit of personal rant and also bold "what if" idea I really wish Steam would break out there monolithic Steam Client into utility applications and services, but I'm sure there's reason they haven't done that. For instance, you'd think that they could engineer exactly what you're trying to make here with all of the internal code they have supporting steam input. I know you're working within the confines of what is available, but is there any interest in making something to replace steam input? I personally don't like the sound of that idea, but want to share it nonetheless. For example, what if we made a long-running service application that basically provided it's own version of steam input, remapping the physical device to an emulated device. Essentially a full replacement... I could see some sort of plug-able architecture now to support that idea long term: Above, the |
To be precise, it actually depends. a) SISR launched from Steam: b) SISR launched outside of Steam: See: runner.rs#L52-L63 (webUI branch) Note that it would be possible to query this information via Steams CEF remote debugging interface, but reading from the file is a tiny bit more solid than relying on injecting JS into Steam.
Exactly. Note that on Linux-Land things are a bit different, but as it stands SISR is not really required on Linux, and Linux build artifacts (mostly) exist for the ability to "stream" controllers and KB/M from one computer to another (think using a Steam Deck as dedicated controller, without the drawbacks of using USBIP/VirtualHere directly)
I really don't have any interest in replacing Steam Input or developing my own remapper, and I have zero interest in changing the direction of the project. But let me expand on your idea, nonetheless: The
Most of this can even be supported via SISR, too, actually! SISR does have a I wouldn't recommend it though, as the focus is entirely different, and a lot of the complexity in SISR (interacting with Steam, unpatching function hooks in native code, pairing Steam's Virtual gamepads to real-gamepads, etc. ) is really not required for this, obviously, and the only reason for existence of the A remapper / Steam Input replacement would also constitute completely different software, and that point has nothing to do with Steam. |
Both are valid options with their own advantages and drawbacks.
I recommend reading up on the usage guides here and there
In essence, it's reliant on the Steam Overlay to grab Steam's virtual controllers in order for them to be re-emulated as more compatible controllers. (Though SISR can operate in a non-Steam mode, too!)
As a non-Steam program, we don't have such luxury :(
I actually used this a learning experience for Rust, which I have never written bef…