Pre-Alpha 0.1.2 — Controller mapping
Pre-releaseFull hardware controller mapping, built from measurements taken on device rather than
guessed. Two complete layers: a base layer, and a second layer while LT is held.
Base layer
| Input | Action | Input | Action | |
|---|---|---|---|---|
| A | Activate | D-Up | Character sheet | |
| X | Ready weapon | D-Down | Status | |
| RT | Swing weapon | D-Left | Automap | |
| B | Cast spell | D-Right | Travel map | |
| Y | Jump | Start | Pause | |
| RB | Switch hand | L3 (stick click) | Crouch | |
| LB | Autorun | R3 (stick click) | Transport |
Hold LT
| Input | Action | Input | Action | |
|---|---|---|---|---|
| LT + Y | Inventory | LT + D-Up | Steal mode | |
| LT + A | Recast spell | LT + D-Down | Grab mode | |
| LT + B | Use magic item | LT + D-Left | Info mode | |
| LT + X | Notebook | LT + D-Right | Talk mode | |
| LT + RB | Logbook | LT + Start | Quicksave | |
| LT + LB | Run | LT + RT | Rest | |
| LT + L3 | Sneak | LT + R3 | Quickload |
Holding LT suppresses the base action of any button that has an LT variant, so LT+Y opens
the inventory without also jumping. That comes from Daggerfall Unity's own combo-keybind
system, not a bolted-on input layer, so every combo also appears in
Settings > Controls > Joystick and can be rebound like any other binding. Everything is
applied as a secondary binding, so keyboard controls are untouched.
Why the old mapping felt scrambled
It bound JoystickButton0-JoystickButton9, the conventional face-button numbering. On an
Xbox controller under iPadOS that is wrong in an interesting way: nothing useful lives below
button 4. The d-pad is 4-7, shoulders 8-9, triggers 10-11, and the face buttons are
12-15. So the old layout was mostly firing d-pad and shoulder actions.
Measured with the new on-device probe (v0.1.2-probe1), which also turned up:
- Every control except the stick clicks reports as both a button and a duplicate axis,
offset by one (Btn4 = Axis5 ... Btn15 = Axis16). This build binds the buttons. - Every axis rests at
0.00on this controller - no trigger resting at-1, so no
permanently-half-pressed trigger to design around. - Select / View is not mapped. It reports as
JoystickButton0and so does Start (which
also reports its own button 16). Binding button 0 would either fire Select's action every
time you paused, or bind the phantom button iPadOS pulses during touches. Rest and
Quickload sit onLT + RTandLT + R3instead.
Also in this release
- The probe ships permanently, off by default: TUNE > Controller probe overlay. Turn it
on before connecting a controller. If your controller maps wrongly, it will tell you
exactly what your hardware reports. - Gamepad bindings are no longer written to
KeyBinds.txt. Persisting joystick bindings to
disk is what caused the original phantom-input bug, since every scene reload restored
them. They are applied live on connect and removed on disconnect. - Unsigned IPA; free-Apple-ID sideloads expire after 7 days as usual.