How To Create Binding For WalkOVR Controller

As we bring the Mocap feature to OVR Portal, we add WalkOVR to the system as a controller or tracker, depending on the situation. Thus, we make WalkOVR independent of the headset or controller you use.

As of May 2021, the SteamVR Controller Input system has changed. Many new games have configured their games according to the new binding system. Games that do not change the binding system continue to use the legacy binding configuration, but in order to play the games using the new binding configuration with WalkOVR, we need to publish a special binding file for these games. As WalkOVR Technical Team, we have provided our support to 43 new games using the new binding configuration system and we continue to increase this list as you request.

We would like to tell you how to configure the binding to be able to use the WalkOVR controller upon request from the users, via the SteamVR UI. Since there is no general way to create a binding configuration, in this document we will try to create the binding configuration of 2 different games step by step.

1.1. Create Binding Configuration for Half-life Alyx via SteamVR Binding UI

When you enter a game while WalkOVR is connected, if no binding settings have been made for the game you entered, you will receive a "walkovr_controller binding for Half-Life Alyx was not set" warning and you will be directed to the SteamVR binding UI page.
Image

We assume that you can play this game with your existing controls. Before creating a binding file for this game, we examine the binding file that this game has created for several controllers.

After pressing the Close button and closing the warning screen, we click on the "walkovr_controller" text and choose a controller that uses a joystick from here. In this example, I chose the Oculus Touch controller.

Image

After this process, the binding configurations created for the Oculus Touch controller and shared by the community are displayed on the screen.

Image
Click the Edit button on the page above. Click the Move button in the horizontal menu. Here we are looking at the Joystick subcategory (especially the position key) under the Joystick main category and other submenus related to walking.
ImageImage
After reviewing this part, we come back and select the walkovr_controller and click the "Create New Binding" button.
Image
On the page that appears, we click the Move button in the horizontal menu. Then we click on the Joystick button on the left side of the screen and select the Joystick option from the screen that appears. Then we do the same process and select the Button option in the last step.
ImageImageImage
When reviewing the binding configuration created for the Oculus Touch controller, "Teleport Turn" was selected in the Joystick->Position menu. Other than that, "Walk" was selected in the Button->Click menu for Walking. We set similar configuration for walkovr_controller.
Image
Finally, when we click on the Extra button in the horizontal menu, we select the "Return bindings with left hand" option on the screen that appears. After this configuration, we save the binding configuration we created. If you wish, you can share this configuration with the community.

1.2. Create Binding Configuration for Half-life Alyx via Json File

We store the binding files of all the games that we provide binding support in the “walkovr-profile” file. We update the “walkovr-profile” file when users request binding support for any game. Technically oriented people can use the extra way for binding configuration.

We will use a similar approach. In other words, we will examine the binding files shared by the game we want to create a binding file for, and we will create the WalkOVR binding file.

HalfLife Alyx Touch binding file → C:\Steam\steamapps\common\Half-Life Alyx\game\hlvr\cfg

WalkOVR profile binding file → C:\Steam\steamapps\common\SteamVR\drivers\walkovr\resources\input

WalkOVR game binding file → C:\Steam\steamapps\common\SteamVR\drivers\walkovr\resources\input\game-profiles

First, let's examine the binding file shared by the HalfLife Alyx game. In this example, we are examining the binding file that he created for Oculus Touch. While examining this file, we are looking at the parts related to Joystick->position and walking. (bindings_touch.json)

"/actions/move" : {
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/move/in/adjustheight"
                  },
                  "position" : {
                     "output" : "/actions/move/in/teleportturn"
                  }
               },
               "mode" : "joystick",
               "parameters" : {
                  "deadzone_pct" : "5",
                  "maxzone_pct" : "90"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/move/in/walk"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "force_input" : "position",
                  "haptic_amplitude" : "0"
               },
               "path" : "/user/hand/left/input/joystick"
            },
         ]
      },

When we open the bindings_touch file and look at the ones with the mode parameter joystick and the ones related to walking, I added the ones that may be necessary for us here. Note that all of these configurations are under the Move category. In other games, the main category may be different, but we will still look at the configurations related to the position and walking.

To use this configuration with walkovr_controller, you must do the following.

  • First, you need to go to the WalkOVR Game binding file directory and create a new file in this directory. The name of this file should be steam.app.<steam_id>.json
  • Open the file you created with an application such as text editor or notepad. Copy the sample content below into the file you created.
{
  "action_manifest_version": 0,
  "alias_info": {},
  "app_key": "steam.app.<steam_id>",
  "bindings": {
    <add new configuration>
  },
  "category": "steamvr_input",
  "controller_type": "walkovr_controller",
  "description": "Default walkovr_controller Locomotion bindings for Game Name",
  "name": "Default walkovr_controller Locomotion bindings for Game Name",
  "options": {
    "returnBindingsWithLeftHand": true,
	"returnBindingsWithRightHand": false
  },
  "simulated_actions": []
}
  • Then you should open the walkovr-profile.json binding file and add the directory address of the file you created below.
"default_bindings": [
    {
      "app_key": "steam.app.<steam_id>",
      "binding_url": "game-profiles/steam.app.<steam_id>.json"
    },
	.
	.
	.
  ]

Then, let's configure the binding for HalfLife Alyx in accordance with the above system.

  • Navigate to C:\Steam\steamapps\common\SteamVR\drivers\walkovr\resources\input\game-profiles
  • Create a new file and name it steam.app.546560.json
  • Open steam.app.546560.json file and copy template given
  • Copy the parts related to the position and walking in the binding_touch.json file in the empty part of the steam.app.546560.json file.
{
  "action_manifest_version": 0,
  "alias_info": {},
  "app_key": "steam.app.<steam_id>",
  "bindings": {
    "/actions/move" : {
         "sources" : [
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/move/in/adjustheight"
                  },
                  "position" : {
                     "output" : "/actions/move/in/teleportturn"
                  }
               },
               "mode" : "joystick",
               "parameters" : {
                  "deadzone_pct" : "5",
                  "maxzone_pct" : "90"
               },
               "path" : "/user/hand/left/input/joystick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/move/in/walk"
                  }
               },
               "mode" : "button",
               "parameters" : {
                  "force_input" : "position",
                  "haptic_amplitude" : "0"
               },
               "path" : "/user/hand/left/input/joystick"
            },
         ]
      }
  },
  "category": "steamvr_input",
  "controller_type": "walkovr_controller",
  "description": "Default walkovr_controller Locomotion bindings for Game Name",
  "name": "Default walkovr_controller Locomotion bindings for Game Name",
  "options": {
    "returnBindingsWithLeftHand": true,
	"returnBindingsWithRightHand": false
  },
  "simulated_actions": []
}
  • Remove the parameters keys and input->joystick->click keys and fill in the game name, steam_id parts. Then replace path part with "/user/treadmill/input/joystick".
{
  "action_manifest_version": 0,
  "alias_info": {},
  "app_key": "steam.app.546560",
  "bindings": {
    "/actions/move" : {
         "sources" : [
            {
               "inputs" : {
                  "position" : {
                     "output" : "/actions/move/in/teleportturn"
                  }
               },
               "mode" : "joystick",
               "path" : "/user/treadmill/input/joystick"
            },
            {
               "inputs" : {
                  "click" : {
                     "output" : "/actions/move/in/walk"
                  }
               },
               "mode" : "button",
               "path" : "/user/treadmill/input/joystick"
            },
         ]
      }
  },
  "category": "steamvr_input",
  "controller_type": "walkovr_controller",
  "description": "Default walkovr_controller Locomotion bindings for HalfLife Alyx",
  "name": "Default walkovr_controller Locomotion bindings for HalfLife Alyx",
  "options": {
    "returnBindingsWithLeftHand": true,
	"returnBindingsWithRightHand": false
  },
  "simulated_actions": []
}
  • Navigate to C:\Steam\steamapps\common\SteamVR\drivers\walkovr\resources\input
  • Open walkovr-profile.json file
  • Add game binding file directory to default_bindings part
"default_bindings": [
    {
      "app_key": "steam.app.546560",
      "binding_url": "game-profiles/steam.app.546560.json"
    },
	.
	.
	.
  ]
Note: You must perform these operations while the OVR Portal and Status are open. Otherwise, the changes you made will be gone as the driver is updated automatically. If you can send the configurations that you are sure are working by contacting the WalkOVR Team, they will be added to the official release as soon as possible.

2.1. Create Binding Configuration for Shadow Legend VR via SteamVR Binding UI

When you enter a game while WalkOVR is connected, if no binding settings have been made for the game you entered, you will receive a "walkovr_controller binding for Shadow Legend VR was not set" warning and you will be directed to the SteamVR binding UI page.
Image

We assume that you can play this game with your existing controls. Before creating a binding file for this game, we examine the binding file that this game has created for several controllers.

After pressing the Close button and closing the warning screen, we click on the "walkovr_controller" text and choose a controller that uses a joystick from here. In this example, I chose the Oculus Touch controller.

Image

After this process, the binding configurations created for the Oculus Touch controller and shared by the community are displayed on the screen. Click the Edit button on the page.

Click the “default" button in the horizontal menu. Here we are looking at the Joystick subcategory (especially the position key) under the Joystick main category and other submenus related to walking.

Image
After reviewing this part, we come back and select the walkovr_controller and click the "Create New Binding" button.
Image
On the page that appears, we click the “default” button in the horizontal menu. Then we click on the Joystick button on the left side of the screen and select the Joystick option from the screen that appears.
ImageImageImage
When reviewing the binding configuration created for the Oculus Touch controller, "Locomotion or Teleportation" was selected in the Joystick->Position menu. Other than that, "Left Hand Thumb Touching" was selected in the Joystick->Touch menu. We set a similar configuration for walkovr_controller.
Image
Finally, when we click on the Extra Settings button in the horizontal menu, we select the "Return bindings with left hand" option on the screen that appears. After this configuration, we save the binding configuration we created. If you wish, you can share this configuration with the community.