Difference between revisions of "Manual:Config:Advanced:Bindings:Joystick"

From VsWiki
Jump to: navigation, search
(Added MS SideWinder FF2 USB; sufficiently different from existing SideWinder FF Pro (to say the least).)
(Condensed (refactored) and added new information about analog hatswitches.)
Line 57: Line 57:
 
</pre>
 
</pre>
  
''Is this really how it works? For me it binds the NORMAL BUTTON-0 to the ABKey and not the 'virtual' one of the hatswitch/throttle. But that's what is in the vegastrike.config file :-/ ''
+
Once defined, analog hatswitches have their own number, and their buttons are defined independent of joysticks.  When creating your <nowiki><bind></nowiki> tags, make sure you do not specify a joystick number (e.g. ''joystick="0"''); this will bind buttons on the joystick rather than positions on the hatswitch.
  
''You are correct. This bug preventing "bind" from working with hatswitches, and thus hatswitches from working at all, has been fixed in latest CVS, but not in 0.4.3.''
+
'' '''Note:''' Analog hatswitch support is not working as of the Vega Strike 0.4.3 release.  This has been fixed in the CVS tree as of 2005-07-30.  To add analog hatswitch support to Vega Strike 0.4.3, check out the "vegastrike_0_4_3" tag, then update the "in_sdl.cpp" file to CVS version 1.30.''
  
 
===DIGITAL COOLIHAT/HATSWITCH===
 
===DIGITAL COOLIHAT/HATSWITCH===

Revision as of 06:06, 31 July 2005

arrow_left.png Config:Advanced:Bindings:Mouse arrow_up.png Config:Advanced:Bindings Config:Advanced:Variables arrow_right.png

Joystick Configuration

This page provides working examples of different joystick configurations, showing how each buton has been bound to operate a single Vega Strike function.

If a Joystick Configuration matches your joystick, you can edit copy the configuration here into your vegastrike config file.

JOYSTICK: bind

Sample

<bind joystick="0" player="0" button="0" modifier="none" command="FireKey" />

Description

  • joystick - Number of the joystick.
  • player - for which player is the command specified? FIXME  ?how this is right?
  • button - Number of the button on the joystick.
  • modifier - FIXME ? no clue ?
  • command - Specify the command to start when the button is pressed here. See Keyboard layout for description and a list of commands.

JOYSTICK: axis

Sample

<axis name="x" joystick="0" axis="0" inverse="false" />

Description

  • name - Name of the axis (in the game) to bind (x,y,z,throttle)
  • joystick - Number of the joystick.
  • axis - Number of axis of the joystick.
  • inverse - Set this to true if you want to inverse the axis direction and to false if not.

ANALOG COOLIHAT/HATSWITCH

forum link 1

Sample

<axis name="hatswitch" nr="0" margin="0.15" joystick="1" axis="2">
  <hatswitch value="-1.0"/>
  <hatswitch value="-0.6"/>
  <hatswitch value="-0.19"/>
  <hatswitch value="0.1"/>
</axis>

<bind hatswitch="0" button="0" modifier="none" command="ABKey" />
<bind hatswitch="0" button="1" modifier="none" command="AccelKey" />
<bind hatswitch="0" button="2" modifier="none" command="DecelKey" />
<bind hatswitch="0" button="3" modifier="none" command="StopKey" />

Once defined, analog hatswitches have their own number, and their buttons are defined independent of joysticks. When creating your <bind> tags, make sure you do not specify a joystick number (e.g. joystick="0"); this will bind buttons on the joystick rather than positions on the hatswitch.

Note: Analog hatswitch support is not working as of the Vega Strike 0.4.3 release. This has been fixed in the CVS tree as of 2005-07-30. To add analog hatswitch support to Vega Strike 0.4.3, check out the "vegastrike_0_4_3" tag, then update the "in_sdl.cpp" file to CVS version 1.30.

DIGITAL COOLIHAT/HATSWITCH

forum link

Sample

<bind joystick="0" digital-hatswitch="0" direction="up" command="ABKey"/>

Description

  • joystick - Number of the joystick.
  • digital-hatswitch - Number of the digital hatswitch.
  • direction - Direction (-button) of digital hatswitch.
    • Possible values: "center", "up", "right", "left", "down", "rightup", "rightdown", "leftup", "leftdown"
  • command - Specify the command to start when the button is pressed here. See Keyboard layout for description and a list of commands.

DIGITAL AXES/D-PAD AS HATSWITCH

This can allow one to use a (usually digital) axis such as a D-Pad as button commands, such as camera keys, etc.

Sample

<axis name="hatswitch" nr="0" margin="0.26" joystick="0" axis="2">
  <hatswitch value="-0.75"/>
  <hatswitch value="0.75"/>
</axis>
<axis name="hatswitch" nr="1" margin="0.26" joystick="0" axis="3">
  <hatswitch value="-0.75"/>
  <hatswitch value="0.75"/>
</axis>

<bind hatswitch="0" button="0" command="Cockpit::YawLeft" />
<bind hatswitch="0" button="1" command="Cockpit::YawRight" />
<bind hatswitch="1" button="0" command="Cockpit::PitchDown" />
<bind hatswitch="1" button="1" command="Cockpit::PitchUp" />

Description

In <axis> tags:

  • axis - Number of the joystick axes for up/down and left/right.
  • margin - basically, you want this to include 1.0 and -1.0, but not 0.0 when adding hatswitch-value +/- margin
  • joystick - 0=down/left, 1=up/right

In <bind> tags:

  • hatswitch and nr - Number of the two defined "hatswitches".
  • button - 0=down/left, 1=up/right
  • command - Specify the command to start when the button is pressed here. See Keyboard layout for description and a list of commands.

Joystick Examples

Please insert your working configs here

Microsoft SideWinder Force Feedback Pro

(may work for other sidewinder-joysticks as well)

Add the joystick-name to the dropdown menu

add joy_ffp to the line

#cat Joystick no_joy joy_normal joy_throttle joy_axis joy_throttle_and_axis joy_t_a_rev

like this

#cat Joystick no_joy joy_normal joy_throttle joy_axis joy_throttle_and_axis joy_t_a_rev joy_ffp

Add the description text

#desc joy_ffp Microsoft SideWinder Force Feedback Pro

Make the joystick the current one

edit the #set Joystick xxxx line to

#set Joystick joy_ffp

Binding code

Place the code below above the </bindings> line in the vegastrike.config file.

FIXME Attention: This bindings may not work under linux ... at least it doesn't for me since i switched. Help is always welcome.

<!-- #joy_ffp -->
<!-- Joystick:Microsoft SideWinder Force Feedback Pro:BEGIN-->
<!-- buttons:BEGIN -->
 <bind joystick="0" player="0" button="0" modifier="none" command="FireKey" />  <!-- stick:fire key -->
 <bind joystick="0" button="1" modifier="none" command="MissileKey" />          <!-- stick:left key -->
 <bind joystick="0" button="2" modifier="none" command="TargetKey" />           <!-- stick:top right key -->
 <bind joystick="0" button="3" modifier="none" command="PickTargetKey" />       <!-- stick:bottom right key -->
 <bind joystick="0" button="4" modifier="none" command="ABKey" />               <!-- socket:"A" key -->
 <bind joystick="0" button="5" modifier="none" command="MisSelKey" />           <!-- socket:"B" key -->
 <bind joystick="0" button="6" modifier="none" command="WeapSelKey" />          <!-- socket:"C" key -->
 <bind joystick="0" button="7" modifier="none" command="AccelKey" />            <!-- socket:"D" key -->
 <bind joystick="0" button="8" modifier="none" command="SheltonKey" />          <!-- not used? -->
 <bind joystick="0" button="9" modifier="none" command="DecelKey" />            <!-- socket:shift key -->
<!-- buttons:END -->

<!-- axes:BEGIN -->
 <axis name="x"        joystick="0" axis="0" inverse="false" /> <!-- stick:left/right -->
 <axis name="y"        joystick="0" axis="1" inverse="false" /> <!-- stick:up/down -->
 <axis name="z"        joystick="0" axis="3" inverse="true" />  <!-- stick:roll left/right -->
 <!-- <axis name="throttle" joystick="0" axis="2" inverse="false" /> not working in 0.4.x -->   <!-- socket:throttle -->
 <!--vvv throttle axis vvvv-->
 <axis name="hatswitch" nr="0" margin="0.25" joystick="0" axis="2" inverse="false"> <!-- socket:throttle -->
   <hatswitch value="-1.0"/>
   <hatswitch value="-0.5"/>
   <hatswitch value="0.5"/>
   <hatswitch value="1.0"/>
 </axis>
 <!-- axes:END -->

<!-- throttle-bindings:BEGIN -->
 <bind hatswitch="0" button="0" modifier="none" command="ABKey" />
 <bind hatswitch="0" button="1" modifier="none" command="AccelKey" />
 <bind hatswitch="0" button="2" modifier="none" command="DecelKey" />
 <bind hatswitch="0" button="3" modifier="none" command="StopKey" />
<!-- throttle-bindings:END -->

<!-- hatswitch:BEGIN -->
 <bind joystick="0" digital-hatswitch="0" direction="up"     command="Cockpit::Inside"/>
 <bind joystick="0" digital-hatswitch="0" direction="left"   command="Cockpit::InsideLeft"/>
 <bind joystick="0" digital-hatswitch="0" direction="center" command="Cockpit::Inside"/>
 <bind joystick="0" digital-hatswitch="0" direction="right"  command="Cockpit::InsideRight"/>
 <bind joystick="0" digital-hatswitch="0" direction="down"   command="Cockpit::InsideBack"/>
<!-- hatswitch:END -->
<!-- Joystick:Microsoft SideWinder Force Feedback Pro:END-->
<!-- #end -->

Microsoft SideWinder Force Feedback 2 (USB) in Linux

This model shows up in Linux as having 11 axes and 20 buttons, but only nine buttons and six axes are used, two of which are for the pseudo-analog hatstick (which is really effectively digital).

The hatswitch configuration is special here. The configuration below uses a "return to center" system, where releasing the hatswitch returns to standard cockpit view. Hence, the obvious way would be to define a centered axis (0) as returning to Cockpit::Inside. But when this was defined for both axes, it didn't work; pressing left or right would only flicker in that direction, instantly returning to center even if the hatswitch was held. This is because horizontal movement of the hatswitch (away from center) somehow also triggers vertical movement events, even if the vertical axis has not changed. The vertical centering was cancelling out the left-right movement.

By defining the return-to-center behaviour only on the horizontal movement, everything works perfectly: Horizontal movement is unimpeded by vertical movement events, and returning the vertical axis to center somehow also triggers a centered horizontal event, returning the view to the inside. The cause of this inconsistency is unknown, but the effect is exactly as desired.

Once the myriad axes are out of the way, the buttons are exceedingly simple; the first eight buttons (0 through 7) map directly to the stick buttons. Button #11 is a special virtual button that is "pressed" when the hand leaves the stick (via an optical sensor). Docking at a space station is the most logical use for this "button", since that's when the user will want to let go of the joystick anyway; aside from saving a keypress, it's also good for amazing any onlookers with the user's "magic" joystick.

<!-- #joy_ff2 -->
 <!-- Trigger button (1) and labelled buttons 2 through 8, in order. -->
 <bind joystick="0" player="0" button="0" modifier="none" command="FireKey" />
 <bind joystick="0" button="1" modifier="none" command="MissileKey" />
 <bind joystick="0" button="2" modifier="none" command="TargetKey" />
 <bind joystick="0" button="3" modifier="none" command="PickTargetKey" />
 <bind joystick="0" button="4" modifier="none" command="MisSelKey" />
 <bind joystick="0" button="5" modifier="none" command="WeapSelKey" />
 <bind joystick="0" button="6" modifier="none" command="SheltonKey" />
 <bind joystick="0" button="7" modifier="none" command="ABKey" />
 <!-- The special button triggered when the hand leaves the stick. -->
 <bind joystick="0" button="11" modifier="none" command="DockKey" />

 <!-- The axes aren't sequential; many are unused. -->
 <axis joystick="0" axis="0" name="x" inverse="false" />
 <axis joystick="0" axis="1" name="y" inverse="false" />
 <axis joystick="0" axis="4" name="z" inverse="true" />
 <axis joystick="0" axis="5" name="throttle" inverse="false" />

 <!-- Hatswitch left-right movement. -->
 <axis joystick="0" axis="6" name="hatswitch" nr="0" margin="0.5" inverse="false">
   <hatswitch value="-1.0"/>
   <hatswitch value="1.0"/>
   <hatswitch value="0"/>
 </axis>
 <bind hatswitch="0" button="0" modifier="none" command="Cockpit::InsideLeft" />
 <bind hatswitch="0" button="1" modifier="none" command="Cockpit::InsideRight"/>
 <bind hatswitch="0" button="2" modifier="none" command="Cockpit::Inside" />

 <!-- Hatswitch up-down movement. -->
 <axis joystick="0" axis="7" name="hatswitch" nr="1" margin="0.5" inverse="false">
   <hatswitch value="-1.0"/>
   <hatswitch value="1.0"/>
 </axis>
 <bind hatswitch="1" button="0" modifier="none" command="Cockpit::Behind" />
 <bind hatswitch="1" button="1" modifier="none" command="Cockpit::InsideBack" />
<!-- #end -->

USB Saitek Cyborg 3D

4-axis/8-buttons/1-hatswitch stick + CH pedals on a gameport 

http://vegastrike.sourceforge.net/forums/viewtopic.php?p=12580#12580 forum link

<!-- #joy_cyborg3d -->
<!-- Joystick:USB Saitek Cyborg 3D (4 axis 10 button 1 hatswitch):BEGIN -->
<!-- buttons:BEGIN -->
  <bind joystick="1" player="0"  button="0" modifier="none" command="FireKey" />
  <bind joystick="1" button="1"  modifier="none" command="ABKey" />
  <bind joystick="1" button="2"  modifier="none" command="StopKey" />
  <bind joystick="1" button="3"  modifier="none" command="TargetKey" />
  <bind joystick="1" button="4"  modifier="none" command="PickTargetKey" />
  <bind joystick="1" button="5"  modifier="none" command="DecelKey" />
  <bind joystick="1" button="6"  modifier="none" command="SheltonKey" />
  <bind joystick="1" button="7"  modifier="none" command="AccelKey" />
  <bind joystick="1" button="8"  modifier="none" command="Cockpit::NavScreen" />
  <bind joystick="1" button="9"  modifier="none" command="MisSelKey" />
  <bind joystick="1" button="10" modifier="none" command="Cockpit::Inside" />
  <bind joystick="1" button="11" modifier="none" command="Cockpit::InsideLeft" />
  <bind joystick="1" button="12" modifier="none" command="Cockpit::InsideRight" />
  <bind joystick="1" button="13" modifier="none" command="Cockpit::InsideBack" />
<!-- buttons:END -->

<!-- axes:BEGIN -->
  <axis name="x" joystick="1" axis="0" inverse="false" />
  <axis name="y" joystick="1" axis="1" inverse="false" />
  <!-- <axis name="throttle" joystick="1" axis="2"/> -->
<!-- axes:END -->
<!-- Joystick:USB Saitek Cyborg 3D (4 axis 10 button 1 hatswitch):END -->

<!-- gameport CH pedals:BEGIN -->
<!-- axes:BEGIN -->
  <axis name="z" joystick="0" axis="3" inverse="true"/>
<!-- axes:END -->
<!-- gameport CH pedals:END -->
<!-- #end -->


USB Saitek X45

4-axis/7-button/4-hatswitch/2 rotary control, 2 mode switch (M1,M2,M3 and AUX0-1) stick/flight control system.

3 of the 4 hatswitches could be called like buttons. So I configured them for Cockpit Display and Weapon Selection. Until now the 2 rotary controls are unused. The mode switches are configured for SPEC/cloak.

<!-- #joy_saitek_x45 -->
<!-- Joystick:USB Saitek X45 (4 axis, 7 buttons, 4 hatswitches):BEGIN -->
<!-- buttons:BEGIN -->
	<bind joystick="0" player="0"  button="0" modifier="none" command="FireKey" />
	<bind joystick="0" button="3"  modifier="none" command="MissileKey" />
	<bind joystick="0" button="4"  modifier="none" command="ABKey" />
	<bind joystick="0" button="5"  modifier="none" command="Cockpit::SwitchRVDU" />
	<bind joystick="0" button="1"  modifier="none" command="UnitTargetKey" />
	<bind joystick="0" button="2"  modifier="none" command="SigTargetKey" />
	<bind joystick="0" button="7"  modifier="none" command="NearestTargetKey" />

<!-- button 6 is originally intended as Shift button -->
<!--	<bind joystick="0" button="6"  modifier="none" command="Cockpit::NavScreen" /> -->

	<bind joystick="0" button="8"  modifier="none" command="CloakKey" />
	<bind joystick="0" button="9"  modifier="none" command="CloakKey" />
	<bind joystick="0" button="10" modifier="none" command="CloakKey" />

	<bind joystick="0" button="11" modifier="none" command="ToggleWarpDrive" />
	<bind joystick="0" button="12" modifier="none" command="ToggleWarpDrive" />
	<bind joystick="0" button="13" modifier="none" command="ToggleWarpDrive" />

<!-- Joystick: HatSwitch 2 (left) -->
	<bind joystick="0" button="14" modifier="none" command="WeapSelKey" />
	<bind joystick="0" button="15" modifier="none" command="MisSelKey" />
	<bind joystick="0" button="16" modifier="none" command="ReverseWeapSelKey" />
	<bind joystick="0" button="17" modifier="none" command="ReverseMisSelKey" />

<!-- ThrottleSystem: HatSwitch 3 (back)-->
	<bind joystick="0" button="18" modifier="none" command="Cockpit::PitchDown" />
	<bind joystick="0" button="19" modifier="none" command="Cockpit::YawLeft" />
	<bind joystick="0" button="20" modifier="none" command="Cockpit::PitchUp" />
	<bind joystick="0" button="21" modifier="none" command="Cockpit::YawRight" />

<!-- ThrottleSystem: MouseCursorControl (front)-->
	<bind joystick="0" button="22" modifier="none" command="Cockpit::InsideLeft" />
	<bind joystick="0" button="23" modifier="none" command="Cockpit::Inside" />
	<bind joystick="0" button="24" modifier="none" command="Cockpit::InsideRight" />
	<bind joystick="0" button="25" modifier="none" command="Cockpit::InsideBack" />
<!-- buttons:END -->

<!-- axes:BEGIN -->
	<axis name="x" joystick="0" axis="0" inverse="false" />
	<axis name="y" joystick="0" axis="1" inverse="false" />
	<axis name="throttle" joystick="0" axis="4"/>
	<axis name="z" joystick="0" axis="3"/>
<!-- axes:END -->
<!-- Joystick:USB Saitek X45 (4 axis, 25 buttons, 4 hatswitches):END -->
<!-- #end -->

Logitech Dual Analog Gamepad

Add the joystick-name to the dropdown menu

add joy_log_dual_gp to the line

#cat Joystick no_joy joy_normal joy_throttle joy_axis joy_throttle_and_axis joy_t_a_rev

like this

#cat Joystick no_joy joy_normal joy_throttle joy_axis joy_throttle_and_axis joy_t_a_rev joy_log_dual_gp

Add the description text

#desc joy_log_dual_gp Logitech Dual Analog Gamepad

Make the joystick the current one

edit the #set Joystick xxxx line to

#set Joystick joy_log_dual_gp

Binding code

Place the code below above the </bindings> line in the vegastrike.config file.

<!-- #joy_log_dual_gp -->
                <axis name="x" joystick="0" axis="0" inverse="false" />
                <axis name="y" joystick="0" axis="1" inverse="true" />
                <axis name="z" joystick="0" axis="2" inverse="true"/>
                <!-- (Not Working) axis name="throttle" joystick="0" axis="3"/-->
<!-- The digital pad has axis 4 and 5 and values of -1,0,1 -->
<!-- Need to work out what to use it for and how to use it -->
<!--The Buttons on this Joypad are clearly marked with numbers -->
<!--Unfortunately they start with 1 and system starts with 0 -->
        <bind joystick="0" button="0" modifier="none" command="ABKey" />
        <bind joystick="0" button="1" modifier="none" command="DecelKey" />
        <bind joystick="0" button="2" modifier="none" command="DockKey" />
        <bind joystick="0" button="3" modifier="none" command="AccelKey" />
        <bind joystick="0" button="4" modifier="none" command="TargetKey" />
        <bind joystick="0" button="5" player="0" modifier="none" command="FireKey" />
        <bind joystick="0" button="6" modifier="none" command="PickTargetKey" />
        <bind joystick="0" button="7" modifier="none" command="MissileKey" />
        <bind joystick="0" button="8" modifier="none" command="WeapSelKey" />
        <bind joystick="0" button="9" modifier="none" command="AutoKey" />
<!-- #end -->

See also


arrow_left.png Config:Advanced:Bindings:Mouse arrow_up.png Config:Advanced:Bindings Config:Advanced:Variables arrow_right.png