Reference · Updated 2552.10.26.16.01
Controller Layouts
Preset gamepad layouts that a player picks per profile, with a full controller diagram that shows what every button does. Presets ship first. Per-action remapping comes later, on t
Preset gamepad layouts that a player picks per profile, with a full controller diagram that shows what every button does. Presets ship first. Per-action remapping comes later, on top of the chosen preset, so the save data and the input split are designed for it now.
Board card: SL-51. Branch: sl51-controller-layouts.
#Why
Playtest feedback (2026-10-23): Clayton wanted Crouch and Dash swapped. The default layout stays as it is, so this becomes a second preset rather than a change to the default.
#Decisions
| Question | Decision |
|---|---|
| Presets or remapping? | Presets now, remapping later. The save data leaves room for per-action overrides. |
| Which presets? | Default (today's layout) and Clayton (Crouch and Dash swapped). No Southpaw, Bumper Jumper etc. yet. |
| Saved where? | Per profile, next to sensitivity and invert. Split-screen players can each use a different layout. |
| UI | A Controller Layout entry in the per-player Settings screen opens its own screen: the controller diagram fills it, with the layout rotator underneath. |
| Diagram art | XboxController outline, supplied by Beepers: one front view with LT/RT and LB/RB drawn above it, and a callout line per button. Action names sit at the callout ends. (An earlier front-and-back vertical version was dropped because the back view confused things.) |
| Keyboard and mouse | Unchanged. Layouts are gamepad-only. |
#The layouts
| Button | Default | Clayton |
|---|---|---|
| A | Jump | Jump |
| B | Dash | Crouch |
| X | Grenade | Grenade |
| Y | Tap: Cycle Weapon · Hold: Interact (pick up) | same |
| LB | Sidearm | Sidearm |
| RB | — (free since 2026-10-26) | — |
| LT | ADS | ADS |
| RT | Fire | Fire |
| L3 | Crouch | Dash |
| R3 | Melee | Melee |
| D-pad Down | Toggle View | Toggle View |
| Menu | Pause | Pause |
| Left / Right stick | Move / Look | Move / Look |
Hold Y to pick up (2026-10-26, Halo-style). IA_SL_Interact carries a 0.3 s one-shot Hold trigger on the action itself. Y → IA_SL_CycleWeapon has a Tap trigger with the same 0.3 s cutoff, so a press is either a tap or a hold, never both, and the switch happens on release. Cycle Weapon is bound on Triggered (not Started) for the same reason, so its keyboard mapping (middle mouse) carries a Pressed trigger to fire once per click. The pickup prompt (WBP_SL_PickupPrompt) reads "Hold [glyph] to equip" with a CommonActionWidget on IA_SL_Interact, so its icon follows the device and the layout.
Read from IMC_Default on 2026-10-24. If that file changes before this lands, re-read it rather than trusting this table.
#Plan
- Split the input. Move the gamepad mappings out of
IMC_Defaultinto one Input Mapping Context per layout:
IMC_SL_Pad_Default and IMC_SL_Pad_Clayton. Keyboard and mouse stay in their own context. Switching layout then swaps exactly one context. Layering an override context over the default would leave B bound to both Dash and Crouch.
- A layout data asset (
USLControllerLayout): an ID, a display name, the mapping context, and a short
description. The diagram reads its labels from the mapping context itself, so the picture cannot disagree with what the buttons do.
- Profile save. Store the layout by ID (
USLPlayerProfileSaveGame::ControllerLayout). An unknown or empty ID
falls back to the first layout in ASLPlayerController::ControllerLayouts. Remapping will add a per-action override list next to it, applied on top of the preset. It isn't added until then, so there is no unused field.
- Apply. The player controller applies the layout when a profile loads and when the setting changes, including
mid-match. Each local player applies their own, through their own Enhanced Input subsystem.
- Prompts. HUD hints and button glyphs (for example the pickup prompt) must show the active layout's button.
First check how they resolve a button today.
- Controller Layout screen. The
XboxControlleroutline, a text label at each callout end, and the layout
rotator underneath. Changing the rotator updates the labels live, and labels that differ from Default are highlighted. Bumpers and triggers are on the back view, which is mirrored, so the left shoulder is on the right of that view.
#As built
- Input:
IMC_Defaultis keyboard and mouse only. Gamepad bindings live inIMC_SL_Pad_Defaultand
IMC_SL_Pad_Clayton, referenced by DA_SL_Layout_Default and DA_SL_Layout_Clayton (USLControllerLayout). BP_SL_PlayerController.ControllerLayouts lists them, Default first.
- Labels: each Input Action's Description is its diagram label (Jump, Switch Weapon, Aim…). Empty falls back
to the asset name without IA_SL_.
- Screen:
WBP_SL_ControllerLayout(USLControllerLayoutWidget). TheXboxControlleroutline (1448×1086,
one front view with the triggers and bumpers drawn above it) sits in a 1399×660 canvas, drawn at 0.6 scale and 265px in from the left so the labels have room on both sides. The Share line has no callout: Unreal has no key for it. Each callout is a WBP_SL_ControllerCallout (USLControllerCallout) placed at its line end, with Keys set to the buttons it describes. The screen fills every callout it finds, so moving or adding one is designer-only.
- Entry, main menu: a Controller Layout button row named
ControllerLayoutRowinWBP_Settings_Box, after
Controller Rumble. USLProfileEditWidget finds it in its SettingsBox, pushes ControllerLayoutScreenClass when it is pressed, and shows it in edit mode only: covering create mode would discard the draft profile.
- Entry, in game: the same row at the bottom of
WBP_SL_Settings(Pause → Settings), wired in its graph.
- It isn't on Options, which holds machine-wide settings only.
#Verify in PIE
- Pick Clayton: B crouches, L3 dashes, everything else is unchanged.
- The diagram labels change with the rotator, and the changed buttons are highlighted.
- The choice survives a restart (saved in the profile).
- Split-screen: player 1 on Default and player 2 on Clayton, each getting their own buttons.
- Menus are unaffected: B still backs out of a menu on both layouts.
#Assets
Content/SystemLink/UI/Styles/Textures/XboxController— the diagram outline, 1672×941, UI group, no mips.
SourceArt/UI/ControllerLayouts/— the source image and the prompt it was made from.