Skip to content

Commit b54f89b

Browse files
[pre-commit.ci] Auto fixes from pre-commit.com hooks.
1 parent d95184f commit b54f89b

1 file changed

Lines changed: 107 additions & 100 deletions

File tree

games/game_silenthill2remake.py

Lines changed: 107 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,107 @@
1-
from ..basic_game import BasicGame
2-
import mobase
3-
from ..basic_features import BasicModDataChecker, GlobPatterns
4-
from typing import Tuple
5-
6-
class SilentHill2RemakeModDataChecker(BasicModDataChecker):
7-
def __init__(self):
8-
super().__init__(
9-
GlobPatterns(
10-
delete=[
11-
"*.txt",
12-
"*.md",
13-
"manifest.json",
14-
"icon.png",
15-
],
16-
)
17-
)
18-
self.mod_path = ["SHProto", "Content", "Paks", "~mod"]
19-
self.mod_path_lower = [name.lower() for name in self.mod_path]
20-
21-
def _find_tree(self, filetree: mobase.IFileTree) -> Tuple[str | None, mobase.IFileTree | None]:
22-
"""
23-
Search the given filetree for a directory name that matches any component
24-
of self.mod_path (case-insensitive).
25-
26-
Returns:
27-
(prefix, entry)
28-
prefix: The missing part before the match (e.g. 'SHProto/Content/')
29-
entry: The IFileTree entry that matched (e.g. the 'Paks' directory)
30-
(None, None) if nothing matches.
31-
"""
32-
for entry in filetree:
33-
if not entry.isDir():
34-
continue
35-
36-
name_lower = entry.name().lower()
37-
for i, component in enumerate(self.mod_path_lower):
38-
if name_lower == component:
39-
# Build the prefix string for everything *before* this match
40-
prefix_parts = self.mod_path[:i]
41-
prefix = "/".join(prefix_parts) + ("/" if prefix_parts else "")
42-
return (prefix, entry)
43-
44-
# No matches found
45-
return (None, None)
46-
47-
48-
def dataLooksValid(self, filetree: mobase.IFileTree) -> mobase.ModDataChecker.CheckReturn:
49-
# Check for fully valid layout
50-
has_entry,_ = self._find_tree(filetree)
51-
if has_entry is None:
52-
for entry in filetree:
53-
if entry.name().lower().endswith(".pak") and entry.isFile():
54-
return mobase.ModDataChecker.FIXABLE
55-
elif has_entry is "":
56-
return mobase.ModDataChecker.VALID
57-
else:
58-
return mobase.ModDataChecker.FIXABLE
59-
60-
# Otherwise, not recognizable
61-
return mobase.ModDataChecker.INVALID
62-
63-
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
64-
filetree = super().fix(filetree)
65-
prefix, item = self._find_tree(filetree)
66-
if prefix is None:
67-
foundAPak = False
68-
# Move all top-level items to BepInEx/plugins/
69-
items_to_move = list(filetree)
70-
for item in items_to_move:
71-
if item.name().lower().endswith(".pak"):
72-
foundAPak = True
73-
filetree.move(item, f"SHProto/Content/Paks/~mod/{item.name()}")
74-
return filetree if foundAPak else None
75-
elif prefix is "":
76-
return filetree
77-
else:
78-
filetree.move(item, f"{prefix}{item.name()}")
79-
return filetree
80-
81-
class SilentHill2RemakeGame(BasicGame):
82-
def init(self, organizer: mobase.IOrganizer) -> bool:
83-
super().init(organizer)
84-
self._register_feature(SilentHill2RemakeModDataChecker())
85-
return True
86-
87-
Name = "Silent Hill 2 Remake Support Plugin"
88-
Author = "HomerSimpleton Returns"
89-
Version = "1.0"
90-
91-
GameName = "Silent Hill 2 Remake"
92-
GameShortName = "silenthill2"
93-
GameNexusName = "silenthill2"
94-
95-
GameBinary = "SHProto/Binaries/Win64/SHProto-Win64-Shipping.exe"
96-
GameLauncher = "SHProto.exe"
97-
GameDataPath = "%GAME_PATH%"
98-
GameSupportURL = "https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/Game:-Silent-Hill-2-Remake"
99-
100-
GameGogId = [1225972913, 2051029707]
1+
from typing import Tuple
2+
3+
import mobase
4+
5+
from ..basic_features import BasicModDataChecker, GlobPatterns
6+
from ..basic_game import BasicGame
7+
8+
9+
class SilentHill2RemakeModDataChecker(BasicModDataChecker):
10+
def __init__(self):
11+
super().__init__(
12+
GlobPatterns(
13+
delete=[
14+
"*.txt",
15+
"*.md",
16+
"manifest.json",
17+
"icon.png",
18+
],
19+
)
20+
)
21+
self.mod_path = ["SHProto", "Content", "Paks", "~mod"]
22+
self.mod_path_lower = [name.lower() for name in self.mod_path]
23+
24+
def _find_tree(
25+
self, filetree: mobase.IFileTree
26+
) -> Tuple[str | None, mobase.IFileTree | None]:
27+
"""
28+
Search the given filetree for a directory name that matches any component
29+
of self.mod_path (case-insensitive).
30+
31+
Returns:
32+
(prefix, entry)
33+
prefix: The missing part before the match (e.g. 'SHProto/Content/')
34+
entry: The IFileTree entry that matched (e.g. the 'Paks' directory)
35+
(None, None) if nothing matches.
36+
"""
37+
for entry in filetree:
38+
if not entry.isDir():
39+
continue
40+
41+
name_lower = entry.name().lower()
42+
for i, component in enumerate(self.mod_path_lower):
43+
if name_lower == component:
44+
# Build the prefix string for everything *before* this match
45+
prefix_parts = self.mod_path[:i]
46+
prefix = "/".join(prefix_parts) + ("/" if prefix_parts else "")
47+
return (prefix, entry)
48+
49+
# No matches found
50+
return (None, None)
51+
52+
def dataLooksValid(
53+
self, filetree: mobase.IFileTree
54+
) -> mobase.ModDataChecker.CheckReturn:
55+
# Check for fully valid layout
56+
has_entry, _ = self._find_tree(filetree)
57+
if has_entry is None:
58+
for entry in filetree:
59+
if entry.name().lower().endswith(".pak") and entry.isFile():
60+
return mobase.ModDataChecker.FIXABLE
61+
elif has_entry == "":
62+
return mobase.ModDataChecker.VALID
63+
else:
64+
return mobase.ModDataChecker.FIXABLE
65+
66+
# Otherwise, not recognizable
67+
return mobase.ModDataChecker.INVALID
68+
69+
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
70+
filetree = super().fix(filetree)
71+
prefix, item = self._find_tree(filetree)
72+
if prefix is None:
73+
foundAPak = False
74+
# Move all top-level items to BepInEx/plugins/
75+
items_to_move = list(filetree)
76+
for item in items_to_move:
77+
if item.name().lower().endswith(".pak"):
78+
foundAPak = True
79+
filetree.move(item, f"SHProto/Content/Paks/~mod/{item.name()}")
80+
return filetree if foundAPak else None
81+
elif prefix == "":
82+
return filetree
83+
else:
84+
filetree.move(item, f"{prefix}{item.name()}")
85+
return filetree
86+
87+
88+
class SilentHill2RemakeGame(BasicGame):
89+
def init(self, organizer: mobase.IOrganizer) -> bool:
90+
super().init(organizer)
91+
self._register_feature(SilentHill2RemakeModDataChecker())
92+
return True
93+
94+
Name = "Silent Hill 2 Remake Support Plugin"
95+
Author = "HomerSimpleton Returns"
96+
Version = "1.0"
97+
98+
GameName = "Silent Hill 2 Remake"
99+
GameShortName = "silenthill2"
100+
GameNexusName = "silenthill2"
101+
102+
GameBinary = "SHProto/Binaries/Win64/SHProto-Win64-Shipping.exe"
103+
GameLauncher = "SHProto.exe"
104+
GameDataPath = "%GAME_PATH%"
105+
GameSupportURL = "https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/Game:-Silent-Hill-2-Remake"
106+
107+
GameGogId = [1225972913, 2051029707]

0 commit comments

Comments
 (0)