Skip to content

Pre-Alpha 0.1.2 — Controller mapping

Pre-release
Pre-release

Choose a tag to compare

@Codex64ai Codex64ai released this 20 Aug 14:07
· 30 commits to ios-touch-port since this release

Full 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.00 on this controller - no trigger resting at -1, so no
    permanently-half-pressed trigger to design around.
  • Select / View is not mapped. It reports as JoystickButton0 and 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 on LT + RT and LT + R3 instead.

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.