Controls page covers the joystick setup
CONTROLS.md gained this in the port; the page that ships beside it did not, and the page is the one people actually look at. A "Bring your own stick" section before Rebinding: what DirectInput is and why it needs telling what its axes are for, joyconfig.bat as the answer, and the four beats of running it. The callout carries the reason the wizard reads direction rather than asking you to know it, since that is the part that looks like a quirk until it is explained. Then what it writes beside the grammar that produced it, and a table for the two rules the pod's shape asks for - the signed Pedals axis working the pedal pair, and a real lever owning the throttle channel. The reference tables were left incomplete by the port and are now whole: Pedals joins the axis list, the joy rows join the grammar block, and DirectInput's own axis names get a row of their own. Written in the page's existing components - glance, callout, two-col, tbl-scroll - rather than new ones. The two <kbd> elements I reached for first are not styled anywhere on this page and would have rendered as browser defaults, so they are <code> like every other inline literal here. No version change: 4.12.7 is republished with the page in it. Verified by rendering the packed CONTROLS.html headless at 1280 wide and reading the section back - heading, lede, the four-panel strip, callout, both code blocks, both tables, and the reference rows all sit in the page's own idiom, and the tag balance is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+117
-1
@@ -1149,6 +1149,119 @@
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Bring your own stick</h2>
|
||||
<p class="sub">
|
||||
A gamepad speaks XInput, and the game reads it without being asked.
|
||||
Everything else — a flight stick, a HOTAS throttle, a twist grip,
|
||||
rudder pedals, a wheel — speaks <b>DirectInput</b>, which names its axes
|
||||
<span class="mono">X Y Z RX RY RZ SL0 SL1</span> and says nothing about
|
||||
what they are <i>for</i>. Somebody has to decide that your twist grip is
|
||||
the rudder and that pushing it right means right. That is what
|
||||
<code>joyconfig.bat</code> is.
|
||||
</p>
|
||||
|
||||
<div class="panel">
|
||||
<dl class="glance">
|
||||
<div>
|
||||
<dt>Run it once</dt>
|
||||
<dd>joyconfig.bat<small>beside the exe; re-run any time</small></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>It asks</dt>
|
||||
<dd>Move that one<small>steer · pitch · pedals · throttle · buttons</small></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>It watches</dt>
|
||||
<dd>Which way<small>the direction you moved sets the sign</small></dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>Then</dt>
|
||||
<dd>Straight in<small>the game carries on to the setup screen</small></dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="callout">
|
||||
<p>
|
||||
<strong>The direction is the whole point.</strong> A stick that reads
|
||||
positive pushed right and one that reads negative are equally common,
|
||||
and nothing printed on the box tells you which you own. So the wizard
|
||||
does not ask you to know — it asks you to <i>move</i>, and reads the
|
||||
answer off the movement. Skip a prompt with <code>SPACE</code> if you
|
||||
have no such control, <code>ESC</code> to abort without writing.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="sub">
|
||||
It writes only its own section of <code>bindings.txt</code>, between two
|
||||
marker lines, so anything you have written yourself is kept — including a
|
||||
deadzone you tuned by hand after trying it. Before it starts it prints
|
||||
every axis <i>at rest</i>: a stick whose driver reports an odd range
|
||||
shows up there as <span class="mono">X +1.00</span> on an untouched
|
||||
stick, rather than as a mystery later. Xbox-class pads are excluded from
|
||||
all of this, so nothing ever counts twice.
|
||||
</p>
|
||||
|
||||
<div class="two-col">
|
||||
<pre><i># what it writes</i>
|
||||
<b>joydev</b> 0 Logitech Extreme 3D
|
||||
<b>joyaxis</b> X <b>axis</b> JoystickX invert deadzone 0.08
|
||||
<b>joyaxis</b> Y <b>axis</b> JoystickY deadzone 0.08
|
||||
<b>joyaxis</b> RZ <b>axis</b> Pedals deadzone 0.08
|
||||
<b>joyaxis</b> SL0 <b>axis</b> Throttle invert deadzone 0
|
||||
<b>joybutton</b> 0 <b>button</b> 0x40
|
||||
<b>joyhat</b> 0 up <b>button</b> 0x42</pre>
|
||||
|
||||
<pre><i># grammar</i>
|
||||
<b>joydev</b> <slot> [product-name substring]
|
||||
<b>joyaxis</b> <src> <b>axis</b> <axis> [invert]
|
||||
[deadzone <d>] [rate <n>]
|
||||
<b>joybutton</b> <n> <b>button</b> <addr> [toggle]
|
||||
<b>joyhat</b> <n> <up|down|left|right>
|
||||
<b>button</b> <addr>
|
||||
|
||||
<i># a named slot binds that product; a bare
|
||||
# one binds the Nth stick Windows lists</i></pre>
|
||||
</div>
|
||||
|
||||
<div class="tbl-scroll" style="margin-top:22px">
|
||||
<table>
|
||||
<caption>Two rules the pod's shape asks for</caption>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="mono">Pedals</th>
|
||||
<td>
|
||||
A <b>signed</b> axis that works the pedal <b>pair</b> — positive
|
||||
for the right pedal, negative for the left. The pod has one
|
||||
under each foot; a twist grip or rudder bar is a single control
|
||||
that presses one or the other and never both, which is exactly
|
||||
what this says. It is a channel name like any other, so a gamepad
|
||||
stick can drive the turn with it too.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="mono">Throttle</th>
|
||||
<td>
|
||||
A <span class="mono">joyaxis</span> on the throttle with no
|
||||
<span class="mono">rate</span> is treated as a <b>real lever</b>
|
||||
and owns the channel: its full travel <i>is</i> the throttle
|
||||
range. Spring-centred sticks have to nudge a position instead,
|
||||
which is what <span class="mono">rate</span> does — a lever that
|
||||
stays where you put it needs none of that.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="sub" style="margin-bottom:0">
|
||||
A twist grip is usually <span class="mono">RZ</span>; a HOTAS throttle is
|
||||
usually <span class="mono">Z</span> or <span class="mono">SL0</span>. Set
|
||||
<code>RP412JOYLOG=1</code> to log devices as they attach and drop away.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Rebinding</h2>
|
||||
<p class="sub">
|
||||
@@ -1166,6 +1279,8 @@
|
||||
<b>pad</b> <button> <b>button</b> <addr> [toggle]
|
||||
<b>padaxis</b> <src> <b>axis</b> <axis> [invert]
|
||||
[deadzone <d>] [rate <n>]
|
||||
<b>joydev joyaxis joybutton joyhat</b>
|
||||
<i>see above</i>
|
||||
|
||||
<i># deflect springs back, rate sticks where
|
||||
# you leave it (that is the throttle)</i></pre>
|
||||
@@ -1185,12 +1300,13 @@
|
||||
<table>
|
||||
<caption>Reference — axes, address space, key names</caption>
|
||||
<tbody>
|
||||
<tr><th>Axes</th><td class="mono">Throttle · LeftPedal · RightPedal · JoystickX · JoystickY</td></tr>
|
||||
<tr><th>Axes</th><td class="mono">Throttle · LeftPedal · RightPedal · JoystickX · JoystickY · Pedals</td></tr>
|
||||
<tr><th>Buttons</th><td class="addr">0x00 – 0x47</td></tr>
|
||||
<tr><th>Keypads</th><td class="addr">0x50 – 0x6F <span style="color:var(--ink-quiet);font-family:var(--sans)">— unbound by default; the game never reads them</span></td></tr>
|
||||
<tr><th>Key names</th><td class="mono">A–Z · D0–D9 · F1–F12 · NumPad0–9 · Up Down Left Right · Space · Return · Shift · Ctrl · Alt · OemMinus · Oemplus · Oemcomma · OemPeriod</td></tr>
|
||||
<tr><th>Pad</th><td class="mono">A B X Y · DPadUp/Down/Left/Right · Start · Back · LeftShoulder · RightShoulder · LeftThumb · RightThumb</td></tr>
|
||||
<tr><th>Pad axes</th><td class="mono">LeftStickX/Y · RightStickX/Y · LeftTrigger · RightTrigger</td></tr>
|
||||
<tr><th>Joystick axes</th><td class="mono">X · Y · Z · RX · RY · RZ · SL0 · SL1 <span style="color:var(--ink-quiet);font-family:var(--sans)">— DirectInput's own names</span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user