aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortristan-iu <tristan.iung@hotmail.com>2026-06-21 17:56:42 +0200
committertristan-iu <tristan.iung@hotmail.com>2026-06-23 23:54:42 +0200
commit9d78591d2bc36840b776f2cc5600471f7ea9992b (patch)
tree1f37776cdf7b94d9bc6b0ecc4eefd39db03a78b6
parenta5ad5ddc9df898cffad7e7a0996051a455fc99fc (diff)
Skip FUSE mount for games that manage their own VFS
-rw-r--r--src/src/organizercore.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/src/organizercore.cpp b/src/src/organizercore.cpp
index 64772fa..2f62251 100644
--- a/src/src/organizercore.cpp
+++ b/src/src/organizercore.cpp
@@ -809,7 +809,14 @@ void OrganizerCore::prepareVFS()
m_USVFS.setRootBuilderEnabled(vfsRootBuilder, storageDir.toStdString());
}
- m_USVFS.updateMapping(fileMapping(m_CurrentProfile->name(), QString()));
+ // Games that manage their own VFS (e.g. OpenMW via openmw.cfg) opt out of the
+ // FUSE mount; Fluorine must not overlay Data Files for them.
+ if (managedGame() == nullptr || managedGame()->usesVFS()) {
+ m_USVFS.updateMapping(fileMapping(m_CurrentProfile->name(), QString()));
+ } else {
+ log::debug("prepareVFS: skipping FUSE mount; managed game manages its own "
+ "VFS (usesVFS=false)");
+ }
}
void OrganizerCore::unmountVFS()
@@ -2687,8 +2694,14 @@ bool OrganizerCore::beforeRun(
}
try {
- m_USVFS.updateMapping(fileMapping(profileName, customOverwrite));
- m_USVFS.updateForcedLibraries(forcedLibraries);
+ // OpenMW and other self-managed-VFS games skip the FUSE mount (usesVFS()).
+ if (managedGame() == nullptr || managedGame()->usesVFS()) {
+ m_USVFS.updateMapping(fileMapping(profileName, customOverwrite));
+ m_USVFS.updateForcedLibraries(forcedLibraries);
+ } else {
+ log::debug("beforeRun: skipping FUSE mount; managed game manages its own "
+ "VFS (usesVFS=false)");
+ }
} catch (const FuseConnectorException& e) {
log::error("VFS mount failed: {}", e.what());
return false;