Skip to content

Shift Layers

hifihedgehog edited this page May 21, 2026 · 7 revisions

Shift Layers

A second mapping table that turns on while an input is engaged. Think of it as Shift or Caps Lock for your controller.

Mappings tab: shift layers live in the tab strip above the mapping grid

A shift layer overlays or replaces your Base mappings while an activator is engaged. Hold a button to remap your face buttons to pit-menu commands. Toggle a switch to swap from menu controls to gameplay. Cycle through three layouts with one bumper.

Each slot has its own layers. Open a slot, open the Mappings tab, and click + Shift Layer.


Concepts

Base layer. Always active. Every slot starts with one Base layer holding the rows you bind on the Mappings tab.

Shift layer. A second (third, fourth) mapping table on the same slot. Active only while its activator is engaged.

LayerMask. Each mapping row carries a layer tag. Base rows are tagged Base. Shift rows are tagged with the layer's mask (PitStop, Shift1, etc.). You can have many rows for the same target across different layers.

InheritUnmapped (per layer). Off by default. The active shift layer replaces Base. Targets without a row on the active layer output zero. Turn it on and the layer overlays Base. Targets without a row fall through to Base.

NoInherit (per row). Forces a single target to stay off on this layer even when InheritUnmapped is on. Useful when you want one specific button silenced while the rest of the layer falls through.


Make a shift layer

  1. Open a slot. Open the Mappings tab.
  2. Click + Shift Layer.
  3. The Shift Layer dialog opens. Fill in the fields below.
  4. Click OK. A new tab appears in the layer strip above the mapping grid.
  5. Click the new tab and bind rows the same way you bind Base rows.

The activator dialog

Field What it does
Layer Name The label on the tab and the engaged-layer flyout (e.g. Pit Stop).
Activator Input Cross-device picker with Record and Clear. The input that engages the layer. Can live on a different physical controller than the slot it shifts.
Activator Kind Button, Chord, or Axis. See the table below.
Mode Hold, Toggle, Sticky, Cycle, or Custom. See the table below.
Layer Color Full color picker. Tints the tab and the flyout. Reset to clear.
Emoji Icon Single grapheme shown on the flyout. Defaults to ⇧.
Delay (ms) Debounce. Milliseconds the activator must hold before the layer change fires. 0 is instant.
Also Fire Activator's Own Mapping Off by default. On lets the activator input drive its own row alongside the layer change.
Inherit Unmapped Targets From Base Off by default. On = overlay with fallthrough. Off = replace.

Activator kinds

Kind Engages when
Button One button (or POV direction) is pressed. Default.
Chord Two inputs are held at once. The second input has its own device picker, so chords can cross devices (left bumper on the wheel plus button 1 on the H-pattern shifter).
Axis An analog axis crosses the threshold. Default threshold is 0.5 of full deflection. Useful for clutch travel, paddle pulls, throttle past idle.

Modes

Mode Behavior
Hold Layer is active while the input is engaged. Release the input to drop back to Base. The keyboard-Shift model.
Toggle Each press flips engagement. Press once to engage. Press again to release. The Caps-Lock model.
Sticky (one-shot) One press engages. The next input that fires on the engaged layer auto-releases the layer. Tap-then-tap muscle memory without holding.
Cycle Pipe-separated layer list (e.g. `Menu
Custom (jump to layer) The press transitions to a named layer. The layer stays until a different activator transitions away. Build state machines with several Custom activators pointing at each other.

Toggle, Sticky, Cycle, and Custom engagement state does not persist across an app restart. Hold is stateless, so it survives by definition.


The layer tab strip

A horizontal strip sits above the mapping grid on the Mappings tab. Base is always the leftmost tab. Shift layers fill the rest in creation order. The strip wraps to a second row when there are more layers than fit.

Each tab carries the layer's color. The active tab is the layer you're editing, not the layer currently engaged on the controller.

Right-click a tab for per-layer operations:

  • Configure activator… Reopens the dialog above.
  • Rename layer… Edits the display name without breaking row links (the LayerMask stays the same).
  • Copy layer rows. Copies every row on this layer to the clipboard.
  • Paste rows into layer. Pastes copied rows onto the current layer, retagging their LayerMask.
  • Clear layer rows. Removes every row on this layer. The layer itself stays.
  • Delete layer. Removes the layer and every row tagged to it. Confirms first.

The engaged-layer flyout

When a shift layer engages, a Windows-11-style flyout appears at the bottom of the screen showing the layer's emoji icon and name. It auto-dismisses after 2 seconds.

The flyout scans every slot, not the currently-viewed pad. Engage a layer from any slot's activator and the flyout shows. Pick a different emoji and color per layer so multi-slot rigs read at a glance.


Multi-activator resolution

A slot can have many activators. When more than one is engaged at the same time, the most recently engaged wins. The active layer is whichever activator fired last.

Releasing the winning activator falls back to the next-most-recent still-engaged activator. Release them all and the slot returns to Base.


Worked example: a Pit Stop layer for a racing sim

Goal. Hold or toggle a side button on the wheel and the face buttons of the slot's controller turn into pit-menu commands. Release to drive again.

  1. Open the slot. Open Mappings.
  2. On Base, bind the wheel and pedals to the steering and trigger axes. Leave the face buttons mapped to your normal in-car HUD.
  3. Click + Shift Layer.
  4. Layer Name: Pit Stop.
  5. Activator Input: click Record, press the side button on the wheel rim.
  6. Mode: Toggle. One tap to open the menu, one tap to close.
  7. Layer Color: orange. Emoji Icon: 🔧.
  8. Inherit Unmapped Targets From Base: on. Steering, brakes, and clutch keep working while the menu is up.
  9. Click OK. The Pit Stop tab appears.
  10. Click the Pit Stop tab. Bind A, B, X, Y to your sim's pit menu commands (tires, fuel, repair, leave).

Tap the wheel button at the start of your pit lane. The flyout pops with the wrench. A/B/X/Y now drive the pit menu. Tap again on the way out. Pit Stop closes, face buttons return to the in-car HUD.


Where shift layers live

Shift activators and shift rows save inside the per-VC MappingSet. The MappingSet is per-profile by construction, so each profile keeps its own layer set without copying anything between them.

PadForge.xml stores activators as <ShiftActivator> elements under each slot's MappingSet. Rows on a shift layer are normal <Row> elements with their LayerMask attribute set to the layer's mask string.

Runtime engagement state (Toggle's engaged flag, Sticky's one-shot latch, Custom's current-layer pointer) lives on the InputManager. It resets on app launch, on profile switch, and on slot-index compaction.


Tips

  • The activator input can be on a different device than the slot it shifts. Bind a foot-pedal button to shift your wheel slot.
  • Two-layer setups are the most common. Save Cycle and Custom for state-machine work (menu → combat → vehicle in a sim shooter).
  • The flyout is read at a glance, so pick a per-layer emoji that's distinct (🔧 vs ⚔ vs 🚗).
  • Sticky mode is the right pick for one-tap moves you don't want to hold (Cancel on the next menu input, single emote after a kill).
  • Cross-device chords cut accidental engagement. A wheel bumper plus a shifter button is hard to hit by accident in normal driving.

Limitations

  • A row's CombineMode is fixed per row. If you need a target to combine sources differently per layer, build separate rows on each layer.
  • The engaged-layer flyout updates at the polling interval. At 1000 Hz it feels instant. At lower rates a fast activator press may briefly miss the flyout if it engages and releases inside one tick.
  • Custom mode does not auto-return. A Custom activator that jumps from Menu to Combat leaves the slot on Combat until another transition fires. Pair it with a return-path activator.

Related pages

  • Button and Axis Mappings: the layer tab strip sits above the mapping grid. Base rows are bound there too.
  • Macros: Macros and shift layers stack. A macro can fire on a shift layer's input and the layer change still happens.
  • Profiles: shift layers save per profile, so each game can run its own layer set.
  • Controller Slots: every slot has its own MappingSet, so layers are per-slot.

Last updated for PadForge 3.2.0.

Clone this wiki locally