Files
modorganizer-basic_games/games/game_divinityoriginalsinee.py
T
Mikaël Capelle f502fb468f Add pre-commit hook (#179)
* Update dev dependencies.
* Add pre-commit hook.
2025-04-25 08:23:10 +02:00

120 lines
3.9 KiB
Python

# -*- encoding: utf-8 -*-
import os
from pathlib import Path
import mobase
from ..basic_features import BasicGameSaveGameInfo
from ..basic_game import BasicGame
class DivinityOriginalSinEnhancedEditionModDataChecker(mobase.ModDataChecker):
def __init__(self):
super().__init__()
def dataLooksValid(
self, filetree: mobase.IFileTree
) -> mobase.ModDataChecker.CheckReturn:
folders: list[mobase.IFileTree] = []
files: list[mobase.FileTreeEntry] = []
for entry in filetree:
if isinstance(entry, mobase.IFileTree):
folders.append(entry)
else:
files.append(entry)
VALID_FOLDERS = [
"Cursors",
"DLC",
"Engine",
"Fonts",
"Localization",
"PakInfo",
"PlayerProfiles",
"Public",
"Shaders",
DivinityOriginalSinEnhancedEditionGame.DOCS_MOD_SPECIAL_NAME,
]
for src_folder in folders:
for dst_folder in VALID_FOLDERS:
if src_folder.name().lower() == dst_folder.lower():
return mobase.ModDataChecker.VALID
VALID_FILE_EXTENSIONS = [
".pak",
]
for src_file in files:
for extension in VALID_FILE_EXTENSIONS:
if src_file.name().lower().endswith(extension.lower()):
return mobase.ModDataChecker.VALID
return mobase.ModDataChecker.INVALID
class DivinityOriginalSinEnhancedEditionGame(BasicGame, mobase.IPluginFileMapper):
Name = "Divinity: Original Sin (Enhanced Edition) Support Plugin"
Author = "LostDragonist"
Version = "1.0.0"
GameName = "Divinity: Original Sin (Enhanced Edition)"
GameShortName = "divinityoriginalsinenhancededition"
GameNexusName = "divinityoriginalsinenhancededition"
GameValidShortNames = ["divinityoriginalsin"]
GameNexusId = 1995
GameSteamId = [373420]
GameGogId = [1445516929, 1445524575]
GameBinary = "Shipping/EoCApp.exe"
GameDataPath = "Data"
GameSaveExtension = "lsv"
GameDocumentsDirectory = (
"%USERPROFILE%/Documents/Larian Studios/Divinity Original Sin Enhanced Edition"
)
GameSavesDirectory = (
"%USERPROFILE%/Documents/Larian Studios/"
"Divinity Original Sin Enhanced Edition/PlayerProfiles"
)
GameSupportURL = (
r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/"
"Game:-Divinity:-Original-Sin"
)
DOCS_MOD_SPECIAL_NAME = "DOCS_MOD"
def __init__(self):
BasicGame.__init__(self)
mobase.IPluginFileMapper.__init__(self)
def init(self, organizer: mobase.IOrganizer):
super().init(organizer)
self._register_feature(BasicGameSaveGameInfo(lambda s: s.with_suffix(".png")))
self._register_feature(DivinityOriginalSinEnhancedEditionModDataChecker())
return True
def mappings(self) -> list[mobase.Mapping]:
map: list[mobase.Mapping] = []
modDirs = self._listDirsRecursive(Path(self.DOCS_MOD_SPECIAL_NAME))
for dir_ in modDirs:
for file_ in self._organizer.findFiles(path=dir_, filter=lambda x: True):
m = mobase.Mapping()
m.createTarget = True
m.isDirectory = False
m.source = file_
m.destination = os.path.join(
self.documentsDirectory().absoluteFilePath("Mods"),
file_.split(self.DOCS_MOD_SPECIAL_NAME)[1].strip("\\").strip("/"),
)
map.append(m)
return map
def primarySources(self):
return self.GameValidShortNames
def _listDirsRecursive(self, prefix: Path) -> list[str]:
res = [str(prefix)]
dirs = self._organizer.listDirectories(str(prefix))
for dir_ in dirs:
res.extend(self._listDirsRecursive(prefix.joinpath(dir_)))
return res