aboutsummaryrefslogtreecommitdiff
path: root/libs/game_bethesda
diff options
context:
space:
mode:
Diffstat (limited to 'libs/game_bethesda')
-rw-r--r--libs/game_bethesda/src/gamebryo/CMakeLists.txt6
-rw-r--r--libs/game_bethesda/src/gamebryo/gamegamebryo.cpp43
-rw-r--r--libs/game_bethesda/src/games/ttw/CMakeLists.txt6
-rw-r--r--libs/game_bethesda/src/games/ttw/gamefalloutttw.cpp31
4 files changed, 30 insertions, 56 deletions
diff --git a/libs/game_bethesda/src/gamebryo/CMakeLists.txt b/libs/game_bethesda/src/gamebryo/CMakeLists.txt
index bbc47ae..9e5970b 100644
--- a/libs/game_bethesda/src/gamebryo/CMakeLists.txt
+++ b/libs/game_bethesda/src/gamebryo/CMakeLists.txt
@@ -58,11 +58,7 @@ target_link_libraries(game_gamebryo
$<IF:$<TARGET_EXISTS:lz4::lz4>,lz4::lz4,PkgConfig::LZ4>
)
-# NaK FFI for game detection (replaces Windows registry)
-if(TARGET mo2::nak_ffi)
- target_link_libraries(game_gamebryo PRIVATE mo2::nak_ffi)
- target_compile_definitions(game_gamebryo PRIVATE HAS_NAK_FFI)
-endif()
+# Game detection symbols are in libuibase.so (already linked via mo2::uibase).
target_include_directories(game_gamebryo PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp b/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
index 2fd45cd..9d29dcf 100644
--- a/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
+++ b/libs/game_bethesda/src/gamebryo/gamegamebryo.cpp
@@ -39,8 +39,9 @@
#include <winver.h>
#endif
-#ifdef HAS_NAK_FFI
-#include <nak_ffi.h>
+#ifndef _WIN32
+#include "gamedetection.h"
+#include "steamdetection.h"
#endif
#include <optional>
@@ -230,12 +231,9 @@ QFileInfo GameGamebryo::findInGameFolder(const QString& relativePath) const
QString GameGamebryo::identifyGamePath() const
{
-#ifdef HAS_NAK_FFI
- // Use NaK to detect game installations on Linux
- NakGameList gameList = nak_detect_all_games();
- ON_BLOCK_EXIT([&]() {
- nak_game_list_free(gameList);
- });
+#ifndef _WIN32
+ // Detect game installations on Linux.
+ const GameScanResult scanResult = detectAllGames();
QString shortName = gameShortName();
QString fullName = gameName();
@@ -258,17 +256,14 @@ QString GameGamebryo::identifyGamePath() const
return anyToken;
};
- for (size_t i = 0; i < gameList.count; ++i) {
- const NakGame& game = gameList.games[i];
- QString detectedName = QString::fromUtf8(game.name);
- QString detectedPath = QString::fromUtf8(game.install_path);
- if (detectedName.compare(fullName, Qt::CaseInsensitive) == 0 ||
- detectedName.compare(shortName, Qt::CaseInsensitive) == 0 ||
- detectedName.contains(fullName, Qt::CaseInsensitive) ||
- detectedName.contains(shortName, Qt::CaseInsensitive) ||
- tokensMatch(detectedName, fullName) || tokensMatch(detectedName, shortName)) {
- if (looksValid(QDir(detectedPath))) {
- return detectedPath;
+ for (const DetectedGame& game : scanResult.games) {
+ if (game.name.compare(fullName, Qt::CaseInsensitive) == 0 ||
+ game.name.compare(shortName, Qt::CaseInsensitive) == 0 ||
+ game.name.contains(fullName, Qt::CaseInsensitive) ||
+ game.name.contains(shortName, Qt::CaseInsensitive) ||
+ tokensMatch(game.name, fullName) || tokensMatch(game.name, shortName)) {
+ if (looksValid(QDir(game.install_path))) {
+ return game.install_path;
}
}
}
@@ -857,14 +852,8 @@ QString GameGamebryo::parseEpicGamesLocation(const QStringList& manifests)
QString GameGamebryo::parseSteamLocation(const QString& appid,
const QString& directoryName)
{
-#ifdef HAS_NAK_FFI
- // Use NaK to find Steam path
- char* steamPathC = nak_find_steam_path();
- QString steamLocation;
- if (steamPathC) {
- steamLocation = QString::fromUtf8(steamPathC);
- nak_string_free(steamPathC);
- }
+#ifndef _WIN32
+ QString steamLocation = findSteamPath();
#elif defined(_WIN32)
QString path = "Software\\Valve\\Steam";
QString steamLocation =
diff --git a/libs/game_bethesda/src/games/ttw/CMakeLists.txt b/libs/game_bethesda/src/games/ttw/CMakeLists.txt
index 828b67f..8a2b8b4 100644
--- a/libs/game_bethesda/src/games/ttw/CMakeLists.txt
+++ b/libs/game_bethesda/src/games/ttw/CMakeLists.txt
@@ -18,10 +18,6 @@ mo2_configure_plugin(game_ttw NO_SOURCES WARNINGS 4)
mo2_default_source_group()
target_link_libraries(game_ttw PRIVATE game_gamebryo)
-# NaK FFI for TTW game detection (TTW uses FalloutNV as base game)
-if(TARGET mo2::nak_ffi)
- target_link_libraries(game_ttw PRIVATE mo2::nak_ffi)
- target_compile_definitions(game_ttw PRIVATE HAS_NAK_FFI)
-endif()
+# Game detection symbols are in libuibase.so (already linked via game_gamebryo → mo2::uibase).
mo2_install_plugin(game_ttw)
diff --git a/libs/game_bethesda/src/games/ttw/gamefalloutttw.cpp b/libs/game_bethesda/src/games/ttw/gamefalloutttw.cpp
index cfd8ca8..e09ddf0 100644
--- a/libs/game_bethesda/src/games/ttw/gamefalloutttw.cpp
+++ b/libs/game_bethesda/src/games/ttw/gamefalloutttw.cpp
@@ -15,9 +15,8 @@
#include <gamebryosavegameinfo.h>
#include <gamebryounmanagedmods.h>
-#ifdef HAS_NAK_FFI
-#include <nak_ffi.h>
-#include "scopeguard.h"
+#ifndef _WIN32
+#include "gamedetection.h"
#endif
#include <QCoreApplication>
@@ -85,23 +84,17 @@ QString GameFalloutTTW::identifyGamePath() const
QString path = "Software\\Bethesda Softworks\\FalloutNV";
result = findInRegistry(HKEY_LOCAL_MACHINE, path.toStdWString().c_str(),
L"Installed Path");
-#elif defined(HAS_NAK_FFI)
+#else
// TTW uses FalloutNV as its base game, so look for Fallout New Vegas
- // (the base class would try matching "TTW" which NaK doesn't know about)
- NakGameList gameList = nak_detect_all_games();
- ON_BLOCK_EXIT([&]() {
- nak_game_list_free(gameList);
- });
-
- for (size_t i = 0; i < gameList.count; ++i) {
- const NakGame& game = gameList.games[i];
- QString detectedName = QString::fromUtf8(game.name);
- if (detectedName.contains("Fallout", Qt::CaseInsensitive) &&
- detectedName.contains("Vegas", Qt::CaseInsensitive)) {
- QString detectedPath = QString::fromUtf8(game.install_path);
- if (looksValid(QDir(detectedPath))) {
- result = detectedPath;
- break;
+ {
+ const GameScanResult scanResult = detectAllGames();
+ for (const DetectedGame& game : scanResult.games) {
+ if (game.name.contains("Fallout", Qt::CaseInsensitive) &&
+ game.name.contains("Vegas", Qt::CaseInsensitive)) {
+ if (looksValid(QDir(game.install_path))) {
+ result = game.install_path;
+ break;
+ }
}
}
}