Impulse-Triggers: correct the DualSense visibility claim
The tab is gated on the active source device's HasRumbleTriggers flag.
Source-trace through SdlDeviceWrapper.cs:260 and
XboxControllerIdentity.cs:22-35: HasRumbleTriggers is true only for
Microsoft VID 0x045E PIDs in the impulse-trigger set (Xbox One / Elite
Series 1 / Elite Series 2 / Series X|S in various wired / wireless /
Bluetooth variants). DualSense VID 0x054C is not in the set, and SDL3's
trigger-rumble property is false for it.
Earlier wording "DualSense pads show the tab" was wrong. DualSense
trigger-motor passthrough still works — it routes through the AT tab's
Vibration mode, not Impulse Triggers. Added a paragraph explaining
that, and replaced the broad "trigger motors" tagline with the exact
PID-family list so future visibility questions resolve from the doc.
Verified this turn during screenshot capture: had to switch the source
picker from DualSense to Xbox Series X to make the tab render.
Wiki: drop stale 'Last updated for PadForge 3.2.0' footers (22 pages)
Every page on the wiki carried a '*Last updated for PadForge X.Y.Z.*'
italicized footer hard-coded to 3.2.0. With 3.3.0 shipped, those
footers become a lie on every page that wasn't actually re-audited
for the new version — bumping them to 3.3.0 wholesale would just
swap one lie for another since most pages haven't been touched
since 3.2.0.
Removing the footer entirely: git history of each page is the
honest source of truth for currency. Wiki contributors who need
to know whether a section reflects the latest behavior can read
the page's commit log; no in-page label needed.
SDL3 rumble fn is SDL_RumbleJoystick, not SDL_RumbleGamepad (fix 5 wiki sites + release notes draft)
Polish: Xbox writer HID-not-XUSB, fold ScpVBus comparison to ViGEm+vJoy, list v3.2 effect-writer files in tree, fix Adaptive-Triggers sentence
Wiki: replace 'per (slot, device)' tuple notation with plain English
memory rule feedback_no_tuple_notation_in_prose.md flags 'per (slot,
device)' as AI-jargon math notation. Five wiki pages had it. Replaced
with 'per pad per slot' so prose reads like prose, not like a Python
dict-key lookup.
Wiki: real Impulse Triggers screenshot (was reusing pad-forcefeedback.png as a stand-in)
Pass 10/25: refreshed screenshots for 3.2 + image refs on every user-facing page
Screenshots
- Recaptured all 21 PNGs in images/ against a 6-slot setup (Xbox + Xbox + PlayStation + Extended + KBM + MIDI) so every controller-type screenshot reflects the live 3.2 UI.
- New pad-gyro.png covers the dedicated Gyro tab (Calibration, Sensitivity, Response Shaping, Engage, Easy Aim cards).
- pad-adaptive-triggers and pad-lighting captured on slot 1 where a DualSense source makes those tabs visible. The old captures were the Controller 3D view instead of the actual tab content -- the Tab(...) Click was being called before the tab strip had switched, and on PS slot 3 the AT/Lighting tabs are hidden when a DS4 (not DualSense) is the source.
capture.ps1 + convert-screenshots.ps1
- capture.ps1 now self-elevates. PadForge runs requireAdministrator; a non-elevated UIA reader returns zero descendants (UIPI), which silently made every Nav/Tab call fall through to a no-op.
- Dropdown captures target by AutomationId (DeadZoneShapeCombo, SensitivityXCombo, TriggerPresetCombo) instead of iterating every ComboBox looking for an item by name -- the old approach kept expanding the HMaestroProfileCombo and assigned-device combo by accident.
- Tab() ScrollIntoView before Click for wrapped tab strips.
- Capture for Gyro / Adaptive Triggers / Lighting on slot 1, gated on each tab being visible (Tab returns false if collapsed, the Cap call is skipped instead of capturing whatever's stale on screen).
- convert-screenshots.ps1: added pad-gyro / pad-impulse-triggers / pad-shift-layers to the name map.
Image refs on pages that previously had none
- Gyro.md: pad-gyro.png
- Installation.md: add-controller-popup.png (first thing you reach after install)
- DSU-Motion-Server.md: dashboard.png (the Motion Server card lives there)
- Troubleshooting.md: settings.png (where most troubleshooting starts)
- Input-Precision.md: pad-sticks.png (where the precision pipeline ends up visible)
- Shift-Layers.md: pad-mappings.png (shift layers live in the mappings tab strip)
- Impulse-Triggers.md: pad-forcefeedback.png as a stand-in (Impulse Triggers tab is only visible when an Xbox One+ pad is assigned, which the dev environment doesn't have; the Force Feedback tab shares the same layout pattern).
Pass 8/25: Related-pages first-word lowercase normalization + Stick-Deadzones 'Best for:' pseudo-colon sweep
41 Related-pages bullet first-words lowercased to match the established 'Page: lowercase description.' convention. Proper nouns (Xbox, DualSense, Sony, HIDMaestro, etc.) kept capitalized. One DualSense->dualSense miss caught and restored. Stick-Deadzones 'Best for:' colon-pseudo pattern dropped on all five deadzone-shape captions.
Pass 6/25 cont'd: Impulse-Triggers placeholder image reference removed -- pad-impulse-triggers.png doesn't exist yet, so rendering was broken on the live wiki
Pass 2/25: italic hook consistency, Related pages normalization, em-dash sweep
- Italicized hook line on 12 user-facing pages that had plain hooks (Stick-Deadzones, Trigger-Deadzones, Force-Feedback, Adaptive-Triggers, Lighting, Devices, DSU-Motion-Server, Web-Controller, Settings, Driver-Management, Input-Precision, 3D-and-2D-Visualization) and Troubleshooting.
- Normalized Related-pages bullet formatting across 16 user-facing pages to one convention: '- [[Page]]: lowercase description.'
- Home.md: cut filler 'long list of smaller wins' from the 3.2 intro paragraph; replaced em-dash pseudo-colon with a period; converted em-dash pseudo-colon in Gyro motion bindings bullet.
- Controller-Slots.md: Open-a-slot tab list now reflects 3.2 reality (Gyro tab, Adaptive Triggers and Lighting on PS slots, Impulse Triggers on Xbox + PS). Related pages expanded to link the new pages.
- Devices.md and Impulse-Triggers.md: em-dash pseudo-colons converted to periods.
Wiki: add Gyro / Shift Layers / Impulse Triggers, expand Mappings + Macros for 3.2 features
New pages
- Gyro: dedicated tab covering calibration, sensitivity, response shaping, engage gates, reference frames, per-(device, slot) persistence, per-source GyroSensitivity multiplier.
- Shift Layers: per-slot mapping tables that activate while a button / chord / axis is engaged. Five activation modes, three activator kinds, per-layer color + emoji, Win11 flyout, last-engaged-wins resolution.
- Impulse Triggers: split out of Force Feedback since the app has it as its own Pad-page tab. Covers game-driven passthrough (Xbox + DualSense), Constant Trigger Force, Audio Bass Trigger Rumble.
Updated
- Home.md "New in 3.2" now covers the full 3.2.0 feature set: mapping engine rebuild, shift layers, gyro Steam Input parity, impulse triggers tab, macro custom expression, lighting additions, platform changes.
- Button-and-Axis-Mappings.md: per-VC scope, multi-source rows, six combine modes + custom formula, source kinds (Direct / Incremental / Invert On Hold), Bidirectional flag, direction badges, auto-mapping extend behavior.
- Macros.md: Custom Expression trigger mode (formula + variables + recipes), multi-device combos in triggers, per-entry axis options.
- Force-Feedback.md: trigger-motor sections moved to Impulse Triggers; cross-link added.