2020-05-01 13:08:21 +00:00
# Legendary
## A free and open-source Epic Games Launcher replacement
![Logo ](https://repository-images.githubusercontent.com/249938026/7ea8a680-7e65-11ea-9260-fea84c1112f1 )
2020-04-14 12:47:46 +00:00
[![Discord ](https://discordapp.com/api/guilds/695233346627698689/widget.png?style=shield )](https://discord.gg/UJKBwPw) [![Twitter Follow ](https://img.shields.io/twitter/follow/legendary_gl?label=Follow%20us%20for%20updates%21&style=social )](https://twitter.com/legendary_gl)
2020-04-26 15:45:10 +00:00
Legendary is an open-source game launcher that can download and install games from the Epic Games Store on Linux and Windows.
It's name as a tongue-in-cheek play on tiers of [item rarity in many MMORPGs ](https://wow.gamepedia.com/Quality ).
2020-04-14 12:47:46 +00:00
2020-04-26 15:45:10 +00:00
Right now it is in an early public testing stage and still needs a lot of work to work. But it does work!
2020-04-14 12:47:46 +00:00
2020-04-21 17:59:58 +00:00
**What works:**
2020-05-01 13:08:21 +00:00
- Authenticating with Epic's service
- Downloading and installing your games and their DLC
2020-04-26 15:45:10 +00:00
- Delta patching/updating of installed games
2020-05-01 13:08:21 +00:00
- Launching games with online authentication (for multiplayer)
- Running games with WINE on Linux
2020-04-14 12:47:46 +00:00
**Planned:**
- Simple GUI for managing/launching games
2020-04-26 15:45:10 +00:00
- Importing installed games from the EGS launcher
2020-05-01 13:08:21 +00:00
- Better interfaces for other developers to use Legendary in their projects
2020-04-26 15:45:10 +00:00
- Lots and lots of bug fixes, optimizations, and refactoring...
2020-04-14 12:47:46 +00:00
## Requirements
2020-05-01 13:08:21 +00:00
- python 3.8+ (64-bit on Windows)
2020-04-14 12:47:46 +00:00
- requests
2020-05-01 13:08:21 +00:00
- setuptools (only when installing/building)
2020-04-26 15:45:10 +00:00
## How to run/install
2020-04-27 10:46:22 +00:00
### Package Manager
2020-05-01 15:13:01 +00:00
Some distros already have (unofficial) packages available, check out the [Available Linux Packages ](https://github.com/derrod/legendary/wiki/Available-Linux-Packages ) wiki page for details.
2020-04-27 10:46:22 +00:00
2020-05-01 21:44:31 +00:00
Currently this includes [Arch ](https://github.com/derrod/legendary/wiki/Available-Linux-Packages#arch-aur ) and [Fedora ](https://github.com/derrod/legendary/wiki/Available-Linux-Packages#fedora ) but more will be available in the future.
2020-04-27 10:46:22 +00:00
2020-04-26 15:45:10 +00:00
### Standalone
Download the latest `legendary` or `legendary.exe` binary from [the latest release ](https://github.com/derrod/legendary/releases/latest )
and move it to somewhere in your `$PATH` /`%PATH%`. Don't forget to `chmod +x` it on Linux.
The Windows .exe and Linux executable were created with PyInstaller and will run standalone even without python being installed.
Note that on Linux glibc >= 2.25 is required, so older distributions such as Ubuntu 16.04 or Debian stretch will not work.
2020-04-14 12:47:46 +00:00
2020-04-26 15:45:10 +00:00
### Python package
2020-04-30 14:40:39 +00:00
Via PyPI: `pip install legendary-gl`
2020-04-26 15:45:10 +00:00
2020-04-30 14:40:39 +00:00
Manually:
2020-04-26 15:45:10 +00:00
- Install python3.8, setuptools and requests
- Clone the git repository
- Run `python3.8 setup.py install`
#### Ubuntu 20.04 example
Ubuntu 20.04's standard repositories include everything needed to install legendary:
````bash
sudo apt install python3 python3-requests python3-setuptools-git
git clone https://github.com/derrod/legendary.git
cd legendary
sudo python3 setup.py install
````
2020-04-14 12:47:46 +00:00
2020-04-26 15:45:10 +00:00
Note that in this example we used `sudo` to install the package on the system, this may not be advisable depending on your setup.
2020-04-14 12:47:46 +00:00
2020-04-26 15:45:10 +00:00
### Directly from the repo (for dev/testing)
2020-04-14 12:47:46 +00:00
2020-04-26 15:45:10 +00:00
- Install python3.8 and requests (optionally in a venv)
- cd into `legendary/` (the folder with `cli.py` )
- run `PYTHONPATH=.. python3.8 cli.py`
2020-04-14 12:47:46 +00:00
2020-04-14 13:50:15 +00:00
## Quickstart
To log in:
````
2020-04-26 11:44:51 +00:00
$ legendary auth
2020-04-14 13:50:15 +00:00
````
2020-04-26 11:44:51 +00:00
Authentication is a little finicky since we have to go through the Epic website. The login page should open in your browser and after logging in you should be presented with a JSON response that contains a code, just copy and paste the code into your terminal to log in.
2020-04-14 13:50:15 +00:00
Listing your games
````
2020-04-26 11:44:51 +00:00
$ legendary list-games
2020-04-14 13:50:15 +00:00
````
This will fetch a list of games available on your account, the first time may take a while depending on how many games you have.
Installing a game
````
2020-04-26 11:44:51 +00:00
$ legendary download Anemone
2020-04-14 13:50:15 +00:00
````
2020-04-26 11:44:51 +00:00
**Important:** the name used for these commands is the app name, *not* the game's name! The app name is in the parentheses after the game title in the games list.
2020-04-14 13:50:15 +00:00
List installed games and check for updates
````
2020-04-26 11:44:51 +00:00
$ legendary list-installed --check-updates
2020-04-14 13:50:15 +00:00
````
Launch (run) a game with online authentication
````
2020-04-26 11:44:51 +00:00
$ legendary launch Anemone
2020-04-14 13:50:15 +00:00
````
2020-04-26 11:44:51 +00:00
**Tip:** most games will run fine offline (`--offline`), and thus won't require launching through legendary for online authentication. You can run `legendary launch <App Name> --offline --dry-run` to get a command line that will launch the game with all parameters that would be used by the Epic Launcher. These can then be entered into any other game launcher (e.g. Lutris/Steam) if the game requires them.
2020-04-14 13:50:15 +00:00
2020-04-14 12:47:46 +00:00
## Usage
````
2020-04-30 10:07:53 +00:00
usage: legendary [-h] [-v] [-y] [-V] {auth,download,uninstall,launch,list-games,list-installed,list-files} ...
2020-04-14 12:47:46 +00:00
2020-04-30 10:07:53 +00:00
Legendary v0.0.X - "Codename"
2020-04-14 12:47:46 +00:00
optional arguments:
-h, --help show this help message and exit
-v Set loglevel to debug
2020-04-26 11:44:51 +00:00
-y Default to yes for all prompts
2020-04-28 14:18:59 +00:00
-V Print version and exit
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
Commands:
2020-04-30 10:07:53 +00:00
{auth,download,uninstall,launch,list-games,list-installed,list-files}
2020-04-26 11:44:51 +00:00
auth Authenticate with EPIC
download Download a game
uninstall Uninstall (delete) a game
launch Launch a game
list-games List available (installable) games
list-installed List installed games
2020-04-30 10:07:53 +00:00
list-files List files in manifest
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
Individual command help:
Command: auth
2020-04-26 15:45:10 +00:00
usage: legendary auth [-h] [--import]
2020-04-26 11:44:51 +00:00
optional arguments:
-h, --help show this help message and exit
--import Import EGS authentication data
Command: download
2020-04-26 15:45:10 +00:00
usage: legendary download < App Name > [options]
2020-04-26 11:44:51 +00:00
positional arguments:
< App Name > Name of the app
optional arguments:
-h, --help show this help message and exit
2020-04-14 12:47:46 +00:00
--base-path < path > Path for game installations (defaults to ~/legendary)
2020-04-30 10:07:53 +00:00
--game-folder < path > Folder for game installation (defaults to folder in
metadata)
2020-04-14 12:47:46 +00:00
--max-shared-memory < size >
2020-04-30 10:07:53 +00:00
Maximum amount of shared memory to use (in MiB),
default: 1 GiB
--max-workers < num > Maximum amount of download workers, default: 2 *
logical CPU
--manifest < uri > Manifest URL or path to use instead of the CDN one
(e.g. for downgrading)
--old-manifest < uri > Manifest URL or path to use as the old one (e.g. for
testing patching)
--base-url < url > Base URL to download from (e.g. to test or switch to a
different CDNs)
2020-04-14 12:47:46 +00:00
--force Ignore existing files (overwrite)
2020-04-30 10:07:53 +00:00
--disable-patching Do not attempt to patch existing installations
(download entire changed file)
--download-only Do not mark game as intalled and do not run prereq
installers after download
--update-only Abort if game is not already installed (for
automation)
--dlm-debug Set download manager and worker processes' loglevel to
debug
2020-04-28 14:18:59 +00:00
--platform < Platform >
Platform override for download (disables install)
2020-05-01 13:08:21 +00:00
--prefix < prefix > Only fetch files whose path starts with < prefix > (case
insensitive)
--exclude < prefix > Exclude files starting with < prefix > (case
insensitive)
--install-tag < tag > Only download files with the specified install tag
(testing)
2020-04-26 11:44:51 +00:00
Command: uninstall
2020-04-26 15:45:10 +00:00
usage: legendary uninstall [-h] < App Name >
2020-04-26 11:44:51 +00:00
positional arguments:
< App Name > Name of the app
optional arguments:
-h, --help show this help message and exit
Command: launch
2020-04-26 15:45:10 +00:00
usage: legendary launch < App Name > [options]
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
Note: additional arguments are passed to the game
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
positional arguments:
< App Name > Name of the app
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
optional arguments:
-h, --help show this help message and exit
2020-04-30 10:07:53 +00:00
--offline Skip login and launch game without online
authentication
2020-04-14 12:47:46 +00:00
--skip-version-check Skip version check when launching game in online mode
--override-username < username >
2020-04-30 10:07:53 +00:00
Override username used when launching the game (only
works with some titles)
--dry-run Print the command line that would have been used to
launch the game and exit
2020-04-14 12:47:46 +00:00
2020-04-26 11:44:51 +00:00
Command: list-games
2020-04-30 10:07:53 +00:00
usage: legendary list-games [-h] [--platform < Platform > ] [--include-ue] [--csv]
[--tsv]
2020-04-26 11:44:51 +00:00
optional arguments:
2020-04-28 14:18:59 +00:00
-h, --help show this help message and exit
--platform < Platform >
Override platform that games are shown for
--include-ue Also include Unreal Engine content in list
2020-04-30 10:07:53 +00:00
--csv List games in CSV format
--tsv List games in TSV format
2020-04-26 11:44:51 +00:00
Command: list-installed
2020-04-30 10:07:53 +00:00
usage: legendary list-installed [-h] [--check-updates] [--csv] [--tsv]
2020-04-26 11:44:51 +00:00
optional arguments:
-h, --help show this help message and exit
--check-updates Check for updates when listing installed games
2020-04-30 10:07:53 +00:00
--csv List games in CSV format
--tsv List games in TSV format
Command: list-files
usage: legendary list-files [-h] [--force-download] [--platform < Platform > ]
2020-05-01 13:08:21 +00:00
[--manifest < uri > ] [--csv] [--tsv] [--hashlist]
[--install-tag < prefix > ]
[< App Name > ]
2020-04-30 10:07:53 +00:00
positional arguments:
< App Name > Name of the app
optional arguments:
-h, --help show this help message and exit
--force-download Always download instead of using on-disk manifest
--platform < Platform >
Platform override for download (disables install)
--manifest < uri > Manifest URL or path to use instead of the CDN one
--csv Output in CSV format
2020-05-01 13:08:21 +00:00
--tsv Output in TSV format
2020-04-30 10:07:53 +00:00
--hashlist Output file hash list in hashcheck/sha1sum compatible
format
2020-05-01 13:08:21 +00:00
--install-tag < tag > Show only files with specified install tag
2020-04-14 12:47:46 +00:00
````
## Config file
Legendary supports some options as well as game specific configuration in `~/.config/legendary/config.ini` :
````ini
[Legendary]
log_level = debug
; maximum shared memory (in MiB) to use for installation
max_memory = 1024
; default install directory
install_dir = /mnt/tank/games
2020-04-26 11:44:51 +00:00
; default settings to use (currently limited to WINE executable)
[default]
; (linux) specify wine executable to use
wine_executable = wine
; default environment variables to set (overriden by game specific ones)
[default.env]
WINEPREFIX = /home/user/legendary/.wine
; Settings to only use for "AppName"
2020-04-14 12:47:46 +00:00
[AppName]
; launch game without online authentication by default
offline = true
; Skip checking for updates when launching this game
skip_update_check = true
; start parameters to use (in addition to the required ones)
start_params = -windowed
2020-04-26 11:44:51 +00:00
wine_executable = proton
2020-04-14 12:47:46 +00:00
[AppName.env]
; environment variables to set for this game (mostly useful on linux)
2020-04-26 11:44:51 +00:00
WINEPREFIX = /mnt/tank/games/Game/.wine
DXVK_CONFIG_FILE = /mnt/tank/games/Game/dxvk.conf
2020-04-14 12:47:46 +00:00
````