diff --git a/config.example.jsonc b/config.example.jsonc index 198219c2..ffd234f1 100644 --- a/config.example.jsonc +++ b/config.example.jsonc @@ -194,11 +194,6 @@ "axisIndex": 1, // Raw axis index captured for this analog controller action. "dpadFallback": "vertical" // Optional D-pad fallback used when this analog controller action should also read D-pad input. Values: none | horizontal | vertical }, // Axis binding descriptor used for primary popup scrolling. Use Alt+C learn mode or set a raw axis descriptor manually. - "rightStickHorizontal": { - "kind": "axis", // Analog binding input source kind. Values: none | axis - "axisIndex": 3, // Raw axis index captured for this analog controller action. - "dpadFallback": "none" // Optional D-pad fallback used when this analog controller action should also read D-pad input. Values: none | horizontal | vertical - }, // Axis binding descriptor reserved for alternate right-stick mappings. Use Alt+C learn mode or set a raw axis descriptor manually. "rightStickVertical": { "kind": "axis", // Analog binding input source kind. Values: none | axis "axisIndex": 4, // Raw axis index captured for this analog controller action. diff --git a/docs-site/public/config.example.jsonc b/docs-site/public/config.example.jsonc index 198219c2..ffd234f1 100644 --- a/docs-site/public/config.example.jsonc +++ b/docs-site/public/config.example.jsonc @@ -194,11 +194,6 @@ "axisIndex": 1, // Raw axis index captured for this analog controller action. "dpadFallback": "vertical" // Optional D-pad fallback used when this analog controller action should also read D-pad input. Values: none | horizontal | vertical }, // Axis binding descriptor used for primary popup scrolling. Use Alt+C learn mode or set a raw axis descriptor manually. - "rightStickHorizontal": { - "kind": "axis", // Analog binding input source kind. Values: none | axis - "axisIndex": 3, // Raw axis index captured for this analog controller action. - "dpadFallback": "none" // Optional D-pad fallback used when this analog controller action should also read D-pad input. Values: none | horizontal | vertical - }, // Axis binding descriptor reserved for alternate right-stick mappings. Use Alt+C learn mode or set a raw axis descriptor manually. "rightStickVertical": { "kind": "axis", // Analog binding input source kind. Values: none | axis "axisIndex": 4, // Raw axis index captured for this analog controller action. diff --git a/src/config/config.test.ts b/src/config/config.test.ts index faf81bc9..a17f00b8 100644 --- a/src/config/config.test.ts +++ b/src/config/config.test.ts @@ -1297,7 +1297,6 @@ test('parses controller settings with logical bindings and tuning knobs', () => "toggleMpvPause": "leftStickPress", "leftStickHorizontal": "rightStickX", "leftStickVertical": "rightStickY", - "rightStickHorizontal": "leftStickX", "rightStickVertical": "leftStickY" } } diff --git a/src/config/definitions/defaults-core.ts b/src/config/definitions/defaults-core.ts index 24e4b95d..4c1ccd43 100644 --- a/src/config/definitions/defaults-core.ts +++ b/src/config/definitions/defaults-core.ts @@ -92,7 +92,6 @@ export const CORE_DEFAULT_CONFIG: Pick< playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), diff --git a/src/config/definitions/options-core.ts b/src/config/definitions/options-core.ts index faa4307e..9a7abf20 100644 --- a/src/config/definitions/options-core.ts +++ b/src/config/definitions/options-core.ts @@ -125,11 +125,6 @@ export function buildCoreConfigOptionRegistry( defaultValue: defaultConfig.controller.bindings.leftStickVertical, description: 'Axis binding descriptor used for primary popup scrolling.', }, - { - id: 'rightStickHorizontal', - defaultValue: defaultConfig.controller.bindings.rightStickHorizontal, - description: 'Axis binding descriptor reserved for alternate right-stick mappings.', - }, { id: 'rightStickVertical', defaultValue: defaultConfig.controller.bindings.rightStickVertical, diff --git a/src/config/resolve/controller.ts b/src/config/resolve/controller.ts index 12cb1469..44d78953 100644 --- a/src/config/resolve/controller.ts +++ b/src/config/resolve/controller.ts @@ -70,7 +70,6 @@ const CONTROLLER_BUTTON_INDEX_KEY_BY_BINDING: Record< const CONTROLLER_AXIS_FALLBACK_BY_SLOT = { leftStickHorizontal: 'horizontal', leftStickVertical: 'vertical', - rightStickHorizontal: 'none', rightStickVertical: 'none', } as const satisfies Record; @@ -111,7 +110,6 @@ const CONTROLLER_DISCRETE_BINDING_KEYS = [ const CONTROLLER_AXIS_BINDING_KEYS = [ 'leftStickHorizontal', 'leftStickVertical', - 'rightStickHorizontal', 'rightStickVertical', ] as const; diff --git a/src/core/services/ipc.test.ts b/src/core/services/ipc.test.ts index 5cb7e1eb..5e02dfe3 100644 --- a/src/core/services/ipc.test.ts +++ b/src/core/services/ipc.test.ts @@ -87,7 +87,6 @@ function createControllerConfigFixture() { dpadFallback: 'horizontal' as const, }, leftStickVertical: { kind: 'axis' as const, axisIndex: 1, dpadFallback: 'vertical' as const }, - rightStickHorizontal: { kind: 'axis' as const, axisIndex: 3, dpadFallback: 'none' as const }, rightStickVertical: { kind: 'axis' as const, axisIndex: 4, dpadFallback: 'none' as const }, }, reviewBindings: getDefaultControllerReviewBindings(), diff --git a/src/renderer/modals/controller-binding-issues.test.ts b/src/renderer/modals/controller-binding-issues.test.ts index 93bf477c..13ecd0dd 100644 --- a/src/renderer/modals/controller-binding-issues.test.ts +++ b/src/renderer/modals/controller-binding-issues.test.ts @@ -118,14 +118,6 @@ test('two stick actions on the same stick both warn', () => { ); }); -test('Alt Horizontal does nothing, so it never clashes', () => { - // On standard pads the right stick's vertical axis is 3, the default of Alt Horizontal. - assert.deepEqual( - issuesWith({ rightStickVertical: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' } }), - {}, - ); -}); - test('a row shared by several actions lists them all', () => { assert.equal( issuesWith({ diff --git a/src/renderer/modals/controller-binding-issues.ts b/src/renderer/modals/controller-binding-issues.ts index d2495957..e8c4e0ec 100644 --- a/src/renderer/modals/controller-binding-issues.ts +++ b/src/renderer/modals/controller-binding-issues.ts @@ -17,12 +17,6 @@ export type ControllerBindingIssueDefinition = { bindingType: 'discrete' | 'axis'; }; -/** - * Rows that do nothing in SubMiner: no action reads `rightStickHorizontal`, so it cannot - * clash with anything. - */ -const INACTIVE_BINDINGS: ReadonlySet = new Set(['rightStickHorizontal']); - /** Row key of a stick binding's D-pad row in Alt+C. */ export function getControllerDpadRowKey(actionId: ControllerBindingActionId): string { return `${actionId}:dpad`; @@ -83,7 +77,6 @@ export function findControllerBindingIssues( const holdActions = new Map(); const rows: { key: string; label: string; inputs: string[] }[] = []; for (const definition of definitions) { - if (INACTIVE_BINDINGS.has(definition.id)) continue; const binding = bindings[definition.id]; if (!binding) continue; if (definition.bindingType === 'axis') { diff --git a/src/renderer/modals/controller-config-form.test.ts b/src/renderer/modals/controller-config-form.test.ts index a5096be6..b8487409 100644 --- a/src/renderer/modals/controller-config-form.test.ts +++ b/src/renderer/modals/controller-config-form.test.ts @@ -31,7 +31,6 @@ const BINDINGS: ResolvedControllerConfig['bindings'] = { playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }; @@ -188,15 +187,13 @@ test('controller config form renders grouped rows with friendly binding labels', ['Token Move (D-pad)', 'D-pad ↔'], ['Popup Scroll (Stick)', 'Left Stick Y'], ['Popup Scroll (D-pad)', 'D-pad ↕'], - ['Alt Horizontal (Stick)', 'Right Stick X'], - ['Alt Horizontal (D-pad)', 'None'], ['Popup Jump (Stick)', 'Right Stick Y'], ['Popup Jump (D-pad)', 'None'], ], ); assert.deepEqual( findAll(container, 'disabled').map((badge) => badge.textContent), - ['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None'], + ['None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None', 'None'], ); assert.deepEqual(findAll(container, 'expanded'), []); assert.deepEqual(findAll(container, 'controller-config-edit-panel'), []); diff --git a/src/renderer/modals/controller-config-form.ts b/src/renderer/modals/controller-config-form.ts index 0d22ea47..8fb779d1 100644 --- a/src/renderer/modals/controller-config-form.ts +++ b/src/renderer/modals/controller-config-form.ts @@ -178,13 +178,6 @@ export const CONTROLLER_BINDING_DEFINITIONS: ControllerBindingDefinition[] = [ bindingType: 'axis', defaultBinding: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, }, - { - id: 'rightStickHorizontal', - label: 'Alt Horizontal', - group: 'Navigation', - bindingType: 'axis', - defaultBinding: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, - }, { id: 'rightStickVertical', label: 'Popup Jump', diff --git a/src/renderer/modals/controller-debug.test.ts b/src/renderer/modals/controller-debug.test.ts index 96052b38..a687a278 100644 --- a/src/renderer/modals/controller-debug.test.ts +++ b/src/renderer/modals/controller-debug.test.ts @@ -84,7 +84,6 @@ test('controller debug modal renders active controller axes, buttons, and config playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), @@ -210,7 +209,6 @@ test('controller debug modal copies buttonIndices config to clipboard', async () playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), @@ -335,7 +333,6 @@ test('controller debug modal stays closed and notifies when controller support i playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), diff --git a/src/renderer/modals/controller-select.test.ts b/src/renderer/modals/controller-select.test.ts index 18f0435e..78ed7536 100644 --- a/src/renderer/modals/controller-select.test.ts +++ b/src/renderer/modals/controller-select.test.ts @@ -170,7 +170,6 @@ function buildContext() { playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), diff --git a/src/renderer/modals/controller-select.ts b/src/renderer/modals/controller-select.ts index 99c5d0a2..a6145f3d 100644 --- a/src/renderer/modals/controller-select.ts +++ b/src/renderer/modals/controller-select.ts @@ -230,7 +230,6 @@ export function createControllerSelectModal( playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, getScreenGroups: () => { diff --git a/src/renderer/renderer.ts b/src/renderer/renderer.ts index b8208a47..36ca8ce4 100644 --- a/src/renderer/renderer.ts +++ b/src/renderer/renderer.ts @@ -590,7 +590,6 @@ function startControllerPolling(): void { playNextSubtitle: { kind: 'none' }, leftStickHorizontal: { kind: 'axis', axisIndex: 0, dpadFallback: 'horizontal' }, leftStickVertical: { kind: 'axis', axisIndex: 1, dpadFallback: 'vertical' }, - rightStickHorizontal: { kind: 'axis', axisIndex: 3, dpadFallback: 'none' }, rightStickVertical: { kind: 'axis', axisIndex: 4, dpadFallback: 'none' }, }, reviewBindings: getDefaultControllerReviewBindings(), diff --git a/src/shared/ipc/validators.ts b/src/shared/ipc/validators.ts index 45e24a6a..eb08d50f 100644 --- a/src/shared/ipc/validators.ts +++ b/src/shared/ipc/validators.ts @@ -217,12 +217,7 @@ function parseControllerBindings(value: unknown): ControllerConfigUpdate['bindin if (!parsed) return null; bindings[key] = parsed as NonNullable[typeof key]; } - const axisKeys = [ - 'leftStickHorizontal', - 'leftStickVertical', - 'rightStickHorizontal', - 'rightStickVertical', - ] as const; + const axisKeys = ['leftStickHorizontal', 'leftStickVertical', 'rightStickVertical'] as const; for (const key of axisKeys) { if (value[key] === undefined) continue; const parsed = parseAxisBinding(value[key]); diff --git a/src/types/runtime.ts b/src/types/runtime.ts index 09c6fede..18ef660a 100644 --- a/src/types/runtime.ts +++ b/src/types/runtime.ts @@ -253,7 +253,6 @@ export interface ControllerBindingsConfig { playNextSubtitle?: ControllerDiscreteBindingConfig; leftStickHorizontal?: ControllerAxisBindingConfig; leftStickVertical?: ControllerAxisBindingConfig; - rightStickHorizontal?: ControllerAxisBindingConfig; rightStickVertical?: ControllerAxisBindingConfig; } @@ -277,7 +276,6 @@ export interface ResolvedControllerBindingsConfig { playNextSubtitle?: ResolvedControllerDiscreteBinding; leftStickHorizontal?: ResolvedControllerAxisBinding; leftStickVertical?: ResolvedControllerAxisBinding; - rightStickHorizontal?: ResolvedControllerAxisBinding; rightStickVertical?: ResolvedControllerAxisBinding; }