mirror of
https://github.com/ModOrganizer2/modorganizer-basic_games.git
synced 2026-07-27 14:07:29 -07:00
* Add `basic_feature.BasicLocalSavegames` (profile specific save games) * Refactor Black & White 2 with BasicLocalSavegames * Refactor Valheim with BasicLocalSavegames * Refactor Vampire Bloodlines with BasicLocalSavegames * Add info about basic local save games to readme
105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from pathlib import Path
|
|
from typing import List
|
|
|
|
import mobase
|
|
from PyQt6.QtCore import QDir
|
|
|
|
from ..basic_features import BasicLocalSavegames
|
|
from ..basic_game import BasicGame, BasicGameSaveGame
|
|
|
|
|
|
class VampireModDataChecker(mobase.ModDataChecker):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.validDirNames = [
|
|
"cfg",
|
|
"cl_dlls",
|
|
"dlg",
|
|
"dlls",
|
|
"maps",
|
|
"materials",
|
|
"media",
|
|
"models",
|
|
"particles",
|
|
"python",
|
|
"resource",
|
|
"scripts",
|
|
"sound",
|
|
"vdata",
|
|
]
|
|
|
|
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 VampireSaveGame(BasicGameSaveGame):
|
|
_filepath: Path
|
|
|
|
def __init__(self, filepath: Path):
|
|
super().__init__(filepath)
|
|
self._filepath = filepath
|
|
self.name = None
|
|
self.elapsedTime = None
|
|
|
|
|
|
class VampireTheMasqueradeBloodlinesGame(BasicGame):
|
|
Name = "Vampire - The Masquerade: Bloodlines Support Plugin"
|
|
Author = "John"
|
|
Version = "1.0.0"
|
|
Description = "Adds support for Vampires: The Masquerade - Bloodlines"
|
|
|
|
GameName = "Vampire - The Masquerade: Bloodlines"
|
|
GameShortName = "vampirebloodlines"
|
|
GameNexusName = "vampirebloodlines"
|
|
GameNexusId = 437
|
|
GameSteamId = [2600]
|
|
GameGogId = [1207659240]
|
|
GameBinary = "vampire.exe"
|
|
GameDataPath = "vampire"
|
|
GameDocumentsDirectory = "%GAME_PATH%/vampire/cfg"
|
|
GameSavesDirectory = "%GAME_PATH%/vampire/SAVE"
|
|
GameSaveExtension = "sav"
|
|
GameSupportURL = (
|
|
r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/"
|
|
"Game:-Vampire:-The-Masquerade-%E2%80%90-Bloodlines"
|
|
)
|
|
|
|
def init(self, organizer: mobase.IOrganizer) -> bool:
|
|
super().init(organizer)
|
|
self._featureMap[mobase.ModDataChecker] = VampireModDataChecker()
|
|
self._featureMap[mobase.LocalSavegames] = BasicLocalSavegames(
|
|
self.savesDirectory()
|
|
)
|
|
return True
|
|
|
|
def initializeProfile(self, directory: QDir, settings: mobase.ProfileSetting):
|
|
# Create .cfg files if they don't exist
|
|
for iniFile in self.iniFiles():
|
|
iniPath = Path(self.documentsDirectory().absoluteFilePath(iniFile))
|
|
if not iniPath.exists():
|
|
with open(iniPath, "w") as _:
|
|
pass
|
|
|
|
super().initializeProfile(directory, settings)
|
|
|
|
def version(self):
|
|
# Don't forget to import mobase!
|
|
return mobase.VersionInfo(1, 0, 0, mobase.ReleaseType.FINAL)
|
|
|
|
def iniFiles(self):
|
|
return ["autoexec.cfg", "user.cfg"]
|
|
|
|
def listSaves(self, folder: QDir) -> List[mobase.ISaveGame]:
|
|
ext = self._mappings.savegameExtension.get()
|
|
return [
|
|
VampireSaveGame(path)
|
|
for path in Path(folder.absolutePath()).glob(f"*.{ext}")
|
|
]
|