diff --git a/fix.py b/fix.py index 5f3b7481..4fab6148 100644 --- a/fix.py +++ b/fix.py @@ -162,7 +162,10 @@ def _run_fix(game_id: str, default: bool = False, local: bool = False) -> bool: game_module = import_module(module_name) log.info(f'Using {scope} {fix_type} for {get_game_name()} ({game_id})') - game_module.main() + if hasattr(game_module, 'main_with_id'): + game_module.main_with_id(game_id) + else: + game_module.main() except ImportError: log.info(f'No {scope} {fix_type} found for {get_game_name()} ({game_id})') return False diff --git a/gamefixes-steam/1716740.py b/gamefixes-steam/1716740.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/1716740.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file diff --git a/gamefixes-steam/22330.py b/gamefixes-steam/22330.py new file mode 100755 index 00000000..05933a1a --- /dev/null +++ b/gamefixes-steam/22330.py @@ -0,0 +1,48 @@ +"""Mod support for following Bethesda games: + +- Fallout 3 - Game of the Year Edition +- Fallout 4 +- Fallout: New Vegas +- The Elder Scrolls IV: Oblivion +- The Elder Scrolls V: Skyrim +- The Elder Scrolls V: Skyrim Special Edition +- Starfield +""" + +import os + +from dataclasses import dataclass +from protonfixes import util + +def main_with_id(game_id: str) -> None: + """Enable modding and fixes""" + # modorganizer2 features a redirector and breaks if we replace the command. (Issue #103) + if os.path.exists('modorganizer2'): + return + + # Run script extender if it exists. + mapping = get_redirect_name(game_id) + if os.path.isfile(mapping.from_name): + util.replace_command(mapping.from_name, mapping.to_name) + + +@dataclass +class Redirect: + """Used for replacements""" + + from_name: str + to_name: str + + +def get_redirect_name(game_id: str) -> Redirect: + """Mapping for SteamID -> script extender replacements""" + mapping = { + '22380': ('FalloutNV.exe', 'nvse_loader.exe'), # Fallout New Vegas + '22370': ('FalloutLauncher.exe', 'fose_loader.exe'), # Fallout 3 + '377160': ('Fallout4Launcher.exe', 'f4se_loader.exe'), # Fallout 4 + '22330': ('OblivionLauncher.exe', 'obse_loader.exe'), # Oblivion + '72850': ('SkyrimLauncher.exe', 'skse_loader.exe'), # Skyrim + '489830': ('SkyrimSELauncher.exe', 'skse64_loader.exe'), # Skyrim SE + '1716740': ('Starfield.exe', 'sfse_loader.exe') # Starfield + }.get(game_id, ('', '')) + return Redirect(*mapping) diff --git a/gamefixes-steam/22370.py b/gamefixes-steam/22370.py deleted file mode 100755 index ee904d16..00000000 --- a/gamefixes-steam/22370.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Game fix for Fallout 3""" - -import os -from protonfixes import util - - -def main() -> None: - """Run script extender if it exists.""" - if os.path.isfile(os.path.join(os.getcwd(), 'fose_loader.exe')): - util.replace_command('FalloutLauncher.exe', 'fose_loader.exe') diff --git a/gamefixes-steam/22370.py b/gamefixes-steam/22370.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/22370.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file diff --git a/gamefixes-steam/22380.py b/gamefixes-steam/22380.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/22380.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file diff --git a/gamefixes-steam/377160.py b/gamefixes-steam/377160.py deleted file mode 100755 index 428455e5..00000000 --- a/gamefixes-steam/377160.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Game fix for Fallout 4""" - -import os -from protonfixes import util - - -def main() -> None: - """Run script extender if it exists.""" - # Fixes the startup process. - if os.path.isfile(os.path.join(os.getcwd(), 'f4se_loader.exe')): - util.replace_command('Fallout4Launcher.exe', 'f4se_loader.exe') diff --git a/gamefixes-steam/377160.py b/gamefixes-steam/377160.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/377160.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file diff --git a/gamefixes-steam/489830.py b/gamefixes-steam/489830.py deleted file mode 100755 index 6a274ecd..00000000 --- a/gamefixes-steam/489830.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Game fix for Skyrim SE""" - -import os -from protonfixes import util - - -def main() -> None: - """Run script extender if it exists.""" - if os.path.isfile(os.path.join(os.getcwd(), 'skse64_loader.exe')): - if 'MODS' in os.environ: - util.replace_command('SkyrimSELauncher.exe', 'skse64_loader.exe') diff --git a/gamefixes-steam/489830.py b/gamefixes-steam/489830.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/489830.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file diff --git a/gamefixes-steam/72850.py b/gamefixes-steam/72850.py deleted file mode 100755 index 0e1c7289..00000000 --- a/gamefixes-steam/72850.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Game fix for Skyrim""" - -import os -from protonfixes import util - - -def main() -> None: - """Run script extender if it exists.""" - # Fixes the startup process. - if os.path.isfile(os.path.join(os.getcwd(), 'skse_loader.exe')): - if 'MODS' in os.environ: - util.replace_command('SkyrimLauncher.exe', 'skse_loader.exe') diff --git a/gamefixes-steam/72850.py b/gamefixes-steam/72850.py new file mode 120000 index 00000000..6cf97f14 --- /dev/null +++ b/gamefixes-steam/72850.py @@ -0,0 +1 @@ +22330.py \ No newline at end of file