Developer postOriginal post (opens in a new tab)

[VH] 0.9.0 - Physical Gamepad Update!

(Note: It may take some time for updates to roll out to all users. Try restarting your Steam client if the update does not appear.)

vh0.9.0 - Physical Gamepad Update (2025-06-24)

Summary:
This update allows you to use a physical gamepad with the handheld overlay! You can use Select + Start (or equivalent) to toggle the handheld. The handheld will automatically enter "TV" mode, and your physical gamepad inputs should appear on the overlay!

THINGS TO NOTE:

  • Due to major changes in the way Tracking settings are saved and loaded, your Tracking settings will be reset when updating to this version.
  • Physical input mode will not activate if a virtual gamepad is connected. Check to make sure that no physical gamepad is connected in the Bindings menu.
  • Currently, only Xbox, PlayStation and Switch Pro Controller style gamepads are supported.

NEW Physical Input Mode:

  • Support for physical Xbox, PlayStation and Switch Pro Controller style gamepads
    • At this time, VH has no system to disambiguate between gamepad style variants. This means that the overlay will show Xbox controllers with a 360 style layout, and PlayStation controllers with a DualShock 4 style layout. This is planned to be fixed in a future update.

  • Pressing any button on a supported physical gamepad will automatically switch VH into physical input mode

    • To disable this automatic detection, go to Virtual Handheld Settings > General > Input/Output and disable "Auto-detect physical gamepad"

  • Virtual input simulation for VR controllers is disabled in this new mode. To switch back to virtual input mode, go to the Bindings menu in the Virtual Handheld settings and press "Switch to Virtual Input Mode".
  • To toggle the handheld overlay using a physical gamepad, press Select + Start or the equivalent for your gamepad

    • For Xbox 360, this is Back + Start
    • For Xbox One/Series, this is View + Menu
    • For newer PlayStation controllers, this is Share + Options
    • For Switch Pro Controllers, this is Minus (-) + Plus (+)
    • To disable this ability, go to Virtual Handheld Settings > General > Input/Output and disable "(Select) + (Start) toggles handheld", or whatever the current equivalent is for your gamepad


Input Visualizer:

  • Updated the face button colors for Xbox and DualShock layouts
  • Added physical gamepad visualizer, which shows the current inputs being pressed on your physical gamepad.
    • Automatically switches to the current gamepad style, including glyphs, button layout and thumbstick placement
    • Added symbols for Nintendo Switch "Capture", "Home", and D-Pad buttons


Welcome Screen:

  • Added introduction messages for physical input mode

General > General Settings:

  • Removed Size & Rotation Settings from General Settings. These settings have fully migrated over to Tracking Settings.

General > Input/Output Settings:

  • A "Disable VRChat Gamepad Input" button has been added. Pressing this button will take you to a guide on "How to Disable VRChat Gamepad Input".
  • Added "How to Disable VRChat Gamepad Input" guide
    • This guide teaches you how to disable gamepad controller input for VRChat using Steam Input and a custom controller layout.
    • Pressing the "Disable Gamepad Layout" should open the Steam Controller Layout window to a custom "Disable Gamepad" layout. (If the layout does not appear correctly for whatever reason, try restarting Steam.)

  • Adjusted the layout of some settings to accommodate the "Disable VRChat Gamepad Input" button.
  • Input Simulator settings "Don't reset button states when changing between Main and Alt set" and "Reset all button states when changing between Main and Alt set" have been marked as deprecated. These settings are leftovers from early development and are likely to be removed in a future update.

Bindings Settings:

  • Updated the icon to better represent the conversion of VR controller inputs into virtual inputs
  • Added a message to inform the user when physical input mode is enabled. Virtual input binding cannot be edited while in physical input mode.
    • The user can switch back to virtual input mode by pressing the button that says "Switch to Virtual Input Mode".
    • Added pixel art to represent physical input mode, depicting a gamepad being held by a pair of hands


Tracking Settings:

  • Major back-end improvements to how Tracking Settings are handled internally
  • Several changes to the Tracking Settings UI
    • A header has been added to the Tracking Settings to show the currently active tracking profile
    • Tracking Presets now appear above the settings and below the header
    • The button for the currently selected preset will now be greyed out to indicate that it has been selected
    • Updated sliders
    • Restored the missing minus (-) button on the Angle Stabilization slider
    • Handheld Position Offsets and Head Look Distance now display two decimal places instead of just one

  • Tracking Settings are now saved to separate profiles depending on the current input mode

    • If the profile for the input mode is not found, the settings will default to the Handheld Mode preset for virtual input mode and the "TV" Mode (Upright) preset for physical input mode
    • These files are saved in "\Documents\My Games\Virtual Handheld\Tracking"
    • "TrackingAutoSave_Physical.o-o" contains the tracking settings for physical input mode, and likewise "TrackingAutoSave_Virtual.o-o" contains the tracking settings for virtual input mode
      • Don't let the file extension fool you. These files are merely JSON data in plain text that can be manually edited with a normal text editor (though doing so is not recommended). The ".o-o" extension merely continues the tradition of VH files making faces at you.

  • Normalized the handheld scale value. Though the values appear different in the settings, the resulting overlay scale is the same.

    • Default scale is now 0.50 instead of 40
    • Scale range is now 0.00 - 12.5 instead of 0 - 1000
    • Presets have been updated with appropriate values