Steam controller native support

Feedback on past, current, and future development.
Post Reply
Proton
Posts: 2
Joined: 19 Oct 2015, 09:45

Steam controller native support

Post by Proton »

As a fond user of Valve's new input method, I wondered if it would be reasonable in the future to get native support for the Steam controller. It can already approximate standard controllers and keyboard layouts and hybrids of the two, but to have OpenMW intelligently recognize it as a standalone controller and adjust input accordingly would be an absolute treat.

As far as actually implementing the native support, I can only assume that it's ultimately not too hard to do, since it was built from the ground up to be easy to implement. Documentation can be found in the Steamworks partner website (after registering, which doesn't cost anything) at https://partner.steamgames.com/document ... controller.
Chris
Posts: 1626
Joined: 04 Sep 2011, 08:33

Re: Steam controller native support

Post by Chris »

How does the Steam controller differ from a normal controller, that makes the normal controller APIs unsuitable? What does native support offer over standard gamepad support? Also, are the APIs GPL friendly?
Proton
Posts: 2
Joined: 19 Oct 2015, 09:45

Re: Steam controller native support

Post by Proton »

Ah, it is not GPL-compatible, so that's out the window.

As for how it differs from a normal controller, primarily the difference is that one or both trackpads and/or the gyro input can map directly to mouse input instead of analog stick input. The first implication is that Steam controllers' best use is immediately gimped if the game doesn't permit simultaneous mouse and controller input (c.f. Skyrim). The second implication is that if UI interaction is handled differently between M+K and a normal controller, it's typically preferable that the controller handling is used, or at least enabled.

Ultimately, as long as OpenMW supports mouse input at the same time as controller input, I reckon I'll be totally content.
User avatar
wareya
Posts: 338
Joined: 09 May 2015, 13:07

Re: Steam controller native support

Post by wareya »

The native steam controller API is probably behind an NDA, but what it does is not very complicated. It's only a matter of weeks before there's a third party configurator and a matter of months before there's an open source SDK.
ntm
Posts: 2
Joined: 03 Dec 2015, 05:35

Re: Steam controller native support

Post by ntm »

I made a quick config if anyone wants it. Not sure exactly how to load it, but my guess is to add the OpenMW Launcher as a non-steam game, then open it with a steam controller in big picture mode (and make a controller config for safe measure), and then open ~/.local/share/Steam/userdata/(steamID)/241100/remote/controller_config/(longHexHash)/, and replace the contents of the autosaved vdf file with this config.

This config emulates the mouse + keyboard, and assumes you have {jump -> spacebar, use -> e} in your keybinds.

basic description:
left pad: r,f,t keys, crouch+dpad to switch weapons/spells
left thumbstick: walk/run (make sure run toggle is off), click for right click menu
grips: jump on the right and crouch on the left
right abxy: 1234 keys, plan to make 5678 usable with a modifier
right pad: mouse, click to use, double-tap to arm weapon
triggers: right and left click
shoulders: journal and arm spell

Code: Select all

"controller_mappings"
{
	"version"		"2"
	"title"		"the n'wah's way (v0.1)"
	"description"		"assumes you switch jump & activate (space & e respectively) on keyboard bindings. mostly fps-style. right pad: mouse + click to activate, left pad: r,f,t; crouch+leftpad switches weapons and spells. abxy: 1234, left thumbstick switches walk-run automatically."
	"creator"		""
	"group"
	{
		"id"		"0"
		"mode"		"four_buttons"
		"bindings"
		{
			"button_A"		"key_press 1"
			"button_B"		"key_press 2"
			"button_X"		"key_press 3"
			"button_Y"		"key_press 4"
		}
	}
	"group"
	{
		"id"		"1"
		"mode"		"dpad"
		"bindings"
		{
			"dpad_north"		"key_press W"
			"dpad_south"		"key_press S"
			"dpad_east"		"key_press D"
			"dpad_west"		"key_press A"
			"edge"		"key_press LEFT_SHIFT"
			"click"		"mouse_button RIGHT"
		}
		"settings"
		{
			"requires_click"		"0"
		}
	}
	"group"
	{
		"id"		"2"
		"mode"		"dpad"
		"bindings"
		{
			"dpad_north"		"key_press UP_ARROW"
			"dpad_south"		"key_press DOWN_ARROW"
			"dpad_east"		"key_press RIGHT_ARROW"
			"dpad_west"		"key_press LEFT_ARROW"
		}
	}
	"group"
	{
		"id"		"3"
		"mode"		"absolute_mouse"
		"bindings"
		{
			"click"		"key_press E"
			"doubletap"		"key_press F"
		}
	}
	"group"
	{
		"id"		"4"
		"mode"		"trigger"
		"bindings"
		{
			"click"		"mouse_button RIGHT, Right Mouse"
		}
		"settings"
		{
			"output_trigger"		"1"
		}
	}
	"group"
	{
		"id"		"5"
		"mode"		"trigger"
		"bindings"
		{
			"click"		"mouse_button LEFT, Left Mouse"
		}
		"settings"
		{
			"output_trigger"		"2"
		}
	}
	"group"
	{
		"id"		"6"
		"mode"		"four_buttons"
		"bindings"
		{
			"button_A"		"key_press F"
			"button_B"		"key_press R"
			"button_Y"		"key_press T"
		}
	}
	"group"
	{
		"id"		"7"
		"mode"		"mouse_region"
	}
	"group"
	{
		"id"		"8"
		"mode"		"dpad"
		"bindings"
		{
			"dpad_north"		"key_press W, W"
			"dpad_south"		"key_press S"
			"dpad_east"		"key_press D"
			"dpad_west"		"key_press A"
		}
	}
	"group"
	{
		"id"		"9"
		"mode"		"absolute_mouse"
	}
	"group"
	{
		"id"		"10"
		"mode"		"four_buttons"
		"bindings"
		{
			"button_B"		"key_press RIGHT_BRACKET"
			"button_X"		"key_press LEFT_BRACKET"
			"button_Y"		"key_press DASH"
		}
	}
	"group"
	{
		"id"		"11"
		"mode"		"dpad"
		"bindings"
		{
			"dpad_north"		"key_press DASH"
			"dpad_south"		"key_press EQUALS"
			"dpad_east"		"key_press RIGHT_BRACKET"
			"dpad_west"		"key_press LEFT_BRACKET"
		}
		"settings"
		{
			"requires_click"		"0"
		}
	}
	"preset"
	{
		"id"		"0"
		"name"		""
		"group_source_bindings"
		{
			"0"		"button_diamond active"
			"1"		"joystick active"
			"2"		"left_trackpad inactive"
			"6"		"left_trackpad active"
			"7"		"left_trackpad inactive"
			"10"		"left_trackpad inactive modeshift"
			"11"		"left_trackpad active modeshift"
			"3"		"right_trackpad active"
			"4"		"left_trigger active"
			"5"		"right_trigger active"
			"8"		"gyro inactive"
			"9"		"gyro inactive"
		}
		"switch_bindings"
		{
			"bindings"
			{
				"button_back_left"		"key_press LEFT_CONTROL"
				"button_escape"		"key_press ESCAPE, Menu"
				"button_menu"		"key_press TAB, Tab"
				"button_back_right"		"key_press SPACE"
				"left_bumper"		"key_press R"
				"right_bumper"		"key_press J"
				"button_back_left"		"mode_shift left_trackpad 11"
			}
		}
		"settings"
		{
		}
	}
}
ntm
Posts: 2
Joined: 03 Dec 2015, 05:35

Re: Steam controller native support

Post by ntm »

One thing that would be extremely useful for controllers and mouse/keyboard alike would be the ability to bind buttons to inventory actions such as Transfer, Drop, and maybe also Equip. I can't imagine this being difficult to implement nor it being a feature complicated enough to wait until 1.0. My suggestion would be use the existing bindings of Activate to Transfer and Jump to Drop for the currently hovered-over item. If in the future, we allow for opening multiple containers post-1.0, Transfer could operate clockwise.
Post Reply