feature: add --executable flag

Some mods are launched through a executable different from
`eldenring.exe` or `launch_game_protected.exe`. Because of that
its useful to be able to explicitly specify the path.

Also fixes some linter warnings.
This commit is contained in:
Ivar Scholten 2022-09-30 16:32:50 +02:00
parent 56558f8481
commit 124fe3c082
No known key found for this signature in database
GPG key ID: E22887AD87C33E3C
2 changed files with 18 additions and 12 deletions

View file

@ -16,6 +16,7 @@ A tool aimed at enhancing the experience when playing the game on linux through
1. Copy the file `er-patcher` to the game directory. 1. Copy the file `er-patcher` to the game directory.
2. In steam, set the game launch options to `python er-patcher ARGS -- %command%` See [Features](#features) for available options. 2. In steam, set the game launch options to `python er-patcher ARGS -- %command%` See [Features](#features) for available options.
- Example: `python er-patcher --all --rate 30 --disable-rune-loss -- %command%` - Example: `python er-patcher --all --rate 30 --disable-rune-loss -- %command%`
- Example using the [seamless co-op](https://www.nexusmods.com/eldenring/mods/510) mod: `python er-patcher --all --executable launch_elden_ring_seamlesscoop.exe -- %command%`
- Example using [MangoHud](https://github.com/flightlessmango/MangoHud) and wine fullscreen FSR: `python er-patcher --rate 144 -uvca -- env WINE_FULLSCREEN_FSR=1 MANGOHUD=1 MANGOHUD_CONFIG=histogram %command%` - Example using [MangoHud](https://github.com/flightlessmango/MangoHud) and wine fullscreen FSR: `python er-patcher --rate 144 -uvca -- env WINE_FULLSCREEN_FSR=1 MANGOHUD=1 MANGOHUD_CONFIG=histogram %command%`
3. Launch the game through steam. `er-patcher` automatically launches a patched version of `eldenring.exe` with EAC disabled. 3. Launch the game through steam. `er-patcher` automatically launches a patched version of `eldenring.exe` with EAC disabled.
@ -26,9 +27,10 @@ Note: There might be some distros (e.g. older Ubuntu releases) that launch pytho
| Argument | Description | | Argument | Description |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------- | | --------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `-r RATE` or `--rate RATE` | Set a custom framerate limit (default: 60). | | `-r RATE` or `--rate RATE` | Set a custom framerate limit (default: 60). |
| `--with-eac` | Run game with EAC (Use it at your own risk) | | `-x EXE` or `--executable EXE` | The executable to launch, relative to the games folder.<br>Mutually exclusive with `--with-eac`. |
| `--with-eac` | Run game with EAC (Use it at your own risk).<br>Mutually exclusive with `--executable`. |
| `--disable-rune-loss` | Disable losing runes upon death. | | `--disable-rune-loss` | Disable losing runes upon death. |
| `--all` | Enable all options except `--rate` and<br>gameplay changes like `--disable-rune-loss`. | | `--all` | Enable all options except `--rate`, `--executable`, and<br>gameplay changes like `--disable-rune-loss`. |
| `-u` or `--ultrawide` | Remove black bars. | | `-u` or `--ultrawide` | Remove black bars. |
| `-v` or `--disable-vigniette` | Remove the vigniette overlay. | | `-v` or `--disable-vigniette` | Remove the vigniette overlay. |
| `-c` or `--disable-ca` | Disable chromatic abberation. | | `-c` or `--disable-ca` | Disable chromatic abberation. |

View file

@ -1,6 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import sys import sys
import subprocess import subprocess
import argparse import argparse
@ -17,6 +16,7 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Patch Elden Ring executable and launch it without EAC.") parser = argparse.ArgumentParser(description="Patch Elden Ring executable and launch it without EAC.")
parser.add_argument("-r", "--rate", type=int, default=60, help="Modify the frame rate limit (e.g. 30, 120, 165 or whatever).") parser.add_argument("-r", "--rate", type=int, default=60, help="Modify the frame rate limit (e.g. 30, 120, 165 or whatever).")
parser.add_argument("-x", "--executable", action='store', type=str, default="eldenring.exe", help="The executable to launch, relative to the games folder.")
parser.add_argument("--with-eac", action='store_true', help="Run game with EAC (Use at own your risk)") parser.add_argument("--with-eac", action='store_true', help="Run game with EAC (Use at own your risk)")
parser.add_argument("--disable-rune-loss", action='store_true', help="Disable losing runes upon death.") parser.add_argument("--disable-rune-loss", action='store_true', help="Disable losing runes upon death.")
parser.add_argument("--all", action='store_true', help="Enable all options except rate adjustment and gamplay changes like `--disable-rune-loss`.") parser.add_argument("--all", action='store_true', help="Enable all options except rate adjustment and gamplay changes like `--disable-rune-loss`.")
@ -28,6 +28,10 @@ if __name__ == "__main__":
parser.add_argument("-f", "--remove-60hz-fullscreen", action='store_true', help="Remove 60hz lock in fullscreen.") parser.add_argument("-f", "--remove-60hz-fullscreen", action='store_true', help="Remove 60hz lock in fullscreen.")
patch = parser.parse_args(patcher_args) patch = parser.parse_args(patcher_args)
if patch.with_eac and patch.executable != "eldenring.exe":
print("er-patcher: --with-eac is mutually exclusive with --executable")
sys.exit(1)
game_dir = Path(".") game_dir = Path(".")
with open(game_dir / "eldenring.exe", "rb") as f: with open(game_dir / "eldenring.exe", "rb") as f:
exe_hex = f.read().hex() exe_hex = f.read().hex()
@ -134,7 +138,7 @@ if __name__ == "__main__":
# start patched exe directly to avoid EAC # start patched exe directly to avoid EAC
steam_cmd = sys.argv[1 + sys.argv.index("--"):] steam_cmd = sys.argv[1 + sys.argv.index("--"):]
steam_cmd[-1] = Path(steam_cmd[-1]).parent.absolute() / game_dir_patched / ("start_protected_game.exe" if patch.with_eac else "eldenring.exe") steam_cmd[-1] = Path(steam_cmd[-1]).parent.absolute() / game_dir_patched / ("start_protected_game.exe" if patch.with_eac else patch.executable)
subprocess.run(steam_cmd, cwd=steam_cmd[-1].parent.absolute()) subprocess.run(steam_cmd, cwd=steam_cmd[-1].parent.absolute())
# cleanup # cleanup