Add support for Divinity Original Sin

This includes the original (untested, mostly just for Nexus
download support) and the enhanced edition (actually somewhat
tested).

This is some basic support for mods installed in the game
folder.  There's also a location for actual packaged mods
in the Documents folder that I hope to add support for at
some point.
This commit is contained in:
Chris Bessent
2021-04-24 18:33:41 -07:00
parent 671139b4ef
commit 05c19b5190
3 changed files with 120 additions and 2 deletions
+4 -2
View File
@@ -17,7 +17,7 @@ Download the archive for your MO2 version and extract it directly into your MO2
- Mod Organizer **2.3.2**: [Download](https://github.com/ModOrganizer2/modorganizer-basic_games/releases/download/v0.0.3/basic_games-0.0.3.zip)
and extract in your `plugins/` folder (see below).
- Mod Organizer **2.4**: Basic games is included in Mod Organizer 2.4.
- Mod Organizer **2.4**: Basic games is included in Mod Organizer 2.4.
- If you want to use new game plugins that have not been included in the
release, [download the latest archive](https://github.com/ModOrganizer2/modorganizer-basic_games/archive/master.zip) and extract the files
in the existing `basic_games` folder, overwriting existing files.
@@ -51,7 +51,9 @@ You can rename `modorganizer-basic_games-xxx` to whatever you want (e.g., `basic
| Darkest Dungeon — [GOG](https://www.gog.com/game/darkest_dungeon) / [STEAM](https://store.steampowered.com/app/262060/Darkest_Dungeon/) | [erri120](https://github.com/erri120) | [game_darkestdungeon.py](games/game_darkestdungeon.py) | <ul><li>save slot parsing</li><li>mod data checker</li></ul> |
| Dark Messiah of Might & Magic — [STEAM](https://store.steampowered.com/app/2100/Dark_Messiah_of_Might__Magic/) | [Holt59](https://github.com/holt59/) | [game_darkmessiahofmightandmagic.py](games/game_darkmessiahofmightandmagic.py) | <ul><li>save game preview</li></ul> |
| Dark Souls — [STEAM](https://store.steampowered.com/app/211420/DARK_SOULS_Prepare_To_Die_Edition/) | [Holt59](https://github.com/holt59/) | [game_darksouls.py](games/game_darkestdungeon.py) | |
| Dungeon Siege II — [GOG](https://www.gog.com/game/dungeon_siege_collection) / [STEAM](https://store.steampowered.com/app/39200/Dungeon_Siege_II/) | [Holt59](https://github.com/holt59/) | [game_dungeonsiege2.py](games/game_dungeonsiege2.py) | <ul><li>mod data checker</li></ul> |
| Divinity: Original Sin (Classic) [STEAM](https://store.steampowered.com/app/230230/Divinity_Original_Sin_Classic/) | [LostDragonist](https://github.com/LostDragonist/) | [game_divinityoriginalsin.py](games/game_divinityoriginalsin.py) | <ul><li>save game preview</li></ul> |
| Divinity: Original Sin (Enhanced Edition) — [STEAM](https://store.steampowered.com/app/373420/Divinity_Original_Sin__Enhanced_Edition/) | [LostDragonist](https://github.com/LostDragonist/) | [game_divinityoriginalsinee.py](games/game_divinityoriginalsinee.py) | <ul><li>save game preview</li><li>mod data checker</li></ul> |
| Dungeon Siege II — [GOG](https://www.gog.com/game/dungeon_siege_collection) / [STEAM](https://store.steampowered.com/app/39200/Dungeon_Siege_II/) | [Holt59](https://github.com/holt59/) | [game_dungeonsiege2.py](games/game_dungeonsiege2.py) | <ul><li>mod data checker</li></ul> |
| Kingdom Come: Deliverance — [GOG](https://www.gog.com/game/kingdom_come_deliverance) / [STEAM](https://store.steampowered.com/app/379430/Kingdom_Come_Deliverance/)| [Silencer711](https://github.com/Silencer711) | [game_kingdomcomedeliverance.py](games/game_kingdomcomedeliverance.py) | <ul><li>profile specific cfg files</li></ul>|
| Mirror's Edge — [GOG](https://www.gog.com/game/mirrors_edge) / [STEAM](https://store.steampowered.com/app/17410/Mirrors_Edge)|[EzioTheDeadPoet](https://eziothedeadpoet.github.io/AboutMe/)|[game_mirrorsedge.py](games/game_mirrorsedge.py)| |
| Mount & Blade II: Bannerlord — [GOG](https://www.gog.com/game/mount_blade_ii_bannerlord) / [STEAM](https://store.steampowered.com/app/261550/Mount__Blade_II_Bannerlord/) | [Holt59](https://github.com/holt59/) | [game_mountandblade2.py](games/game_mountandblade2.py) | <ul><li>mod data checker</li></ul> |
+35
View File
@@ -0,0 +1,35 @@
# -*- encoding: utf-8 -*-
import mobase
from ..basic_game import BasicGame
from ..basic_features import BasicGameSaveGameInfo
class DivinityOriginalSinGame(BasicGame):
Name = "Divinity Original Sin Support Plugin"
Author = "LostDragonist"
Version = "1.0.0"
GameName = "Divinity: Original Sin (Classic)"
GameShortName = "divinityoriginalsin"
GameNexusName = "divinityoriginalsin"
GameValidShortNames = ["divinityoriginalsin"]
GameNexusId = 573
GameSteamId = [230230]
GameBinary = "Shipping/EoCApp.exe"
GameDataPath = "Data"
GameSaveExtension = "lsv" # Not confirmed
GameDocumentsDirectory = (
"%USERPROFILE%/Documents/Larian Studios/Divinity Original Sin/PlayerProfiles"
)
GameSavesDirectory = (
"%USERPROFILE%/Documents/Larian Studios/Divinity Original Sin/PlayerProfiles"
)
def init(self, organizer: mobase.IOrganizer):
super().init(organizer)
self._featureMap[mobase.SaveGameInfo] = BasicGameSaveGameInfo(
lambda s: s.replace(".lsv", ".png") # Not confirmed
)
return True
+81
View File
@@ -0,0 +1,81 @@
# -*- encoding: utf-8 -*-
from typing import List, Optional
import mobase
from ..basic_game import BasicGame
from ..basic_features import BasicGameSaveGameInfo
class DivinityOriginalSinEnhancedEditionModDataChecker(mobase.ModDataChecker):
def __init__(self):
super().__init__()
def dataLooksValid(
self, tree: mobase.IFileTree
) -> mobase.ModDataChecker.CheckReturn:
folders: List[mobase.IFileTree] = []
files: List[mobase.FileTreeEntry] = []
for entry in tree:
if isinstance(entry, mobase.IFileTree):
folders.append(entry)
else:
files.append(entry)
VALID_FOLDERS = [
"Cursors",
"DLC",
"Engine",
"Fonts",
"Localization",
"PakInfo",
"PlayerProfiles",
"Public",
"Shaders",
]
for src_folder in folders:
for dst_folder in VALID_FOLDERS:
if src_folder.name().lower() == dst_folder.lower():
return mobase.ModDataChecker.VALID
return mobase.ModDataChecker.INVALID
def fix(self, tree: mobase.IFileTree) -> Optional[mobase.IFileTree]:
return None
class DivinityOriginalSinEnhancedEditionGame(BasicGame):
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]
GameBinary = "Shipping/EoCApp.exe"
GameDataPath = "Data"
GameSaveExtension = "lsv"
GameDocumentsDirectory = (
"%USERPROFILE%/Documents/Larian Studios/"
"Divinity Original Sin Enhanced Edition/PlayerProfiles"
)
GameSavesDirectory = (
"%USERPROFILE%/Documents/Larian Studios/"
"Divinity Original Sin Enhanced Edition/PlayerProfiles"
)
def init(self, organizer: mobase.IOrganizer):
super().init(organizer)
self._featureMap[mobase.SaveGameInfo] = BasicGameSaveGameInfo(
lambda s: s.replace(".lsv", ".png")
)
self._featureMap[
mobase.ModDataChecker
] = DivinityOriginalSinEnhancedEditionModDataChecker()
return True