Skip to content

JoyShockLibrary.dll causes silent crash at launch on Linux/Proton with Switch Pro controller connected #1426

Description

@littlegamer87

Howdy,

With a controller plugged in, the game launches, plays intro audio, shows a bstuck fade-in (sometimes with corrupted geometry along the bottom edge) or a black window, then crashes. Unplugging the controller before launch makes the game run perfectly. Renaming x64/FF9_Data/Plugins/JoyShockLibrary.dll to disable it also fully resolves the issue and the controller then works normally through standard XInput.

  • OS: Bazzite (Fedora Atomic-based, immutable)
  • Proton: tested with stock Proton (Steam default), Proton Experimental, and GE-Proton — same crash on all three
  • Memoria version: 2025-07-13 (installed via the official dotaxis/memoria.sh Linux installer)
  • Mods: reproduced both with MoguriMain enabled and with all mods disabled
  • Controller: Switch Pro connected via USB

Steps to reproduce

  • Fresh FFIX install on Linux via Steam/Proton.
  • Install Memoria using the official Linux installer script.
  • Connect controller.
  • Launch FFIX from Steam.

Result: Memoria engine runs as expected. Launching the game opens a window, audio plays, process crashes within ~2 seconds, music keeps playing. No managed exception in Memoria.log
Expected: Game reaches title screen normally.

Diagnosis

PROTON_LOG=1 capture shows no segfault — the last meaningful event is:
trace:loaddll:build_module Loaded L"...\FF9_Data\Plugins\JoyShockLibrary.dll" at 0x6ffff9b00000: native
…followed by a fork and a clean process exit (pid X != Y, skipping destruction (fork without exec?)). DXVK initialized successfully and was already mid-ResetSwapChain. No c0000005 / page-fault. The only "exceptions" in the log are benign DBG_PRINTEXCEPTION_C lines from Memoria's own trace logging.

Things ruled out during troubleshooting

  • Proton version (stock / Experimental / GE-Proton — identical behavior)
  • The 2K video pack (disabled, no change)
  • MoguriMain itself (disabled, no change)
  • Steam Input toggle (no effect — JoyShockLibrary opens the HID device directly, bypassing Steam Input)
  • Re-running the Memoria patcher (no change)

Workaround

Rename x64/FF9_Data/Plugins/JoyShockLibrary.dll to something else. Game launches and controller works normally via XInput through Steam Input.

Suggestions

Wrap JoyShockLibrary initialization in a try/catch so a failure inside the native lib doesn't take the process down silently.
On Linux/Proton, consider skipping JoyShockLibrary by default and exposing it as an opt-in launcher setting, since standard XInput via Steam Input covers the common case and JoyShockLibrary's hidraw access is fragile under Proton.
At minimum, log JoyShockLibrary init success/failure to Memoria.log so this kind of issue is visible without a wine debug capture.

Tail of Memoria.log showing clean init through to where the process dies:

28.05.2026 07:47:56 |M| [SteamSdkWrapper] Initialized: True
28.05.2026 07:47:56 |M| [KeyBinding] Succesfully parsed movement key bindings (W, A, S, D)
28.05.2026 07:47:56 |M| [KeyBinding] Succesfully parsed pause key bindings (Backspace)
28.05.2026 07:47:56 |M| [KeyBinding] Succesfully parsed help key bindings (Alpha1)
28.05.2026 07:47:56 |M| [FontInterceptor] Dynamic font initialization.
28.05.2026 07:47:56 |M| [FontInterceptor] Pass through {Configuration.Font.Enabled = 0}.
28.05.2026 07:47:56 |M| [Initialization] Memoria version: 2025-07-13
28.05.2026 07:47:56 |M| [Initialization] OS version: Microsoft Windows NT 10.0.19045.0
28.05.2026 07:47:56 |M| [Initialization] Mods: 'MoguriMain'
28.05.2026 07:47:56 |M| [DataPatchers] Initialized
28.05.2026 07:47:57 |M| [FontInterceptor] Loading font [Original: TBUDGoStd-Bold (UnityEngine.Font)]
28.05.2026 07:47:57 |M| [SaXAudio] Initialized
28.05.2026 07:47:57 |M| [UIRoot] Changing a clip region of the UI root.
28.05.2026 07:47:57 |M| [WindowProc] Windows procedure registered
28.05.2026 07:47:57 |M| [GameLoopManager] RaiseStartEvent
28.05.2026 07:47:58 |M| Updating text localization [English(US)]
28.05.2026 07:47:58 |M| InitializeItemText
28.05.2026 07:47:58 |M| InitializeImportantItemText
28.05.2026 07:47:58 |M| InitializeAbilityText
28.05.2026 07:47:58 |M| InitializeCommandText
28.05.2026 07:47:58 |M| InitializeLocationText
28.05.2026 07:47:58 |M| InitializeEtcText
28.05.2026 07:47:58 |M| InitializeCharacterNamesText
28.05.2026 07:47:58 |M| Total text update time: 0.07s
28.05.2026 07:47:58 |M| [AudioResourceExporter] Pass through {Configuration.Export.Audio = 0}.

Relevant pieces of ~/steam-377840.log — DXVK initialized fine, then JoyShockLibrary loads and the process exits cleanly:

info:  DXVK: Using 20 compiler threads
39958.185:0274:02e0:warn:threadname:NtSetInformationThread Thread renamed to L"dxvk-descriptor"
39958.185:0274:02e4:warn:threadname:NtSetInformationThread Thread renamed to L"dxvk-cs"
info:  D3D9DeviceEx::ResetSwapChain:
info:      - Format:             D3D9Format::A8R8G8B8
info:                  ^ Format: D3D9Format::D24S8
39960.238:0274:0404:warn:threadname:NtSetInformationThread Thread renamed to L"dxvk-frame"
info:  D3D9DeviceEx::ResetSwapChain:
info:      - Format:             D3D9Format::A8R8G8B8
info:                  ^ Format: D3D9Format::D24S8
39961.204:0274:0278:trace:loaddll:build_module Loaded L"S:\\common\\FINAL FANTASY IX\\x64\\FF9_Data\\Plugins\\JoyShockLibrary.dll" at 00006FFFF9B00000: native
39967.158:0120:0180:trace:mscoree:DllMain (00006FFFFDA70000, 3, 0000000000000000)
pid 131739 != 131738, skipping destruction (fork without exec?)

Thank you all so much for this amazing mod. I am having a blast. Hope this bug report helps!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions