Using with Steam Link in 2024
Since the information I've found on getting this running is all rather old, I'm taking notes for how to make this work in 2024 with an Oculus Quest 2 over Steam Link.
-
Download Portal 2 from Steam. In the Betas tab of Properties, opt into
previous_release. Despite the comment that says it is only one build behind HEAD, it is in fact a build from 2021 that allows the sticks to be used for movement. -
Copy
portal2_sixenseintoC:\Program Files (x86)\Steam\steamapps\common\Portal 2. It is available in the Internet Archive. Copy the DLL you've downloaded from this repo intoportal2_sixense/bin. -
In the StreamVR settings, disable Steam Home. This will save time on startup for all games, but it also eliminates a conflict with the sticks. (Otherwise, your character will be moving around Steam Home in the background while you're trying to play Portal).
-
Put on your headset, connect Steam Link, and play Portal 2.
SteamVR will present a flat app in one of three modes: theater, desktop, or float in space. By default, it will open in theater mode.
When the MotionPack home screen opens, you will see a dialog asking you to pull the triggers on each controller. If this dialog isn't responding, close theater mode (the circled X below the game) to enter desktop mode. Desktop mode and floating mode should allow MotionPack to recognize your controllers.
That's as far as I've gotten so far. The first room in the tutorial asks you to pick up a box, but none of the Oculus Touch buttons grab the box. I suspect there's work to be done in the controller bindings.
in lines 113 to 129, the four button bindings are set to touchpad quadrants (presumably designed for the vive wand)
hypothetically, one could bind these to something else like the thumb rest, face buttons, or grips.
MythVST is partially right - touchpad quadrants are mapped to moving the stick on the right controller and clicking it.
I've managed to complete what felt like half of the campaign before getting tired of it. Remapping via Steam Input didn't amount to much, and there's an old fork that seems to implement a more sane binding, but I couldn't build it for the life of me.