diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index 711a3a7..2ecd148 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -7,18 +7,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - with: - path: "basic_games" - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.12 - uses: abatilo/actions-poetry@v2 - name: Install - run: | - cd basic_games - poetry --no-root install + run: poetry --no-root install - name: Lint - run: | - cd basic_games - poetry run poe lint + run: poetry run poe lint diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e8070c..a96081e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,10 @@ cmake_minimum_required(VERSION 3.16) -if(DEFINED DEPENDENCIES_DIR) - include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/mo2.cmake) -else() - include(${CMAKE_CURRENT_LIST_DIR}/../cmake_common/mo2.cmake) -endif() - project(basic_games LANGUAGES NONE) + +find_package(mo2-cmake CONFIG REQUIRED) + +mo2_configure_extension() + add_custom_target(basic_games ALL) -mo2_configure_python(basic_games - MODULE - TRANSLATIONS OFF) +mo2_configure_python(basic_games MODULE TRANSLATIONS ON) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..e22d7e9 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,21 @@ +{ + "configurePresets": [ + { + "binaryDir": "${sourceDir}/vsbuild", + "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "generator": "Visual Studio 17 2022", + "name": "vs2022-windows" + }, + { + "cacheVariables": { + "VCPKG_MANIFEST_FEATURES": { + "type": "STRING", + "value": "standalone" + } + }, + "inherits": "vs2022-windows", + "name": "vs2022-windows-standalone" + } + ], + "version": 4 +} diff --git a/__init__.py b/basic_games/__init__.py similarity index 94% rename from __init__.py rename to basic_games/__init__.py index 5725b5f..7042f2a 100644 --- a/__init__.py +++ b/basic_games/__init__.py @@ -6,11 +6,12 @@ import site import sys import typing +from pathlib import Path from .basic_game import BasicGame from .basic_game_ini import BasicIniGame -site.addsitedir(os.path.join(os.path.dirname(__file__), "lib")) +site.addsitedir(Path(__file__).parent.parent.joinpath("lib").as_posix()) BasicGame.setup() diff --git a/basic_features/__init__.py b/basic_games/basic_features/__init__.py similarity index 100% rename from basic_features/__init__.py rename to basic_games/basic_features/__init__.py diff --git a/basic_features/basic_local_savegames.py b/basic_games/basic_features/basic_local_savegames.py similarity index 100% rename from basic_features/basic_local_savegames.py rename to basic_games/basic_features/basic_local_savegames.py diff --git a/basic_features/basic_mod_data_checker.py b/basic_games/basic_features/basic_mod_data_checker.py similarity index 100% rename from basic_features/basic_mod_data_checker.py rename to basic_games/basic_features/basic_mod_data_checker.py diff --git a/basic_features/basic_save_game_info.py b/basic_games/basic_features/basic_save_game_info.py similarity index 100% rename from basic_features/basic_save_game_info.py rename to basic_games/basic_features/basic_save_game_info.py diff --git a/basic_features/utils.py b/basic_games/basic_features/utils.py similarity index 100% rename from basic_features/utils.py rename to basic_games/basic_features/utils.py diff --git a/basic_game.py b/basic_games/basic_game.py similarity index 98% rename from basic_game.py rename to basic_games/basic_game.py index ae2c0c0..74ab84e 100644 --- a/basic_game.py +++ b/basic_games/basic_game.py @@ -6,7 +6,7 @@ from typing import Callable, Generic, TypeVar import mobase -from PyQt6.QtCore import QDir, QFileInfo, QStandardPaths +from PyQt6.QtCore import QCoreApplication, QDir, QFileInfo, QStandardPaths from PyQt6.QtGui import QIcon from .basic_features.basic_save_game_info import ( @@ -253,7 +253,7 @@ def __init__(self, game: BasicGame): game, "Description", "description", - lambda g: "Adds basic support for game {}.".format(g.gameName()), + lambda g: game.tr("Adds basic support for game {}.").format(g.gameName()), ) self.gameName = BasicGameMapping(game, "GameName", "gameName") self.gameShortName = BasicGameMapping(game, "GameShortName", "gameShortName") @@ -424,6 +424,10 @@ def is_epic(self) -> bool: def is_eadesktop(self) -> bool: return self._mappings.eaDesktopContentId.has_value() + # Qt translation + def tr(self, value: str) -> str: + return QCoreApplication.translate("BasicGame", value) + # IPlugin interface: def init(self, organizer: mobase.IOrganizer) -> bool: @@ -468,7 +472,7 @@ def isActive(self) -> bool: # Note: self is self._organizer.managedGame() does not work: return self.name() == self._organizer.managedGame().name() - def settings(self) -> list[mobase.PluginSetting]: + def settings(self) -> list[mobase.Setting]: return [] # IPluginGame interface: diff --git a/basic_game_ini.py b/basic_games/basic_game_ini.py similarity index 100% rename from basic_game_ini.py rename to basic_games/basic_game_ini.py diff --git a/eadesktop_utils.py b/basic_games/eadesktop_utils.py similarity index 100% rename from eadesktop_utils.py rename to basic_games/eadesktop_utils.py diff --git a/epic_utils.py b/basic_games/epic_utils.py similarity index 100% rename from epic_utils.py rename to basic_games/epic_utils.py diff --git a/games/__init__.py b/basic_games/games/__init__.py similarity index 100% rename from games/__init__.py rename to basic_games/games/__init__.py diff --git a/games/game_assettocorsa.py b/basic_games/games/game_assettocorsa.py similarity index 100% rename from games/game_assettocorsa.py rename to basic_games/games/game_assettocorsa.py diff --git a/games/game_blackandwhite2.py b/basic_games/games/game_blackandwhite2.py similarity index 100% rename from games/game_blackandwhite2.py rename to basic_games/games/game_blackandwhite2.py diff --git a/games/game_bladeandsorcery.py b/basic_games/games/game_bladeandsorcery.py similarity index 100% rename from games/game_bladeandsorcery.py rename to basic_games/games/game_bladeandsorcery.py diff --git a/games/game_control.py b/basic_games/games/game_control.py similarity index 100% rename from games/game_control.py rename to basic_games/games/game_control.py diff --git a/games/game_cyberpunk2077.py b/basic_games/games/game_cyberpunk2077.py similarity index 95% rename from games/game_cyberpunk2077.py rename to basic_games/games/game_cyberpunk2077.py index 10da96c..e20f05d 100644 --- a/games/game_cyberpunk2077.py +++ b/basic_games/games/game_cyberpunk2077.py @@ -393,62 +393,72 @@ def listSaves(self, folder: QDir) -> list[mobase.ISaveGame]: for path in Path(folder.absolutePath()).glob(f"**/*.{ext}") ] - def settings(self) -> list[mobase.PluginSetting]: + def settings(self) -> list[mobase.Setting]: return [ - mobase.PluginSetting( + mobase.Setting( "skipStartScreen", - ( + self.tr("Skip start screen"), + self.tr( 'Skips the "Breaching..." start screen on game launch' " (can also skip loading of GOG rewards)" ), False, ), - mobase.PluginSetting( + mobase.Setting( "enforce_archive_load_order", - ( + self.tr("Enforce archive load order"), + self.tr( "Enforce the current load order via" " archive/pc/mod/modlist.txt" ), False, ), - mobase.PluginSetting( + mobase.Setting( "reverse_archive_load_order", - ( + self.tr("Reverse archive load order"), + self.tr( "Reverse MOs load order in" " archive/pc/mod/modlist.txt" " (first loaded mod wins = last one / highest prio in MO)" ), False, ), - mobase.PluginSetting( + mobase.Setting( "enforce_redmod_load_order", - "Enforce the current load order on redmod deployment", + self.tr("Enforce RedMod load order"), + self.tr("Enforce the current load order on redmod deployment"), True, ), - mobase.PluginSetting( + mobase.Setting( "reverse_redmod_load_order", - ( + self.tr("Reverse RedMod load order"), + self.tr( "Reverse MOs load order on redmod deployment" " (first loaded mod wins = last one / highest prio in MO)" ), False, ), - mobase.PluginSetting( + mobase.Setting( "auto_deploy_redmod", - "Deploy redmod before game launch if necessary", + self.tr("Auto deploy RedMod"), + self.tr("Deploy redmod before game launch if necessary"), True, ), - mobase.PluginSetting( + mobase.Setting( "clear_cache_after_game_update", - ( + self.tr("Clear cache after game update"), + self.tr( 'Clears "overwrite/r6/cache/*" if the original game files changed' " (after update)" ), True, ), - mobase.PluginSetting( + mobase.Setting( "configure_RootBuilder", - "Configures RootBuilder for Cyberpunk if installed and enabled", + self.tr("Configure RootBuilder"), + self.tr( + "Configures RootBuilder for Cyberpunk if installed and enabled" + ), True, ), ] diff --git a/games/game_da2.py b/basic_games/games/game_da2.py similarity index 100% rename from games/game_da2.py rename to basic_games/games/game_da2.py diff --git a/games/game_daggerfallunity.py b/basic_games/games/game_daggerfallunity.py similarity index 96% rename from games/game_daggerfallunity.py rename to basic_games/games/game_daggerfallunity.py index a51242d..6c170f1 100644 --- a/games/game_daggerfallunity.py +++ b/basic_games/games/game_daggerfallunity.py @@ -1,56 +1,56 @@ -import mobase - -from ..basic_game import BasicGame - - -class DaggerfallUnityModDataChecker(mobase.ModDataChecker): - def __init__(self): - super().__init__() - self.validDirNames = [ - "biogs", - "docs", - "factions", - "fonts", - "mods", - "questpacks", - "quests", - "sound", - "soundfonts", - "spellicons", - "tables", - "text", - "textures", - "worlddata", - "aa", - ] - - def dataLooksValid( - self, filetree: mobase.IFileTree - ) -> mobase.ModDataChecker.CheckReturn: - for entry in filetree: - if not entry.isDir(): - continue - if entry.name().casefold() in self.validDirNames: - return mobase.ModDataChecker.VALID - return mobase.ModDataChecker.INVALID - - -class DaggerfallUnityGame(BasicGame): - def init(self, organizer: mobase.IOrganizer) -> bool: - super().init(organizer) - self._register_feature(DaggerfallUnityModDataChecker()) - return True - - Name = "Daggerfall Unity Support Plugin" - Author = "HomerSimpleton" - Version = "1.0.0" - - GameName = "Daggerfall Unity" - GameShortName = "daggerfallunity" - GameBinary = "DaggerfallUnity.exe" - GameLauncher = "DaggerfallUnity.exe" - GameDataPath = "%GAME_PATH%/DaggerfallUnity_Data/StreamingAssets" - GameSupportURL = ( - r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/" - "Game:-Daggerfall-Unity" - ) +import mobase + +from ..basic_game import BasicGame + + +class DaggerfallUnityModDataChecker(mobase.ModDataChecker): + def __init__(self): + super().__init__() + self.validDirNames = [ + "biogs", + "docs", + "factions", + "fonts", + "mods", + "questpacks", + "quests", + "sound", + "soundfonts", + "spellicons", + "tables", + "text", + "textures", + "worlddata", + "aa", + ] + + def dataLooksValid( + self, filetree: mobase.IFileTree + ) -> mobase.ModDataChecker.CheckReturn: + for entry in filetree: + if not entry.isDir(): + continue + if entry.name().casefold() in self.validDirNames: + return mobase.ModDataChecker.VALID + return mobase.ModDataChecker.INVALID + + +class DaggerfallUnityGame(BasicGame): + def init(self, organizer: mobase.IOrganizer) -> bool: + super().init(organizer) + self._register_feature(DaggerfallUnityModDataChecker()) + return True + + Name = "Daggerfall Unity Support Plugin" + Author = "HomerSimpleton" + Version = "1.0.0" + + GameName = "Daggerfall Unity" + GameShortName = "daggerfallunity" + GameBinary = "DaggerfallUnity.exe" + GameLauncher = "DaggerfallUnity.exe" + GameDataPath = "%GAME_PATH%/DaggerfallUnity_Data/StreamingAssets" + GameSupportURL = ( + r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/" + "Game:-Daggerfall-Unity" + ) diff --git a/games/game_dao.py b/basic_games/games/game_dao.py similarity index 96% rename from games/game_dao.py rename to basic_games/games/game_dao.py index 531b173..bc3f87e 100644 --- a/games/game_dao.py +++ b/basic_games/games/game_dao.py @@ -1,31 +1,31 @@ -import mobase - -from ..basic_features import BasicGameSaveGameInfo -from ..basic_game import BasicGame - - -class DAOriginsGame(BasicGame): - Name = "Dragon Age Origins Support Plugin" - Author = "Patchier" - Version = "1.1.1" - - GameName = "Dragon Age: Origins" - GameShortName = "dragonage" - GameBinary = r"bin_ship\DAOrigins.exe" - GameDataPath = r"%DOCUMENTS%\BioWare\Dragon Age\packages\core\override" - GameSavesDirectory = r"%DOCUMENTS%\BioWare\Dragon Age\Characters" - GameSaveExtension = "das" - GameSteamId = [17450, 47810] - GameGogId = 1949616134 - GameEaDesktopId = [70377, 70843] - GameSupportURL = ( - r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/" - "Game:-Dragon-Age:-Origins" - ) - - def init(self, organizer: mobase.IOrganizer): - super().init(organizer) - self._register_feature( - BasicGameSaveGameInfo(lambda s: s.parent.joinpath("screen.dds")) - ) - return True +import mobase + +from ..basic_features import BasicGameSaveGameInfo +from ..basic_game import BasicGame + + +class DAOriginsGame(BasicGame): + Name = "Dragon Age Origins Support Plugin" + Author = "Patchier" + Version = "1.1.1" + + GameName = "Dragon Age: Origins" + GameShortName = "dragonage" + GameBinary = r"bin_ship\DAOrigins.exe" + GameDataPath = r"%DOCUMENTS%\BioWare\Dragon Age\packages\core\override" + GameSavesDirectory = r"%DOCUMENTS%\BioWare\Dragon Age\Characters" + GameSaveExtension = "das" + GameSteamId = [17450, 47810] + GameGogId = 1949616134 + GameEaDesktopId = [70377, 70843] + GameSupportURL = ( + r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/" + "Game:-Dragon-Age:-Origins" + ) + + def init(self, organizer: mobase.IOrganizer): + super().init(organizer) + self._register_feature( + BasicGameSaveGameInfo(lambda s: s.parent.joinpath("screen.dds")) + ) + return True diff --git a/games/game_darkestdungeon.py b/basic_games/games/game_darkestdungeon.py similarity index 100% rename from games/game_darkestdungeon.py rename to basic_games/games/game_darkestdungeon.py diff --git a/games/game_darkmessiahofmightandmagic.py b/basic_games/games/game_darkmessiahofmightandmagic.py similarity index 100% rename from games/game_darkmessiahofmightandmagic.py rename to basic_games/games/game_darkmessiahofmightandmagic.py diff --git a/games/game_darksouls.py b/basic_games/games/game_darksouls.py similarity index 100% rename from games/game_darksouls.py rename to basic_games/games/game_darksouls.py diff --git a/games/game_divinityoriginalsin.py b/basic_games/games/game_divinityoriginalsin.py similarity index 100% rename from games/game_divinityoriginalsin.py rename to basic_games/games/game_divinityoriginalsin.py diff --git a/games/game_divinityoriginalsinee.py b/basic_games/games/game_divinityoriginalsinee.py similarity index 100% rename from games/game_divinityoriginalsinee.py rename to basic_games/games/game_divinityoriginalsinee.py diff --git a/games/game_dragonsdogmadarkarisen.py b/basic_games/games/game_dragonsdogmadarkarisen.py similarity index 100% rename from games/game_dragonsdogmadarkarisen.py rename to basic_games/games/game_dragonsdogmadarkarisen.py diff --git a/games/game_dungeonsiege1.py b/basic_games/games/game_dungeonsiege1.py similarity index 100% rename from games/game_dungeonsiege1.py rename to basic_games/games/game_dungeonsiege1.py diff --git a/games/game_dungeonsiege2.py b/basic_games/games/game_dungeonsiege2.py similarity index 100% rename from games/game_dungeonsiege2.py rename to basic_games/games/game_dungeonsiege2.py diff --git a/games/game_f123.py b/basic_games/games/game_f123.py similarity index 95% rename from games/game_f123.py rename to basic_games/games/game_f123.py index 6c80bf6..e740a40 100644 --- a/games/game_f123.py +++ b/basic_games/games/game_f123.py @@ -1,13 +1,13 @@ -from ..basic_game import BasicGame - - -class F123Game(BasicGame): - Name = "F1 23 Support Plugin" - Author = "ju5tA1ex" - Version = "1.0.0" - - GameName = "F1 23" - GameShortName = "F1 23" - GameSteamId = 2108330 - GameBinary = "F1_23.exe" - GameDataPath = "" +from ..basic_game import BasicGame + + +class F123Game(BasicGame): + Name = "F1 23 Support Plugin" + Author = "ju5tA1ex" + Version = "1.0.0" + + GameName = "F1 23" + GameShortName = "F1 23" + GameSteamId = 2108330 + GameBinary = "F1_23.exe" + GameDataPath = "" diff --git a/games/game_finalfantasy7remake.py b/basic_games/games/game_finalfantasy7remake.py similarity index 100% rename from games/game_finalfantasy7remake.py rename to basic_games/games/game_finalfantasy7remake.py diff --git a/games/game_gta-3-de.py b/basic_games/games/game_gta-3-de.py similarity index 100% rename from games/game_gta-3-de.py rename to basic_games/games/game_gta-3-de.py diff --git a/games/game_gta-san-andreas-de.py b/basic_games/games/game_gta-san-andreas-de.py similarity index 100% rename from games/game_gta-san-andreas-de.py rename to basic_games/games/game_gta-san-andreas-de.py diff --git a/games/game_gta-vice-city-de.py b/basic_games/games/game_gta-vice-city-de.py similarity index 100% rename from games/game_gta-vice-city-de.py rename to basic_games/games/game_gta-vice-city-de.py diff --git a/games/game_kerbalspaceprogram.py b/basic_games/games/game_kerbalspaceprogram.py similarity index 100% rename from games/game_kerbalspaceprogram.py rename to basic_games/games/game_kerbalspaceprogram.py diff --git a/games/game_kingdomcomedeliverance.py b/basic_games/games/game_kingdomcomedeliverance.py similarity index 100% rename from games/game_kingdomcomedeliverance.py rename to basic_games/games/game_kingdomcomedeliverance.py diff --git a/games/game_masterduel.py b/basic_games/games/game_masterduel.py similarity index 97% rename from games/game_masterduel.py rename to basic_games/games/game_masterduel.py index ff9147b..63a5697 100644 --- a/games/game_masterduel.py +++ b/basic_games/games/game_masterduel.py @@ -1,88 +1,88 @@ -from pathlib import Path -from typing import List, Optional - -import mobase -from PyQt6.QtCore import QDir, QFileInfo - -from ..basic_game import BasicGame - - -class MasterDuelGame(BasicGame, mobase.IPluginFileMapper): - Name = "Yu-Gi-Oh! Master Duel Support Plugin" - Author = "The Conceptionist & uwx" - Version = "1.0.2" - Description = ( - "Adds support for basic Yu-Gi-Oh! Master Duel mods.\n" - 'Eligible folders for mods are "0000" and "AssetBundle".' - ) - - GameName = "Yu-Gi-Oh! Master Duel" - GameShortName = "masterduel" - GameNexusName = "yugiohmasterduel" - GameNexusId = 4272 - GameSteamId = 1449850 - GameBinary = "masterduel.exe" - - def __init__(self): - BasicGame.__init__(self) - mobase.IPluginFileMapper.__init__(self) - - def executables(self): - return [ - mobase.ExecutableInfo( - "Yu-Gi-Oh! Master Duel", - QFileInfo(self.gameDirectory().absoluteFilePath(self.binaryName())), - ).withArgument("-popupwindow"), - ] - - # dataDirectory returns the specific LocalData folder because - # this is where most mods will go to - def dataDirectory(self) -> QDir: - return QDir(self.userDataDir()) - - _userDataDirCached: Optional[str] = None - - # Gets the LocalData/xxxxxxxxx directory. This directory has a different, - # unique, 8-character hex name for each user. - def userDataDir(self) -> str: - if self._userDataDirCached is not None: - return self._userDataDirCached - - dir = self.gameDirectory() - dir.cd("LocalData") - - subdirs = dir.entryList(filters=QDir.Filter.Dirs | QDir.Filter.NoDotAndDotDot) - dir.cd(subdirs[0]) - - self._userDataDirCached = dir.absolutePath() - return self._userDataDirCached - - def mappings(self) -> List[mobase.Mapping]: - modsPath = Path(self._organizer.modsPath()) - unityMods = self.getUnityDataMods() - - mappings: List[mobase.Mapping] = [] - - for modName in unityMods: - m = mobase.Mapping() - m.createTarget = False - m.isDirectory = True - m.source = modsPath.joinpath(modName, "AssetBundle").as_posix() - m.destination = self.gameDirectory().filePath( - Path("masterduel_Data", "StreamingAssets", "AssetBundle").as_posix() - ) - mappings.append(m) - - return mappings - - def getUnityDataMods(self) -> list[str]: - modsPath = Path(self._organizer.modsPath()) - allMods = self._organizer.modList().allModsByProfilePriority() - - unityMods: list[str] = [] - for modName in allMods: - if self._organizer.modList().state(modName) & mobase.ModState.ACTIVE != 0: - if modsPath.joinpath(modName, "AssetBundle").exists(): - unityMods.append(modName) - - return unityMods +from pathlib import Path +from typing import List, Optional + +import mobase +from PyQt6.QtCore import QDir, QFileInfo + +from ..basic_game import BasicGame + + +class MasterDuelGame(BasicGame, mobase.IPluginFileMapper): + Name = "Yu-Gi-Oh! Master Duel Support Plugin" + Author = "The Conceptionist & uwx" + Version = "1.0.2" + Description = ( + "Adds support for basic Yu-Gi-Oh! Master Duel mods.\n" + 'Eligible folders for mods are "0000" and "AssetBundle".' + ) + + GameName = "Yu-Gi-Oh! Master Duel" + GameShortName = "masterduel" + GameNexusName = "yugiohmasterduel" + GameNexusId = 4272 + GameSteamId = 1449850 + GameBinary = "masterduel.exe" + + def __init__(self): + BasicGame.__init__(self) + mobase.IPluginFileMapper.__init__(self) + + def executables(self): + return [ + mobase.ExecutableInfo( + "Yu-Gi-Oh! Master Duel", + QFileInfo(self.gameDirectory().absoluteFilePath(self.binaryName())), + ).withArgument("-popupwindow"), + ] + + # dataDirectory returns the specific LocalData folder because + # this is where most mods will go to + def dataDirectory(self) -> QDir: + return QDir(self.userDataDir()) + + _userDataDirCached: Optional[str] = None + + # Gets the LocalData/xxxxxxxxx directory. This directory has a different, + # unique, 8-character hex name for each user. + def userDataDir(self) -> str: + if self._userDataDirCached is not None: + return self._userDataDirCached + + dir = self.gameDirectory() + dir.cd("LocalData") + + subdirs = dir.entryList(filters=QDir.Filter.Dirs | QDir.Filter.NoDotAndDotDot) + dir.cd(subdirs[0]) + + self._userDataDirCached = dir.absolutePath() + return self._userDataDirCached + + def mappings(self) -> List[mobase.Mapping]: + modsPath = Path(self._organizer.modsPath()) + unityMods = self.getUnityDataMods() + + mappings: List[mobase.Mapping] = [] + + for modName in unityMods: + m = mobase.Mapping() + m.createTarget = False + m.isDirectory = True + m.source = modsPath.joinpath(modName, "AssetBundle").as_posix() + m.destination = self.gameDirectory().filePath( + Path("masterduel_Data", "StreamingAssets", "AssetBundle").as_posix() + ) + mappings.append(m) + + return mappings + + def getUnityDataMods(self) -> list[str]: + modsPath = Path(self._organizer.modsPath()) + allMods = self._organizer.modList().allModsByProfilePriority() + + unityMods: list[str] = [] + for modName in allMods: + if self._organizer.modList().state(modName) & mobase.ModState.ACTIVE != 0: + if modsPath.joinpath(modName, "AssetBundle").exists(): + unityMods.append(modName) + + return unityMods diff --git a/games/game_metalgearsolid2mc.py b/basic_games/games/game_metalgearsolid2mc.py similarity index 96% rename from games/game_metalgearsolid2mc.py rename to basic_games/games/game_metalgearsolid2mc.py index 6ea655c..30804b8 100644 --- a/games/game_metalgearsolid2mc.py +++ b/basic_games/games/game_metalgearsolid2mc.py @@ -1,17 +1,17 @@ -from ..basic_game import BasicGame - - -class MetalGearSolid2MCGame(BasicGame): - Name = ( - "METAL GEAR SOLID 2: Sons of Liberty - Master Collection Version Support Plugin" - ) - Author = "AkiraJkr" - Version = "1.0.0" - - GameName = "METAL GEAR SOLID 2: Sons of Liberty - Master Collection Version" - GameShortName = "metalgearsolid2mc" - GameNexusName = "metalgearsolid2mc" - GameSteamId = 2131640 - GameBinary = "METAL GEAR SOLID2.exe" - GameDataPath = "" - GameLauncher = "launcher.exe" +from ..basic_game import BasicGame + + +class MetalGearSolid2MCGame(BasicGame): + Name = ( + "METAL GEAR SOLID 2: Sons of Liberty - Master Collection Version Support Plugin" + ) + Author = "AkiraJkr" + Version = "1.0.0" + + GameName = "METAL GEAR SOLID 2: Sons of Liberty - Master Collection Version" + GameShortName = "metalgearsolid2mc" + GameNexusName = "metalgearsolid2mc" + GameSteamId = 2131640 + GameBinary = "METAL GEAR SOLID2.exe" + GameDataPath = "" + GameLauncher = "launcher.exe" diff --git a/games/game_metalgearsolid3mc.py b/basic_games/games/game_metalgearsolid3mc.py similarity index 97% rename from games/game_metalgearsolid3mc.py rename to basic_games/games/game_metalgearsolid3mc.py index e9af9ce..10f669c 100644 --- a/games/game_metalgearsolid3mc.py +++ b/basic_games/games/game_metalgearsolid3mc.py @@ -1,15 +1,15 @@ -from ..basic_game import BasicGame - - -class MetalGearSolid3MCGame(BasicGame): - Name = "METAL GEAR SOLID 3: Snake Eater - Master Collection Version Support Plugin" - Author = "AkiraJkr" - Version = "1.0.0" - - GameName = "METAL GEAR SOLID 3: Snake Eater - Master Collection Version" - GameShortName = "metalgearsolid3mc" - GameNexusName = "metalgearsolid3mc" - GameSteamId = 2131650 - GameBinary = "METAL GEAR SOLID3.exe" - GameDataPath = "" - GameLauncher = "launcher.exe" +from ..basic_game import BasicGame + + +class MetalGearSolid3MCGame(BasicGame): + Name = "METAL GEAR SOLID 3: Snake Eater - Master Collection Version Support Plugin" + Author = "AkiraJkr" + Version = "1.0.0" + + GameName = "METAL GEAR SOLID 3: Snake Eater - Master Collection Version" + GameShortName = "metalgearsolid3mc" + GameNexusName = "metalgearsolid3mc" + GameSteamId = 2131650 + GameBinary = "METAL GEAR SOLID3.exe" + GameDataPath = "" + GameLauncher = "launcher.exe" diff --git a/games/game_mirrorsedge.py b/basic_games/games/game_mirrorsedge.py similarity index 100% rename from games/game_mirrorsedge.py rename to basic_games/games/game_mirrorsedge.py diff --git a/games/game_monsterhunterrise.py b/basic_games/games/game_monsterhunterrise.py similarity index 100% rename from games/game_monsterhunterrise.py rename to basic_games/games/game_monsterhunterrise.py diff --git a/games/game_monsterhunterworld.py b/basic_games/games/game_monsterhunterworld.py similarity index 100% rename from games/game_monsterhunterworld.py rename to basic_games/games/game_monsterhunterworld.py diff --git a/games/game_mountandblade2.py b/basic_games/games/game_mountandblade2.py similarity index 100% rename from games/game_mountandblade2.py rename to basic_games/games/game_mountandblade2.py diff --git a/games/game_msfs2020.py b/basic_games/games/game_msfs2020.py similarity index 100% rename from games/game_msfs2020.py rename to basic_games/games/game_msfs2020.py diff --git a/games/game_nfshs.py b/basic_games/games/game_nfshs.py similarity index 100% rename from games/game_nfshs.py rename to basic_games/games/game_nfshs.py diff --git a/games/game_nierautomata.py b/basic_games/games/game_nierautomata.py similarity index 100% rename from games/game_nierautomata.py rename to basic_games/games/game_nierautomata.py diff --git a/games/game_nomanssky.py b/basic_games/games/game_nomanssky.py similarity index 100% rename from games/game_nomanssky.py rename to basic_games/games/game_nomanssky.py diff --git a/games/game_sekiroshadowsdietwice.py b/basic_games/games/game_sekiroshadowsdietwice.py similarity index 100% rename from games/game_sekiroshadowsdietwice.py rename to basic_games/games/game_sekiroshadowsdietwice.py diff --git a/games/game_sims4.py b/basic_games/games/game_sims4.py similarity index 96% rename from games/game_sims4.py rename to basic_games/games/game_sims4.py index a3c905b..90a82c6 100644 --- a/games/game_sims4.py +++ b/basic_games/games/game_sims4.py @@ -1,20 +1,20 @@ -import mobase - -from ..basic_game import BasicGame - - -class TS4Game(BasicGame): - Name = "The Sims 4 Support Plugin" - Author = "R3z Shark" - - GameName = "The Sims 4" - GameShortName = "thesims4" - GameBinary = "Game/Bin/TS4_x64.exe" - GameDataPath = "%DOCUMENTS%/Electronic Arts/The Sims 4/Mods" - GameSteamId = 1222670 - GameOriginManifestIds = ["OFB-EAST:109552677"] - GameOriginWatcherExecutables = ("TS4_x64.exe",) - - def version(self): - # Don't forget to import mobase! - return mobase.VersionInfo(1, 0, 0, mobase.ReleaseType.FINAL) +import mobase + +from ..basic_game import BasicGame + + +class TS4Game(BasicGame): + Name = "The Sims 4 Support Plugin" + Author = "R3z Shark" + + GameName = "The Sims 4" + GameShortName = "thesims4" + GameBinary = "Game/Bin/TS4_x64.exe" + GameDataPath = "%DOCUMENTS%/Electronic Arts/The Sims 4/Mods" + GameSteamId = 1222670 + GameOriginManifestIds = ["OFB-EAST:109552677"] + GameOriginWatcherExecutables = ("TS4_x64.exe",) + + def version(self): + # Don't forget to import mobase! + return mobase.VersionInfo(1, 0, 0, mobase.ReleaseType.FINAL) diff --git a/games/game_stalkeranomaly.py b/basic_games/games/game_stalkeranomaly.py similarity index 100% rename from games/game_stalkeranomaly.py rename to basic_games/games/game_stalkeranomaly.py diff --git a/games/game_stardewvalley.py b/basic_games/games/game_stardewvalley.py similarity index 100% rename from games/game_stardewvalley.py rename to basic_games/games/game_stardewvalley.py diff --git a/games/game_starsector.py b/basic_games/games/game_starsector.py similarity index 100% rename from games/game_starsector.py rename to basic_games/games/game_starsector.py diff --git a/games/game_starwars-empire-at-war-foc.py b/basic_games/games/game_starwars-empire-at-war-foc.py similarity index 100% rename from games/game_starwars-empire-at-war-foc.py rename to basic_games/games/game_starwars-empire-at-war-foc.py diff --git a/games/game_starwars-empire-at-war.py b/basic_games/games/game_starwars-empire-at-war.py similarity index 100% rename from games/game_starwars-empire-at-war.py rename to basic_games/games/game_starwars-empire-at-war.py diff --git a/games/game_subnautica-below-zero.py b/basic_games/games/game_subnautica-below-zero.py similarity index 100% rename from games/game_subnautica-below-zero.py rename to basic_games/games/game_subnautica-below-zero.py diff --git a/games/game_subnautica.py b/basic_games/games/game_subnautica.py similarity index 98% rename from games/game_subnautica.py rename to basic_games/games/game_subnautica.py index d9463be..f2581a3 100644 --- a/games/game_subnautica.py +++ b/basic_games/games/game_subnautica.py @@ -155,11 +155,12 @@ def _settings_change_callback( if plugin_name == self.name() and setting == "use_qmods": self._set_mod_data_checker(use_qmod=bool(new)) - def settings(self) -> list[mobase.PluginSetting]: + def settings(self) -> list[mobase.Setting]: return [ - mobase.PluginSetting( + mobase.Setting( "use_qmods", - ( + self.tr("Use QMods"), + self.tr( "Install */.dll mods in legacy QMods folder," " instead of BepInEx/plugins (default)." ), diff --git a/games/game_tdu.py b/basic_games/games/game_tdu.py similarity index 100% rename from games/game_tdu.py rename to basic_games/games/game_tdu.py diff --git a/games/game_tdu2.py b/basic_games/games/game_tdu2.py similarity index 100% rename from games/game_tdu2.py rename to basic_games/games/game_tdu2.py diff --git a/games/game_thebindingofisaacrebirth.py b/basic_games/games/game_thebindingofisaacrebirth.py similarity index 100% rename from games/game_thebindingofisaacrebirth.py rename to basic_games/games/game_thebindingofisaacrebirth.py diff --git a/games/game_thps3.py b/basic_games/games/game_thps3.py similarity index 100% rename from games/game_thps3.py rename to basic_games/games/game_thps3.py diff --git a/games/game_thps4.py b/basic_games/games/game_thps4.py similarity index 100% rename from games/game_thps4.py rename to basic_games/games/game_thps4.py diff --git a/games/game_thug.py b/basic_games/games/game_thug.py similarity index 100% rename from games/game_thug.py rename to basic_games/games/game_thug.py diff --git a/games/game_thug2.py b/basic_games/games/game_thug2.py similarity index 100% rename from games/game_thug2.py rename to basic_games/games/game_thug2.py diff --git a/games/game_tmuf.py b/basic_games/games/game_tmuf.py similarity index 100% rename from games/game_tmuf.py rename to basic_games/games/game_tmuf.py diff --git a/games/game_trainsimulator.py b/basic_games/games/game_trainsimulator.py similarity index 100% rename from games/game_trainsimulator.py rename to basic_games/games/game_trainsimulator.py diff --git a/games/game_valheim.py b/basic_games/games/game_valheim.py similarity index 97% rename from games/game_valheim.py rename to basic_games/games/game_valheim.py index 9750475..8831079 100644 --- a/games/game_valheim.py +++ b/basic_games/games/game_valheim.py @@ -380,16 +380,20 @@ def listSaves(self, folder: QDir) -> list[mobase.ISaveGame]: save_games.extend(ValheimWorldSaveGame(f) for f in path.glob("worlds/*.fwl")) return save_games - def settings(self) -> list[mobase.PluginSetting]: + def settings(self) -> list[mobase.Setting]: settings = super().settings() settings.extend( [ - mobase.PluginSetting( - "sync_overwrite", "Sync overwrite with mods", True + mobase.Setting( + "sync_overwrite", + self.tr("Synchronize overwrite"), + self.tr("Synchronize overwrite with mods"), + True, ), - mobase.PluginSetting( + mobase.Setting( "search_overwrite_file_content", - "Search content of files in overwrite for matching mod", + self.tr("Search overwrite file content"), + self.tr("Search content of files in overwrite for matching mod"), True, ), ] diff --git a/games/game_valkyriachronicles.py b/basic_games/games/game_valkyriachronicles.py similarity index 100% rename from games/game_valkyriachronicles.py rename to basic_games/games/game_valkyriachronicles.py diff --git a/games/game_vampirebloodlines.py b/basic_games/games/game_vampirebloodlines.py similarity index 100% rename from games/game_vampirebloodlines.py rename to basic_games/games/game_vampirebloodlines.py diff --git a/games/game_witcher1.py b/basic_games/games/game_witcher1.py similarity index 100% rename from games/game_witcher1.py rename to basic_games/games/game_witcher1.py diff --git a/games/game_witcher2.py b/basic_games/games/game_witcher2.py similarity index 100% rename from games/game_witcher2.py rename to basic_games/games/game_witcher2.py diff --git a/games/game_witcher3.py b/basic_games/games/game_witcher3.py similarity index 100% rename from games/game_witcher3.py rename to basic_games/games/game_witcher3.py diff --git a/games/game_xplane11.py b/basic_games/games/game_xplane11.py similarity index 100% rename from games/game_xplane11.py rename to basic_games/games/game_xplane11.py diff --git a/games/game_zeusandposeidon.py b/basic_games/games/game_zeusandposeidon.py similarity index 100% rename from games/game_zeusandposeidon.py rename to basic_games/games/game_zeusandposeidon.py diff --git a/games/quarantine/game_masseffectlegendary.py b/basic_games/games/quarantine/game_masseffectlegendary.py similarity index 100% rename from games/quarantine/game_masseffectlegendary.py rename to basic_games/games/quarantine/game_masseffectlegendary.py diff --git a/games/quarantine/readme.txt b/basic_games/games/quarantine/readme.txt similarity index 100% rename from games/quarantine/readme.txt rename to basic_games/games/quarantine/readme.txt diff --git a/games/stalkeranomaly/XRIO.py b/basic_games/games/stalkeranomaly/XRIO.py similarity index 100% rename from games/stalkeranomaly/XRIO.py rename to basic_games/games/stalkeranomaly/XRIO.py diff --git a/games/stalkeranomaly/XRMath.py b/basic_games/games/stalkeranomaly/XRMath.py similarity index 100% rename from games/stalkeranomaly/XRMath.py rename to basic_games/games/stalkeranomaly/XRMath.py diff --git a/games/stalkeranomaly/XRNET.py b/basic_games/games/stalkeranomaly/XRNET.py similarity index 100% rename from games/stalkeranomaly/XRNET.py rename to basic_games/games/stalkeranomaly/XRNET.py diff --git a/games/stalkeranomaly/XRObject.py b/basic_games/games/stalkeranomaly/XRObject.py similarity index 100% rename from games/stalkeranomaly/XRObject.py rename to basic_games/games/stalkeranomaly/XRObject.py diff --git a/games/stalkeranomaly/XRSave.py b/basic_games/games/stalkeranomaly/XRSave.py similarity index 100% rename from games/stalkeranomaly/XRSave.py rename to basic_games/games/stalkeranomaly/XRSave.py diff --git a/games/stalkeranomaly/__init__.py b/basic_games/games/stalkeranomaly/__init__.py similarity index 100% rename from games/stalkeranomaly/__init__.py rename to basic_games/games/stalkeranomaly/__init__.py diff --git a/gog_utils.py b/basic_games/gog_utils.py similarity index 100% rename from gog_utils.py rename to basic_games/gog_utils.py diff --git a/origin_utils.py b/basic_games/origin_utils.py similarity index 100% rename from origin_utils.py rename to basic_games/origin_utils.py diff --git a/steam_utils.py b/basic_games/steam_utils.py similarity index 100% rename from steam_utils.py rename to basic_games/steam_utils.py diff --git a/basic_games_en.ts b/basic_games_en.ts new file mode 100644 index 0000000..60539c8 --- /dev/null +++ b/basic_games_en.ts @@ -0,0 +1,131 @@ + + + + + BasicGameMappings + + + Adds basic support for game {}. + + + + + Cyberpunk2077Game + + + Skip start screen + + + + + Skips the "Breaching..." start screen on game launch (can also skip loading of GOG rewards) + + + + + Enforce archive load order + + + + + Enforce the current load order via <code>archive/pc/mod/modlist.txt</code> + + + + + Reverse archive load order + + + + + Reverse MOs load order in <code>archive/pc/mod/modlist.txt</code> (first loaded mod wins = last one / highest prio in MO) + + + + + Enforce RedMod load order + + + + + Enforce the current load order on redmod deployment + + + + + Reverse RedMod load order + + + + + Reverse MOs load order on redmod deployment (first loaded mod wins = last one / highest prio in MO) + + + + + Auto deploy RedMod + + + + + Deploy redmod before game launch if necessary + + + + + Clear cache after game update + + + + + Clears "overwrite/r6/cache/*" if the original game files changed (after update) + + + + + Configure RootBuilder + + + + + Configures RootBuilder for Cyberpunk if installed and enabled + + + + + SubnauticaGame + + + Use QMods + + + + + Install */.dll mods in legacy QMods folder, instead of BepInEx/plugins (default). + + + + + ValheimGame + + + Synchronize overwrite + + + + + Synchronize overwrite with mods + + + + + Search overwrite file content + + + + + Search content of files in overwrite for matching mod + + + + diff --git a/icon.jpg b/icon.jpg new file mode 100644 index 0000000..9131e93 Binary files /dev/null and b/icon.jpg differ diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..494c555 --- /dev/null +++ b/metadata.json @@ -0,0 +1,56 @@ +{ + "id": "mo2-basic-games", + "name": "Basic Games Support", + "version": "1.0.0", + "description": "Basic ModOrganizer2 support for many games.", + "icon": "icon.jpg", + "author": { + "name": "Mod Organizer 2", + "homepage": "https://www.modorganizer.org/" + }, + "contributors": [ + "AkiraJkr", + "Al", + "AnyOldName3", + "bingmapsts", + "ddbb07", + "dekart811", + "Deorder", + "erri120", + "EzioTheDeadPoet", + "FalseIlyu", + "Holt59", + "Homer Simpleton", + "isanae", + "Jeremy Rimpo", + "Jeroen Ruigrok van der Werven", + "John L C", + "kane", + "LaughingHyena279", + "LostDragonist", + "Martin Rudat", + "ModZero", + "Nigel McKernan", + "Patchier", + "Qudix", + "Rodolfo Figueroa Soriano", + "Ryan Young", + "Silencer711", + "stpauljim", + "The Conceptionist", + "Thomas Winwood", + "tottoko99", + "Trevor Paley", + "uwx", + "Zash" + ], + "type": "game", + "content": { + "plugins": { + "basic_games": "basic_games/__init__.py" + }, + "translations": { + "autodetect": "translations" + } + } +} diff --git a/poetry.lock b/poetry.lock index f6dd499..aa170db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -30,24 +30,24 @@ test = ["pytest"] [[package]] name = "mobase-stubs" -version = "2.5.1a0" +version = "2.6.0.dev1" description = "PEP561 stub files for the mobase Python API." optional = false python-versions = "<4.0,>=3.12" files = [ - {file = "mobase_stubs-2.5.1a0-py3-none-any.whl", hash = "sha256:bcaecfae038b890d82280fc518f7e44f38d22d35801a8ba7ffa480f7756d6823"}, - {file = "mobase_stubs-2.5.1a0.tar.gz", hash = "sha256:a8dc5574336ed3b1f673288447781f705a078472cf8808e05a36f129c81c8e20"}, + {file = "mobase_stubs-2.6.0.dev1-py3-none-any.whl", hash = "sha256:466ea5def13135ce71cef4dbc4f9c3d0ece4e7098dc3fd99d9d3773d1b912360"}, + {file = "mobase_stubs-2.6.0.dev1.tar.gz", hash = "sha256:21042d1dfca439fbee6cd346b82d98e6d0d322d6970f746e2cf2c1969445988a"}, ] [[package]] name = "nodeenv" -version = "1.9.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.9.0-py2.py3-none-any.whl", hash = "sha256:508ecec98f9f3330b636d4448c0f1a56fc68017c68f1e7857ebc52acf0eb879a"}, - {file = "nodeenv-1.9.0.tar.gz", hash = "sha256:07f144e90dae547bf0d4ee8da0ee42664a42a04e02ed68e06324348dafe4bdb1"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] [[package]] @@ -63,13 +63,13 @@ files = [ [[package]] name = "poethepoet" -version = "0.23.0" +version = "0.27.0" description = "A task runner that works well with poetry." optional = false python-versions = ">=3.8" files = [ - {file = "poethepoet-0.23.0-py3-none-any.whl", hash = "sha256:d573ff31d7678e62b6f9bc9a1291ae2009ac14e0eead0a450598f9f05abb27a3"}, - {file = "poethepoet-0.23.0.tar.gz", hash = "sha256:62a0a6a518df5985c191aee0c1fcd2bb6a0a04eb102997786fcdf118e4147d22"}, + {file = "poethepoet-0.27.0-py3-none-any.whl", hash = "sha256:0032d980a623b96e26dc7450ae200b0998be523f27d297d799b97510fe252a24"}, + {file = "poethepoet-0.27.0.tar.gz", hash = "sha256:907ab4dc1bc6326be5a3b10d2aa39d1acc0ca12024317d9506fbe9c0cdc912c9"}, ] [package.dependencies] @@ -109,73 +109,77 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] [[package]] name = "pyqt6" -version = "6.7.0" +version = "6.7.1" description = "Python bindings for the Qt cross platform application toolkit" optional = false python-versions = ">=3.8" files = [ - {file = "PyQt6-6.7.0-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:919ffb01020ece42209228bf94b4f2c156a6b77cc5a69a90a05e358b0333750b"}, - {file = "PyQt6-6.7.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e294f025f94493ee12b66efd6893fab309c9063172bb8a5b184f84dfc1ebcc49"}, - {file = "PyQt6-6.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:9d8865fb6357dba032002c4554a9648e88f2b4706c929cc51fba58edafad91fc"}, - {file = "PyQt6-6.7.0.tar.gz", hash = "sha256:3d31b2c59dc378ee26e16586d9469842483588142fc377280aad22aaf2fa6235"}, + {file = "PyQt6-6.7.1-1-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7f397f4b38b23b5588eb2c0933510deb953d96b1f0323a916c4839c2a66ccccc"}, + {file = "PyQt6-6.7.1-1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2f202b7941aa74e5c7e1463a6f27d9131dbc1e6cabe85571d7364f5b3de7397"}, + {file = "PyQt6-6.7.1-cp38-abi3-macosx_11_0_universal2.whl", hash = "sha256:f053378e3aef6248fa612c8afddda17f942fb63f9fe8a9aeb2a6b6b4cbb0eba9"}, + {file = "PyQt6-6.7.1-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0adb7914c732ad1dee46d9cec838a98cb2b11bc38cc3b7b36fbd8701ae64bf47"}, + {file = "PyQt6-6.7.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2d771fa0981514cb1ee937633dfa64f14caa902707d9afffab66677f3a73e3da"}, + {file = "PyQt6-6.7.1-cp38-abi3-win_amd64.whl", hash = "sha256:fa3954698233fe286a8afc477b84d8517f0788eb46b74da69d3ccc0170d3714c"}, + {file = "PyQt6-6.7.1.tar.gz", hash = "sha256:3672a82ccd3a62e99ab200a13903421e2928e399fda25ced98d140313ad59cb9"}, ] [package.dependencies] PyQt6-Qt6 = ">=6.7.0,<6.8.0" -PyQt6-sip = ">=13.6,<14" +PyQt6-sip = ">=13.8,<14" [[package]] name = "pyqt6-qt6" -version = "6.7.1" +version = "6.7.2" description = "The subset of a Qt installation needed by PyQt6." optional = false python-versions = "*" files = [ - {file = "PyQt6_Qt6-6.7.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:29622b5dd38740b4b6962e0c88d082d08fa10b64542ef5d911b04214aad70150"}, - {file = "PyQt6_Qt6-6.7.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fbcfe66a57199c6a26542b8b9b2f2ee59d974db36293de335a1251f24c4fe917"}, - {file = "PyQt6_Qt6-6.7.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:9fbab2a96d72d77d16021e259ef86a1a3c87adb0e7eebcc92df0d39f3fdf7e27"}, - {file = "PyQt6_Qt6-6.7.1-py3-none-win_amd64.whl", hash = "sha256:590a2f30d15892b5259e6a17ecc0a755675b1b49f553d964e195e90094b44120"}, + {file = "PyQt6_Qt6-6.7.2-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:065415589219a2f364aba29d6a98920bb32810286301acbfa157e522d30369e3"}, + {file = "PyQt6_Qt6-6.7.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7f817efa86a0e8eda9152c85b73405463fbf3266299090f32bbb2266da540ead"}, + {file = "PyQt6_Qt6-6.7.2-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:05f2c7d195d316d9e678a92ecac0252a24ed175bd2444cc6077441807d756580"}, + {file = "PyQt6_Qt6-6.7.2-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:fc93945eaef4536d68bd53566535efcbe78a7c05c2a533790a8fd022bac8bfaa"}, + {file = "PyQt6_Qt6-6.7.2-py3-none-win_amd64.whl", hash = "sha256:b2d7e5ddb1b9764cd60f1d730fa7bf7a1f0f61b2630967c81761d3d0a5a8a2e0"}, ] [[package]] name = "pyqt6-sip" -version = "13.6.0" +version = "13.8.0" description = "The sip module support for PyQt6" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "PyQt6_sip-13.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6b5f699aaed0ac1fcd23e8fbca70d8a77965831b7c1ce474b81b1678817a49d"}, - {file = "PyQt6_sip-13.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c282062125eea5baf830c6998587d98c50be7c3a817a057fb95fef647184012"}, - {file = "PyQt6_sip-13.6.0-cp310-cp310-win32.whl", hash = "sha256:fa759b6339ff7e25f9afe2a6b651b775f0a36bcb3f5fa85e81a90d3b033c83f4"}, - {file = "PyQt6_sip-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:8f9df9f7ccd8a9f0f1d36948c686f03ce1a1281543a3e636b7b7d5e086e1a436"}, - {file = "PyQt6_sip-13.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b9c6b6f9cfccb48cbb78a59603145a698fb4ffd176764d7083e5bf47631d8df"}, - {file = "PyQt6_sip-13.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:86a7b67c64436e32bffa9c28c9f21bf14a9faa54991520b12c3f6f435f24df7f"}, - {file = "PyQt6_sip-13.6.0-cp311-cp311-win32.whl", hash = "sha256:58f68a48400e0b3d1ccb18090090299bad26e3aed7ccb7057c65887b79b8aeea"}, - {file = "PyQt6_sip-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dfd22cfedd87e96f9d51e0778ca2ba3dc0be83e424e9e0f98f6994d8d9c90f0"}, - {file = "PyQt6_sip-13.6.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3bf03e130fbfd75c9c06e687b86ba375410c7a9e835e4e03285889e61dd4b0c4"}, - {file = "PyQt6_sip-13.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:43fb8551796030aae3d66d6e35e277494071ec6172cd182c9569ab7db268a2f5"}, - {file = "PyQt6_sip-13.6.0-cp312-cp312-win32.whl", hash = "sha256:13885361ca2cb2f5085d50359ba61b3fabd41b139fb58f37332acbe631ef2357"}, - {file = "PyQt6_sip-13.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:24441032a29791e82beb7dfd76878339058def0e97fdb7c1cea517f3a0e6e96b"}, - {file = "PyQt6_sip-13.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3075d8b325382750829e6cde6971c943352309d35768a4d4da0587459606d562"}, - {file = "PyQt6_sip-13.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a6ce80bc24618d8a41be8ca51ad9f10e8bc4296dd90ab2809573df30a23ae0e5"}, - {file = "PyQt6_sip-13.6.0-cp38-cp38-win32.whl", hash = "sha256:fa7b10af7488efc5e53b41dd42c0f421bde6c2865a107af7ae259aff9d841da9"}, - {file = "PyQt6_sip-13.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:9adf672f9114687533a74d5c2d4c03a9a929ad5ad9c3e88098a7da1a440ab916"}, - {file = "PyQt6_sip-13.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98bf954103b087162fa63b3a78f30b0b63da22fd6450b610ec1b851dbb798228"}, - {file = "PyQt6_sip-13.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:39854dba35f8e5a4288da26ecb5f40b4c5ec1932efffb3f49d5ea435a7f37fb3"}, - {file = "PyQt6_sip-13.6.0-cp39-cp39-win32.whl", hash = "sha256:747f6ca44af81777a2c696bd501bc4815a53ec6fc94d4e25830e10bc1391f8ab"}, - {file = "PyQt6_sip-13.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:33ea771fe777eb0d1a2c3ef35bcc3f7a286eb3ff09cd5b2fdd3d87d1f392d7e8"}, - {file = "PyQt6_sip-13.6.0.tar.gz", hash = "sha256:2486e1588071943d4f6657ba09096dc9fffd2322ad2c30041e78ea3f037b5778"}, + {file = "PyQt6_sip-13.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cedd554c643e54c4c2e12b5874781a87441a1b405acf3650a4a2e1df42aae231"}, + {file = "PyQt6_sip-13.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f57275b5af774529f9838adcfb58869ba3ebdaf805daea113bb0697a96a3f3cb"}, + {file = "PyQt6_sip-13.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:835ed22eab977f75fd77e60d4ff308a1fa794b1d0c04849311f36d2a080cdf3b"}, + {file = "PyQt6_sip-13.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8b22a6850917c68ce83fc152a8b606ecb2efaaeed35be53110468885d6cdd9d"}, + {file = "PyQt6_sip-13.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b203b6fbae4a8f2d27f35b7df46200057033d9ecd9134bcf30e3eab66d43572c"}, + {file = "PyQt6_sip-13.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:beaddc1ec96b342f4e239702f91802706a80cb403166c2da318cec4ad8b790cb"}, + {file = "PyQt6_sip-13.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5c086b7c9c7996ea9b7522646cc24eebbf3591ec9dd38f65c0a3fdb0dbeaac7"}, + {file = "PyQt6_sip-13.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd168667addf01f8a4b0fa7755323e43e4cd12ca4bade558c61f713a5d48ba1a"}, + {file = "PyQt6_sip-13.8.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:33d9b399fc9c9dc99496266842b0fb2735d924604774e97cf9b555667cc0fc59"}, + {file = "PyQt6_sip-13.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:056af69d1d8d28d5968066ec5da908afd82fc0be07b67cf2b84b9f02228416ce"}, + {file = "PyQt6_sip-13.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:08dd81037a2864982ece2bf9891f3bf4558e247034e112993ea1a3fe239458cb"}, + {file = "PyQt6_sip-13.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:fbb249b82c53180f1420571ece5dc24fea1188ba435923edd055599dffe7abfb"}, + {file = "PyQt6_sip-13.8.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:6bce6bc5870d9e87efe5338b1ee4a7b9d7d26cdd16a79a5757d80b6f25e71edc"}, + {file = "PyQt6_sip-13.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd81144b0770084e8005d3a121c9382e6f9bc8d0bb320dd618718ffe5090e0e6"}, + {file = "PyQt6_sip-13.8.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:755beb5d271d081e56618fb30342cdd901464f721450495cb7cb0212764da89e"}, + {file = "PyQt6_sip-13.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a0bbc0918eab5b6351735d40cf22cbfa5aa2476b55e0d5fe881aeed7d871c29"}, + {file = "PyQt6_sip-13.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7f84c472afdc7d316ff683f63129350d645ef82d9b3fd75a609b08472d1f7291"}, + {file = "PyQt6_sip-13.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1bf29e95f10a8a00819dac804ca7e5eba5fc1769adcd74c837c11477bf81954"}, + {file = "PyQt6_sip-13.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9ea9223c94906efd68148f12ae45b51a21d67e86704225ddc92bce9c54e4d93c"}, + {file = "PyQt6_sip-13.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:2559afa68825d08de09d71c42f3b6ad839dcc30f91e7c6d0785e07830d5541a5"}, + {file = "PyQt6_sip-13.8.0.tar.gz", hash = "sha256:2f74cf3d6d9cab5152bd9f49d570b2dfb87553ebb5c4919abfde27f5b9fd69d4"}, ] [[package]] name = "pyright" -version = "1.1.365" +version = "1.1.375" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.365-py3-none-any.whl", hash = "sha256:194d767a039f9034376b7ec8423841880ac6efdd061f3e283b4ad9fcd484a659"}, - {file = "pyright-1.1.365.tar.gz", hash = "sha256:d7e69000939aed4bf823707086c30c84c005bdd39fac2dfb370f0e5be16c2ef2"}, + {file = "pyright-1.1.375-py3-none-any.whl", hash = "sha256:4c5e27eddeaee8b41cc3120736a1dda6ae120edf8523bb2446b6073a52f286e3"}, + {file = "pyright-1.1.375.tar.gz", hash = "sha256:7765557b0d6782b2fadabff455da2014476404c9e9214f49977a4e49dec19a0f"}, ] [package.dependencies] @@ -187,28 +191,29 @@ dev = ["twine (>=3.4.1)"] [[package]] name = "ruff" -version = "0.2.2" +version = "0.5.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, - {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, - {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, - {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, - {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, ] [[package]] @@ -224,13 +229,13 @@ files = [ [[package]] name = "types-psutil" -version = "5.9.5.20240516" +version = "6.0.0.20240621" description = "Typing stubs for psutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-psutil-5.9.5.20240516.tar.gz", hash = "sha256:bb296f59fc56458891d0feb1994717e548a1bcf89936a2877df8792b822b4696"}, - {file = "types_psutil-5.9.5.20240516-py3-none-any.whl", hash = "sha256:83146ded949a10167d9895e567b3b71e53ebc5e23fd8363eab62b3c76cce7b89"}, + {file = "types-psutil-6.0.0.20240621.tar.gz", hash = "sha256:1be027326c42ff51ebd65255a5146f9dc57e5cf8c4f9519a88b3f3f6a7fcd00e"}, + {file = "types_psutil-6.0.0.20240621-py3-none-any.whl", hash = "sha256:b02f05d2c4141cd5926d82d8b56e4292a4d8f483d8a3400b73edf153834a3c64"}, ] [[package]] @@ -247,4 +252,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "6c2d56d43494ed09c81cc569e453e8a2791a739491d547b458c3f5581d94710c" +content-hash = "52c74fb9a8276de98403f513ced8f1bcb13ef5acd075bbf827ede19f7ec99113" diff --git a/pyproject.toml b/pyproject.toml index 1246321..5c743de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,27 +13,28 @@ python = "^3.12" psutil = "^5.8.0" vdf = "3.4" lzokay = "1.1.5" -pyqt6 = "6.7.0" +pyqt6 = "6.7.1" +mobase-stubs = {version = "^2.6.0.dev1", allow-prereleases = true} [tool.poetry.group.dev.dependencies] -mobase-stubs = { version = "^2.5.1a0", allow-prereleases = true } -pyqt6 = "^6.7.0" -pyright = "^1.1.365" -ruff = "^0.2.1" -types-psutil = "^5.9.5.20240516" -poethepoet = "^0.23.0" +mobase-stubs = "^2.5.2" +pyqt6 = "^6.7.1" +pyright = "^1.1.375" +ruff = "^0.5.7" +types-psutil = "^6.0.0.20240621" +poethepoet = "^0.27.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.poe.tasks] -format-imports = "ruff check --select I . --fix" -format-ruff = "ruff format ." +format-imports = "ruff check --select I basic_games --fix" +format-ruff = "ruff format basic_games" format.sequence = ["format-imports", "format-ruff"] -lint-ruff = "ruff check ." -lint-ruff-format = "ruff format --check ." -lint-pyright = "pyright ." +lint-ruff = "ruff check basic_games" +lint-ruff-format = "ruff format --check basic_games" +lint-pyright = "pyright basic_games" lint.sequence = ["lint-ruff", "lint-ruff-format", "lint-pyright"] lint.ignore_fail = "return_non_zero" diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..2c96d07 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,15 @@ +{ + "features": { + "standalone": { + "description": "Build Standalone.", + "dependencies": ["mo2-cmake"] + } + }, + "vcpkg-configuration": { + "default-registry": { + "kind": "git", + "repository": "https://github.com/ModOrganizer2/vcpkg-registry", + "baseline": "27d8adbfe9e4ce88a875be3a45fadab69869eb60" + } + } +}