aboutsummaryrefslogtreecommitdiff
path: root/libs/basic_games/games/baldursgate3/bg3_data_content.py
diff options
context:
space:
mode:
Diffstat (limited to 'libs/basic_games/games/baldursgate3/bg3_data_content.py')
-rw-r--r--libs/basic_games/games/baldursgate3/bg3_data_content.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/libs/basic_games/games/baldursgate3/bg3_data_content.py b/libs/basic_games/games/baldursgate3/bg3_data_content.py
new file mode 100644
index 0000000..c378520
--- /dev/null
+++ b/libs/basic_games/games/baldursgate3/bg3_data_content.py
@@ -0,0 +1,54 @@
+from enum import IntEnum, auto
+
+import mobase
+
+from . import bg3_utils
+
+
+class Content(IntEnum):
+ PAK = auto()
+ WORKSPACE = auto()
+ NATIVE = auto()
+ LOOSE_FILES = auto()
+ SE_FILES = auto()
+
+
+class BG3DataContent(mobase.ModDataContent):
+ BG3_CONTENTS: list[tuple[Content, str, str, bool] | tuple[Content, str, str]] = [
+ (Content.WORKSPACE, "Mod workspace", ":/MO/gui/content/script"),
+ (Content.PAK, "Pak", ":/MO/gui/content/bsa"),
+ (Content.LOOSE_FILES, "Loose file override mod", ":/MO/gui/content/texture"),
+ (Content.SE_FILES, "Script Extender Files", ":/MO/gui/content/inifile"),
+ (Content.NATIVE, "Native DLL mod", ":/MO/gui/content/plugin"),
+ ]
+
+ def getAllContents(self) -> list[mobase.ModDataContent.Content]:
+ return [
+ mobase.ModDataContent.Content(id, name, icon, *filter_only)
+ for id, name, icon, *filter_only in self.BG3_CONTENTS
+ ]
+
+ def getContentsFor(self, filetree: mobase.IFileTree) -> list[int]:
+ contents: set[int] = set()
+ for entry in filetree:
+ if isinstance(entry, mobase.IFileTree):
+ match entry.name():
+ case "Script Extender":
+ contents.add(Content.SE_FILES)
+ case "Data":
+ contents.add(Content.LOOSE_FILES)
+ case "Mods":
+ for e in entry:
+ if e.name().endswith(".pak"):
+ contents.add(Content.PAK)
+ break
+ case "bin":
+ contents.add(Content.NATIVE)
+ case _:
+ for e in entry:
+ if e.name() in bg3_utils.loose_file_folders:
+ contents.add(Content.WORKSPACE)
+ break
+ elif entry.name().endswith(".pak"):
+ contents.add(Content.PAK)
+ return list(contents)