github chasem-dev/sms-launcher android-pr-107-v18
Android ARM64 tester v18: controller configuration in Settings

latest release: beta
pre-release3 hours ago

Android tester v18 adds Game settings → Controller configuration so players can assign their own controls.

Configure:

  1. Install over the previous preview to preserve disc/save data. Confirm footer 0.1.57-android-preview.18, launcher 59ef545a, game 3f661cfd; version code 15718.
  2. Open Controller configuration in Game settings and select the connected controller.
  3. Tap Assign beside a GameCube control, then press the physical button. For movement/camera axes, move the requested stick RIGHT or DOWN; capture detects the axis and its direction. L/R accept buttons or analog triggers; D-pad accepts keys, hats or axis directions. Release controls before assigning. If the first movement asks you to repeat, return to rest and move again.
  4. Clear disables an individual control. Unchanged controls keep the automatic layout. Save saves the selected controller's changes; they apply on the next Play.
  5. Restore defaults, then Save, removes that device's overrides. Done returns to the launcher and asks before discarding unsaved changes.

Layouts are saved per device descriptor and survive reconnects/app updates. Saved disconnected devices remain selectable for editing or restoring. Both landscape panels scroll, with fixed headings and build footer. Capture only accepts the selected device, suppresses held/repeated keys, and cancels on focus loss, pause or device changes. Drafts survive Activity recreation. The screen needs no imported disc to open.

Native code loads a private profile file on Play, matches device identity, validates actual input bounds and merges only edited controls into the automatic SDL mapping. It supports previously unmapped Android controllers as well as known layouts. A controller Back key explicitly assigned to a game control is forwarded to the game; Android navigation Back still exits.

Rumble: custom mappings use the Android input backend so captured button/axis numbering matches gameplay. Configured nonzero VID/PID pairs route away from HIDAPI (including other controllers of that model); this custom mode has no SDL controller rumble. Restore all profiles for that model to defaults and Save to restore automatic driver selection on the next Play. Unknown product-zero IDs never create a wildcard ignore. No new USB/storage permissions or background input monitor.

Validation: Android debug and optimized release APK builds passed. Launcher Node tests 228/228, all 10/10 host graphics groups, Java mapping-rule checks and real host SDL virtual-controller checks passed. They cover Android generic/named button IDs, SDK axis sorting, trigger rest/direction calibration, inversion, noise rejection, descriptor CRC (including JNI modified UTF-8), bounded serialization, profile file parsing/identity, malformed/out-of-range rejection, override/clear/default merging, actual mapped events, half-axis triggers, inverted axes and reconnect. Static APK audits verify configuration activity/version/source/profile strings, same signing key, ARM64-only/16 KiB packaging and no game data/self-test payload.

Physical UI/gameplay validation is pending. No Android emulator/container was installed, launched or tested for this build, as requested. Please check Assign/capture, Save/reopen, reconnect, clear/default restoration and actual gameplay. Export the game log before another Play if an assignment fails; it includes the accepted Android configured controller mapping. Existing Input test remains available for raw event diagnosis.

Existing memory/texture, widescreen and pacing fixes remain included. v15/v16/v17 release artifacts remain unchanged; no FPS gain or clock-policy change is claimed. Android 10+, ARM64, GLES 3.1+; no game data bundled. Separate prerelease, no merge or desktop Stable/Beta changes.

Both Android branches pushed: launcher 59ef545af26c9ef5026154415d8a5ae5db14c514, game 3f661cfda9d160425b46fea22ee3a81755eb2f55. Companion PRs #107 and chasem-dev/sms-pc-port#98.

SHA256: 59d19edf1b49282dcd70d436525963fadda6018212bcf6faa06da34c7ca224dd

Don't miss a new sms-launcher release

NewReleases is sending notifications on new releases.