aboutsummaryrefslogtreecommitdiff
path: root/libs/basic_games
Commit message (Collapse)AuthorAgeFilesLines
* Add OpenMW supporttristan-iu2026-06-233-0/+479
|
* Add Red Dead Redemption 2 supportSulfurNitride2026-06-101-0/+99
|
* Update MO2 beta 12 integrationSulfurNitride2026-05-242-2/+2
|
* Fix native Stardew launch pathsSulfurNitride2026-05-231-1/+105
|
* mo2: catch up to upstream 2.5.3 Betas 3-11SulfurNitride2026-05-162-0/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Multi-area sync against the upstream MO2 2.5.3 beta line. Roughly three logical sections share the diff: Catch-up (Betas 3-11): - nxmaccessmanager: drop "supporter" from validRoles so non-premium supporters get the right download path (Beta 10) - mainwindow: disable tutorial triggers at the trigger sites; Qt 6.11 lockup on child windows (Beta 4) - basic_games: add Kingdom Come Deliverance 2, Slay the Spire 2 (Betas 11, 6) - uibase: add NXM collections parsing fields/accessors + (?:nxm|modl) scheme support in NXMUrl (Beta 9) - Starfield: blueprintPrefix() on IPluginGame; plugins.txt write suppression for blueprint plugins; hasInvalidBlueprint / hasUnpairedBlueprint diagnoses; Title-keyed content catalog consolidation (Betas 3-5) - downloadmanager + systemtraymanager + organizercore + iuserinterface + settings: add Beta 11 "show notifications when downloads complete or fail" toggle and the showNotification plumbing - nxmaccessmanager: restore upstream re-entry guard for OAuth refresh and the styled OAuth response page (Beta 11) - organizer_en.ts and game-bethesda *_en.ts: pull upstream HEAD strings Workarounds tab removed: - Delete settingsdialogworkarounds.{h,cpp}; drop the tab in settingsdialog.ui; move "Enable archives parsing" into General - Hardcode GameSettings::forceEnableCoreFiles() to true so the primary-master toggle-off bug (DLCs unchecked on tab refresh) can't recur; setter becomes a no-op - No-op stubs for offlineMode, useProxy, useCustomBrowser, Steam appID/credentials, executablesBlacklist, skipFileSuffixes, skipDirectories — UI gone, accessors keep call sites green - settingsdialognexus drops the custom-browser wiring; spawn drops the "Change the blacklist" Retry path Beta 9 download manager port: - fileID-first match in nxmFilesAvailable and nxmFileInfoFromMd5Available; filename remains the fallback - NexusInterface::isActiveFileStatus() helper; rewrite of nxmUpdatesAvailable to use pickNewestVersion / findUpdateChainSuccessors / resolveInstalledFileId. ARCHIVED_HIDDEN now correctly treated as inactive - std::optional<unsigned int> reservedID on DownloadInfo factories and on the three addDownload overloads; startDownloadURLs and startDownloadURLWithMeta return the canonical DownloadID instead of m_ActiveDownloads.size()-1 (which was the index, not an ID) - QHash<unsigned int, DownloadInfo*> m_ByID maintained alongside m_ActiveDownloads at every mutation site; downloadInfoByID is now O(1) via m_ByID.value(id, nullptr) LOOT remains intentionally stripped (lootcli build cruft cleaned up separately). BSA wide-path skipped — Linux UTF-8 paths already work. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* games: Ready or Not — accept both Steam and Epic binary namesSulfurNitride2026-05-161-2/+17
| | | | | | | | | | | | | | | | | The Steam build of Ready or Not ships its main executable as ReadyOrNotSteam-Win64-Shipping.exe; the non-Steam build (Epic / GOG) ships plain ReadyOrNot-Win64-Shipping.exe. The shipped plugin only listed the latter, so Steam users hit "game directory not valid" and couldn't open the instance. Override looksValid() to accept either binary so detection works out of the box for both stores. GameBinary defaults to the Steam variant since Fluorine is Steam/Proton-oriented; the override makes the non-Steam binary equally valid for instance opening. Bump plugin version to 0.0.0.2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* bg3: tolerate dangling Wine-prefix symlinks in metadata dirsSulfurNitride2026-05-161-4/+23
| | | | | | | | | | | | | | | | | | When the BG3 metadata path (e.g. AppData/Local/Larian Studios) is a symlink left over from a previous prefix setup that points at a Steam compatdata path which no longer resolves, pathlib's mkdir(parents=True, exist_ok=True) raises FileExistsError — exist_ok only suppresses the error when the path is an actual directory, and a dangling symlink fails is_dir(). The launch crashed in bg3_file_mapper.create_mapping before any mods were deployed. Walk the path top-down on FileExistsError. For each component that's a dangling symlink, resolve its target via os.path.realpath and create the directory there so the symlink becomes valid and the original mkdir succeeds. Cross-prefix sharing (the reason these symlinks exist) is preserved. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* bump to larian-formats 0.8.1Saghm Rossi2026-05-161-1/+1
| | | | | | | | Contains the following changes: * Older mod formats (v15 and v16) supported * Less strict meta.lsx parsing (empty values will use the default for the type) * zstd compression support
* pass correct path when packing loose filesSaghm Rossi2026-05-141-1/+1
|
* skip log warning when parsing packed loose filesSaghm Rossi2026-05-141-6/+13
|
* Replace LsLib via proton with native larian-formats Python packageSaghm Rossi2026-05-147-424/+23
|
* bg3: publish only top-level overwrite mappings to avoid self-symlinksSulfurNitride2026-05-141-10/+26
| | | | | | | | | | | | | | | | | After the first launch, doc/Stats -> overwrite/Stats (and siblings) are deployed as directory symlinks. The next mappings() pass rglob'd overwrite/ and emitted a Mapping for every nested entry — destinations resolved back through the parent symlink to the source, so both create_mapping's unlink+symlink_to and fuseconnector's create_directory_symlink ended up operating on a path that physically *was* the source, producing self-pointing symlinks and wiping the directory contents on the next launch. Emit one directory mapping per redirected top-level subdir instead. The parent symlink covers everything underneath via normal path resolution, so no nested mapping is generated and the alias condition can't arise. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Clean up empty dirs left by VFS, suppress noisy Qt debugSulfurNitride2026-04-301-6/+1
| | | | | | | | | | | | | | | Fixes #64: VFS now tracks the directories it creates outside the data dir (external mappings + RootBuilder game-root deploys) and removes them on unmount, but only if still empty. Pre-existing user dirs and the game root itself are never touched. RootBuilder manifest gains a "dirs" field so the cleanup survives a crashed session. Also drops a Path-repr qDebug in bg3_file_mapper that crashed Qt's logger on surrogate-escaped paths, and defaults QT_LOGGING_RULES to default.debug=false in the launcher and AppRun (still overridable) so the same class of plugin bug stays muted in shipped builds. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Detect native-Linux Stardew Valley, default executables to no-ProtonSulfurNitride2026-04-251-2/+34
| | | | | | | | | | | | | | | | | Add IPluginGame::isNativeLinux() (virtual, default false) so a plugin can advertise that the discovered installation is a native Linux build. Bound through the Python plugin trampoline so basic_games subclasses can override it. Stardew Valley plugin: when the install dir contains the StardewValley launcher script and no Stardew Valley.exe, report isNativeLinux=true and return Linux-side binary names (StardewValley, StardewModdingAPI). Also fix GameDataPath to "Mods" — Linux ships the SMAPI mods dir with a capital M. ExecutablesList::getPluginExecutables: skip the UseProton flag when the plugin reports native Linux, so the spawn path falls into launchDirect() and the game runs without a Wine prefix.
* Add Stalker 2: Heart of Chornobyl pluginSulfurNitride2026-04-121-0/+52
| | | | | | Vendored BasicGame plugin from upstream modorganizer-basic_games. Auto-moves loose *.pak/*.utoc/*.ucas files under Content/Paks/~mods/ on install.
* Replace winetricks dependency setup with native implementationsSulfurNitride2026-04-051-0/+22
| | | | | | | | | | | | | | | | | | | | Direct DLL extraction and installer execution instead of shelling out to winetricks for all prefix dependencies. Fixes d3dcompiler_47 being sourced from wrong SDK cabs (broke CommunityShaders), and eliminates the fragile cabextract-in-pressure-vessel PATH issue. - d3dcompiler_47: direct download from Mozilla fxc2 repo - d3dcompiler_43, d3dx9, d3dx11_43: cabextract from DirectX June 2010 redist with correct system32/syswow64 mapping - xact/xact_x64: cab extraction + batched regsvr32 registration - vcrun2022: direct installer with msvcp140.dll workaround (Wine #57518) - dotnet6/7/8, dotnetdesktop6: direct x86+x64 installer pairs - Game detection: batched into single .reg file import - All DLL overrides added to WINE_SETTINGS_REG - SHA256 verification for downloaded files - Winetricks kept only for win11 mode step Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Fix Steam game mode: strip LD_PRELOAD, robust looksValid(), restore env for ↵SulfurNitride2026-03-171-0/+1
| | | | | | | | | | | | | | | | | | games Steam injects 32-bit gameoverlayrenderer.so via LD_PRELOAD which causes "wrong ELF class" errors for 64-bit Qt6 apps. Save and clear LD_PRELOAD in both launcher and AppRun scripts, restore it in ProtonLauncher for game processes. Also hardens looksValid() with QFileInfo::exists() for absolute paths (QDir::exists() has edge cases with relative subdirectory paths), adds case-insensitive directory walking fallback, and adds debug logging to both looksValid() and detectGame(). Adds ~/.steam/debian-installation to Python steam_utils.py candidates. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix Steam game mode: clear LD_LIBRARY_PATH, deploy native basic_games, add ↵SulfurNitride2026-03-173-1/+13
| | | | | | | | | | | | | | | | | | | | | env var detection Steam game mode injects its scout/soldier runtime into LD_LIBRARY_PATH, which breaks Python extension modules and Qt internals that resolve dependencies via LD_LIBRARY_PATH rather than RPATH. This caused all Python-based basic_games plugins (Witcher 3, Oblivion Remastered, BG3, etc.) to fail to load when launched through Steam. Changes: - Launcher script: set LD_LIBRARY_PATH to only bundled lib/ dir instead of leaving Steam's runtime in the path - AppRun: same fix — replace rather than append to LD_LIBRARY_PATH - Deploy libbasic_games_native.so in tarball (was built but never copied) so basic_games entries work without Python dependency - Add STEAM_COMPAT_CLIENT_INSTALL_PATH env var check to Python steam_utils.py (mirrors C++ fix from e41a79a) for game mode detection Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fix DDS and winreg missing in Python pluginsSulfurNitride2026-03-131-1/+9
| | | | | | | | | | | - Stage DDS/ package from source directly to plugins/data/DDS/ in build-inner.sh (cmake MO2_STAGE_PYTHON_PLUGIN_PAYLOAD is OFF by default so the cmake-sourced path was silently skipped) - Stage winreg.py from libs/ directly as well (same root cause) - Guard `import winreg` in gog_utils.py with try/except ImportError and early-exit to Heroic GOG path if the shim is unavailable Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Add Python init diagnostics, AppImage build system, misc Linux fixesSulfurNitride2026-02-192-15/+21
| | | | | | | | | | | | | | | | | | | | - python: switch Py_InitializeEx → Py_InitializeFromConfig for explicit error reporting; add dladdr + fprintf diagnostics to trace which DSO Python symbols resolve to and whether Py_IsInitialized succeeds - python: log RTLD_NOLOAD vs fresh-load outcome when promoting libpython to RTLD_GLOBAL - build: add Docker-based AppImage build script (build.sh), update Dockerfile and build-inner.sh for AppImage-only workflow - build: remove Flatpak support entirely; move AppImage metadata (desktop/metainfo/icon) from flatpak/ to data/ - Add Monster Hunter Wilds basic_games plugin - .gitignore: exclude squashfs-root, build-source, flatpak-repo, __pycache__, fomod-plus-settings.ini - Various Linux port fixes across wineprefix, processrunner, proton launcher, FUSE connector, instance manager, download manager, sanitychecks, and NaK Rust paths/runtime_wrap Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Migrate data paths to ~/.local/share/fluorine/, add native build, fix ↵SulfurNitride2026-02-141-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | %command% and system Proton scanning - All data paths migrated from ~/.var/app/com.fluorine.manager/ to ~/.local/share/fluorine/ so native and Flatpak builds share the same instances, plugins, and configs - New fluorinepaths.h/.cpp with fluorineDataDir() helper and one-time migration from old path (writes MOVED.txt breadcrumb) - New libs/nak/src/paths.rs as Rust equivalent (data_dir()) - Strip %command% tokens from launch wrapper in protonlauncher.cpp - Always scan /usr/share/steam/compatibilitytools.d/ for system Proton packages (Arch installs Proton there); add Flatpak filesystem permission - Native build (build-native.sh) installs to ~/.local/share/fluorine/ with desktop entry and ~/.local/bin symlink instead of portable zip - build-flatpak.sh wrapper for Flatpak builds - Fix container locale (LANG=C.UTF-8) for AutoUic warnings - Fix prefixExists() to handle both compatdata and pfx directory layouts - Fix globalInstancesRootPath() to use fluorineDataDir() on Linux - Fix umu-run Flatpak lookup to use fluorineDataDir() - Update README with build instructions and Arch dependency list Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add FUSE external mapping support, BG3/Oblivion Remastered fixes, fomod-plus ↵SulfurNitride2026-02-1411-42/+267
| | | | | | | | | | | | | | | and NaK integration FUSE VFS now deploys non-data-dir mod mappings (Paks, OBSE, UE4SS, etc.) via real symlinks and injects file-level data-dir mappings (plugins.txt, loadorder.txt) into the VFS tree. Fixes game launches for Oblivion Remastered (Root Builder path resolution, script extender support) and BG3 (Wine prefix documents directory, file mapper symlinks on Linux). Vendors mo2-fomod-plus plugin and NaK crate for FOMOD installer and game finder/runtime support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add Root Builder plugin, Linux game detection, and OMOD installer fixSulfurNitride2026-02-113-3/+78
| | | | | | | | | | | | | | | | | | | | | - New native Root Builder plugin (src/plugins/rootbuilder.py) with copy and symlink deploy modes, auto-deploy hooks, backup/restore, and third-party conflict detection that moves incompatible plugins to DisabledPlugins/. In link mode, .exe/.dll are always copied to avoid Wine/Proton path resolution issues with symlinked executables. - Fix basic_games detection on Linux: steam_utils now checks native Steam paths (~/.local/share/Steam, Flatpak, Snap), epic_utils uses correct Linux Heroic config paths, gog_utils falls back to Heroic GOG installed.json when Windows registry is unavailable. - Fix OMOD installer crash: isArchiveSupported now handles both IFileTree (from mod list refresh) and string (from install check) arguments. - Add flatpak manifest step to copy source-tree Python plugins (src/plugins/*.py) into the build output. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Fluorine Manager: full Linux port of Mod Organizer 2SulfurNitride2026-02-11135-0/+12867
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>