Skip to content

ModSync 1.1.0-beta1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Oct 00:33
· 8 commits to main since this release

Install on Steam Deck / Linux

Download the bundle for your machine: ModSync-1.1.0b1-x86_64.flatpak for the Steam Deck
and other PCs, or ModSync-1.1.0b1-aarch64.flatpak for ARM machines such as the Steam
Frame. Then in Desktop Mode either open it with Discover, or run:

flatpak install --user ModSync-1.1.0b1-x86_64.flatpak   # or ModSync-1.1.0b1-aarch64.flatpak
flatpak run io.github.skjiisa.ModSync

Full instructions, including the from-source route, are in the README.

Changes

A beta of the controller-first interface, for testing an end-to-end install of
the Flatpak on a Steam Deck before 1.1.0. Also brings Play through MO2 from
Steam's Play button as Steam's own launch, the optional ARM64 USVFS fix and
Visual C++ runtime install, and an aarch64 bundle.

Added

  • An ARM64 USVFS fix for the files shipped with MO2 2.5.2. "Apply ARM64 fix"
    appears under Mod Organizer, also while Steam waits on ModSync. It
    downloads a pinned build with the injection-stub stack-alignment fix,
    verifies the archive and each binary, and backs up the originals. The build comes from ModSync's mirror of
    ndabas's release, which also carries the source, with the original release
    as a fallback. "Restore original USVFS" reverses it.
    Unknown builds are left unchanged. The same actions are available through
    modsync mo2 usvfs status|apply|restore; doctor reports the fix's status.
    Changes are refused while MO2, or any game or tool it started, still has
    the files loaded. Tested on a Steam Frame: modded Skyrim through Steam's
    Play button and MO2, Apply and Restore from the launch hub, and offline
    reapplication from the cache.

  • When an instance's USVFS is 0.5.7 or newer and the game's Proton prefix
    only has the old Visual C++ runtime (or Wine's stand-in), the app
    offers to install Microsoft's current runtime into the prefix. USVFS 0.5.7+
    uses the runtime of the programs MO2 starts, so without it nothing started
    from MO2 runs. The pinned, checked redistributable is installed silently
    through the game's Proton after backing up the DLLs it replaces; it never
    happens without a click. modsync doctor shows each instance's USVFS
    version and this check. Tested on a Steam Frame, from the Flatpak too.

  • An aarch64 Flatpak bundle next to the x86_64 one, for ARM machines such as
    the Steam Frame. It bundles the arm64 Syncthing build. Not yet tested on an
    ARM device.

Changed

  • Steam's Play button now leads to the same Play Skyrim and Open Mod
    Organizer 2 as opening ModSync directly: the selected MO2 profile, SKSE
    when it is installed, and the same checks. Before, Continue only carried on
    to whatever Steam was about to start, which without MO2-LINT's redirector
    was the unmodded game. ModSync hands the MO2 command line back to the
    launch hook, which runs it as Steam's own launch, so Steam still tracks the
    game and syncs its cloud saves when it exits. Verified on the desktop: a
    save written while MO2 ran under Steam was uploaded right after it closed,
    with a matching SHA-1. Continue remains for a machine with no MO2 instance
    chosen. Existing hooks are updated when ModSync opens.

  • A new interface, designed for a controller first. The dashboard and its
    dialogs are gone. The window now has five sections (Home, Game, Mod
    Organizer, Sync and System), switched with LB and RB, Q and E, or by moving
    up onto the tabs. Every action is a large tile that shows the description a
    tooltip used to hide. A single outline marks the focused tile, and a hint
    bar shows which button does what, with PlayStation symbols for a
    PlayStation controller. Questions, text entry, PIN entry and folder picking
    open in sheets inside the window instead of separate dialogs, and the hint
    bar names what A does on the focused control. Text entry has an on-screen
    keyboard with a symbols layer, shifted punctuation, cursor movement,
    selection and a Paste key, and the PIN pad works like a combination lock.
    Home recommends a repair when the game version or SKSE does not match, or
    Steam has an update waiting. Play stays available with the consequence
    explained. Home has a readiness checklist (game version, SKSE, Mod
    Organizer 2, sync) next to Play, or Continue when Steam's Play button
    opened ModSync. The setup wizard reuses the same parts. Its last step keeps
    Finish at the top, or "Finish anyway" with the repair focused when the game
    version still doesn't match. System and Game use shorter tile
    descriptions, and System's settings details and controls open in their own
    sheets. B on Home, or "Quit ModSync" under System, asks to quit, so ModSync
    can be closed without a mouse. A mouse or touch screen works on its own
    too: sections scroll with a finger, the hint bar becomes buttons for Back,
    Cancel and Quit, and the PIN sheet has digits to tap. ModSync always uses its dark theme now.

  • Controllers work two ways. Outside games, Steam Input's desktop
    configuration turns buttons into keys, and ModSync reads them back as the
    buttons that sent them: Space is Y on a Steam Deck and B on a Steam
    Controller, Xbox or PlayStation pad, Page Up/Down are X/Y on the latter, and
    a tap of Ctrl or Alt is LB or RB. It tells which applies from the hardware
    in /sys. ModSync also reads controllers directly through SDL2, from the
    Flatpak runtime or SteamOS, which covers the virtual pad Steam provides in
    Gaming Mode. A press that arrives both ways counts once, and presses are
    ignored while another window is in front. The Flatpak gains
    --device=input for this. MODSYNC_GAMEPAD=0 turns direct reading off.
    The controls are listed in docs/advanced.md.

  • Steam's Play button opens the regular ModSync window instead of a separate
    launch hub. While Steam waits, Play turns into Continue, which hands the
    launch on to MO2-LINT or the game, and "Cancel launch" returns to Steam.
    Open MO2 is hidden then, so ModSync never starts a second Proton in the
    game's prefix next to Steam's. The Mod Organizer 2 card shows the selected
    profile and its enabled mod count. A warning above Continue says when the
    vault is still syncing. Esc no longer cancels the launch.

  • Install MO2 uses MO2-LINT 7.0.1 (was 7.0.0-rc7). The download is checked
    against the release's SHA-256, and the cached copy is named by version so
    a new pin replaces the old binary instead of reusing it.

  • On ARM64 machines such as the Steam Frame, the Play button hook finds
    Valve's ARM64 Proton builds and hands off to the one Steam would run.

  • On machines other than x86_64, Install MO2 says up front that MO2-LINT
    only ships an x86_64 build. It no longer tries to run that build.

  • When a game is left on "Default" in Steam, the Play button hook now hands
    off to the Proton Steam would pick: Valve's recommendation for the game on a
    Steam Deck or Steam Frame, then your global choice, then Proton stable. It
    used to prefer Proton Experimental.

  • On the Steam Frame, where Steam can't be restarted, queued changes (the
    Play button switch, the update pin) tell you to reboot instead. The background
    service applies them before Steam starts. Tested on a Frame.

Fixed

  • Play refuses an MO2 instance that hasn't been told which game it manages,
    and says to finish setting it up in MO2. MO2 would otherwise stop at
    "Select the game managed by this instance".

  • Steam Cloud stopped syncing Skyrim saves while the Play button switch was
    on. Steam maps a game's Windows save folders into its Proton prefix only
    for a compatibility tool whose internal name contains "proton", and the
    hook was named modsync_489830_hub. Steam couldn't resolve the save folder,
    so it skipped every save while still reporting the sync as complete. The
    hook is now modsync_489830_proton. When ModSync opens or the
    background service starts, an existing hook is moved to the new name and
    Steam is switched over to it, after a Steam restart if Steam is running.
    Saves made under the old name are still in the prefix, where Steam finds
    them again once the game launches through the new name.

  • In the Flatpak, modsync doctor and modsync diagnostics pointed at a
    launch hook log inside the sandbox that is never written. Steam runs the
    hook on the host, so they now read the host's ~/.local/state/modsync/launch-hook.log.

  • When Steam couldn't be closed and you picked the Play button switch under
    Properties, then Compatibility yourself, ModSync kept saying it was waiting
    for Steam to close, and would have re-applied the switch the next time
    Steam closed, undoing any choice made since. A queued switch that is
    already in place is now dropped. Tested on a Steam Frame.

  • With MO2-LINT's tool selected and the Play button switch off, the status
    now says Play opens Mod Organizer 2 (MO2-LINT), not the game directly.

  • The Flatpak didn't recognise SteamOS: inside the sandbox /etc/os-release
    describes the Flatpak runtime. ModSync now reads the host's
    /run/host/os-release, so on a Steam Frame it says to reboot instead of
    restarting Steam, and Valve's Steam Deck/Frame Proton recommendations apply.
    Tested on a Frame.

  • modsync service install failed in the Steam Frame's desktop terminal,
    because the nested Plasma session's XDG_RUNTIME_DIR has no systemd user
    bus. ModSync now falls back to the login session's. The Flatpak failed the
    same way, since flatpak-spawn --host runs systemctl in that nested
    session, and now passes the login session's directory to the host.

  • On ARM64, ModSync no longer picks one of Valve's x86_64 Protons, which can't
    run there. When Skyrim is set to a Proton with no ARM64 build, the launch
    hook and Open MO2 use Steam's ARM64 default, as Steam does.

  • MO2 2.5 crashed at start-up, writing hundreds of crash dumps, when Skyrim's
    Proton prefix had only the 2016 Visual C++ runtime that the game installs.
    When the prefix's runtime is missing, Wine's stand-in or older than 14.40,
    Open MO2 and Play now first copy a current runtime (14.44) next to
    ModOrganizer.exe, unpacked from Microsoft's redistributable. It is
    downloaded once and checked against a pinned SHA-256; the prefix is not
    changed. Prefixes set up by Install MO2 already have a current runtime, so
    nothing is downloaded there. Tested on a Steam Frame.

  • On the Steam Frame's desktop, MO2 opened with Open MO2 or Play closed as soon
    as one of its dialogs closed. The desktop is nested inside gamescope, and
    Proton put MO2 on gamescope's display but the rest of Wine on the desktop's.
    ModSync now runs the whole launch on gamescope's display, with gamescope's
    Vulkan layer off, and says to use a mouse or the keyboard there: the VR
    pointer still makes MO2 close (Wine lacks a touch function Qt calls).
    Tested on a Frame.