Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Epic Games Store support #295

Open
btegs opened this issue Aug 17, 2019 · 47 comments
Open

[Feature] Epic Games Store support #295

btegs opened this issue Aug 17, 2019 · 47 comments
Labels

Comments

@btegs
Copy link

btegs commented Aug 17, 2019

Lutris has support for bringing in your library from the Epic Games Store, so I was wondering if there were plans of adding support for it in GameHub. Can have it like with GOG where you can use the built in Proton or WINE to run the games.

@neuromancer
Copy link
Contributor

(Somehow) duplicated of #240

@treymerkley
Copy link

Would @tkashkin be up to explaining why they dislike Epic and wouldn't accept pull requests? I haven't really been able to quite get why people dislike EGS so much, other than Epic's aggressive EGS-only strategy, which to me would be moot as a talking point if we had a solid launcher on Linux to work with it. This is just my take on it, which is why I'm asking.

@tkashkin
Copy link
Owner

tkashkin commented Sep 3, 2019

@treymerkley

Would @tkashkin be up to explaining why they dislike Epic

Sure, it will be a long rant.

I don't like EGS and don't use it for multiple reasons:

  • Their launcher doesn't have most features I care about in Steam.
    For example (without a particular order): Linux support, community, achievements, controller support, VR, Workshop, cloud saves, etc.
    (I've heard they may have implemented cloud saves for some games but I'm not sure)
  • I care about SteamInput and SteamVR because I have a Steam Controller and HTC Vive.
    I like Valve hardware and probably would've already upgraded to Valve Index if it was sold here.
  • I don't understand how did Epic release their platform in such state in late 2018. It doesn't look like they want to improve their platform. They have already missed deadlines on their roadmap and fixed that by removing dealines.
  • They don't support Linux at all. That's not a huge dealbreaker for me, I triple-boot anyway and I still mostly game on Windows.
    (why did I even start this project then? idk) 😕
  • As a consumer I don't really care about developer's publisher's cut. However I care about platform features and I can see where most of 30% Valve gets are spent.
  • And, of course, exclusives.
    I wouldn't mind if they would fund exclusive game development like Sony does.
    I also wouldn't mind if their own games were EGS exclusives, like Valve own games are Steam exclusives and EA games are Origin exclusives.
    But I care when game that was marketed on Steam, that was available for preorders on Steam or that I have wishlisted on Steam suddenly moves to EGS.

And after all of that I don't have any reason to even try EGS.
I don't care about their free games, I have large enough libraries on Steam and GOG. I'm sure I probably won't play even half of my games in my lifetime.

In a last few years Steam and GOG did fully convert me from being a pirate into a paying customer. On the other hand EGS doesn't look any more appealing compared to torrent.


wouldn't accept pull requests

Where did I say that? I said I don't want to implement it myself since I don't use EGS, don't like it and wouldn't be able to test integration.

I don't use itch.io either, but @hagabaka has sent an initial implementation and now we are working on itch.io integration in #65. (however I do like itch.io model unlike EGS)


Hopefully I have explained my thoughts on it.

@treymerkley
Copy link

Hey, thanks for the write-up! I guess my perspective is different because of how much I use either platform, and how I think of GameHub: I only use EGS for their free games and occasionally playing Fortnite with friends when everyone's bored, and I've liked their larger cut to publishers, if only because indie game development sucks just like the rest of the industry and any way to help another dev out I'm happy with.

Conversely, I really like the look of GameHub and could see it replacing Steam Big Picture for me, so "x feature over y" doesn't mean anything for me because I can import the game into either and be pretty happy.

I completely misunderstood your position in #240. I thought you were saying that you would refuse anything EGS related being added to GameHub, not simply that you won't actively develop for it. I apologize.

@OvermindDL1
Copy link

OvermindDL1 commented Sep 3, 2019

I don't understand how did Epic release their platform in such state in late 2018. It doesn't look like they want to improve their platform. They have already missed deadlines on their roadmap and fixed that by removing dealines.

You'd understand more if you knew more about Epic-the-company, they've long been slow on development (though that was primarily on engine work in the past, rather than a store).

They don't support Linux at all. That's not a huge dealbreaker for me, I triple-boot anyway and I still mostly game on Windows.

It's a huge dealbreaker for me, I only use linux.

As a consumer I don't really care about developer's publisher's cut. However I care about platform features and I can see where most of 30% Valve gets are spent.

I understand the cut that they want, however Steam has immensely better service and features, everything from server hosting and matchmaking, ban handling, forums, mod distribution (big one here), lots of optional features that devs can put into their application (which do not make it require steam to use unless they program it to do so), in addition the devs are allowed to give away or sell steam keys on other services (as long as they also sell on steam for the same price) at no cost (steam takes no cut, yet the game still supports full features), as well as just so much more that I'm leaving out for brevity sake. The Epic Store supports not even what most would consider the bare minimum.

If devs took advantage of even a fraction of what steam offers it would not only save them money (probably enough to offset than 18% extra cut) from their own hosting and licensing costs, but would add so many more features for their community as well.

And, of course, exclusives.

I'm against the concept of exclusives, period. Steam at no point has ever EVER mandated an exclusive (or even gives any bonuses at all for being exclusive, there is no bonus whatsoever for being exclusive on steam nor has there ever been).

I also wouldn't mind if their own games were EGS exclusives, like Valve own games are Steam exclusives and EA games are Origin exclusives.

Eh, Valve's games needed steam to be installed, but they did not require purchasing on steam, there were other places (mostly brick and morter) that they could be purchased from, but still, that is a dev choice, not steam mandating anything.

But I care when game that was marketed on Steam, that was available for preorders on Steam or that I have wishlisted on Steam suddenly moves to EGS.

This, this right here is one of the big thing that shows the true colors and why I will not even support them now even if they got every steam feature out, similar reasons I don't use Windows, company morals is a big thing for me.

I don't care about their free games, I have large enough libraries on Steam and GOG. I'm sure I probably won't play even half of my games in my lifetime.

...yeah, I relate..

In a last few years Steam and GOG did fully convert me from being a pirate into a paying customer. On the other hand EGS doesn't look any more appealing compared to torrent.

Also agree there, though for me it was more of ~15 years ago that it 'converted' me. I'm happy to pay, but it must be more useful than getting it other ways, and steam is dead simple with the features I quite like, in addition to GoG, Humble Bundle, and Itch.io, they all support my platform and make it trivial to acquire whatever I want with 2-click payments in most cases.

A big thing for me, I feel absolutely no need to play a game if I don't agree with their morals, I won't pirate it, I won't even think about it ever again in my life and I write off the company. There are more than enough games to play otherwise, not just in my account but others via reputable devs that there is just no need worrying about the latest and prettiest XYZ game. I absolutely at this point in time (without EGS going through a major cleanup, including getting rid of the current CEO) will not support EGS, nor any game dev that chooses to go exclusive with them (not just their game, but the entire dev is blackballed at that point, will not even touch their past games that I might otherwise already own).

@neuromancer
Copy link
Contributor

Just wanted to say that I think all the reasons exposed are quite interesting to read and discuss! Beyond that, if someone is planing to work on this feature in the future, it could be a good idea to take a look to this code which is used to download Fortnite game files using Epic's servers.

@treymerkley
Copy link

Hey, it's in C#, neato. That'll make conversion pretty easy. So what would it take, then, to spin it into something more general?

@neuromancer
Copy link
Contributor

To be honest, I have no idea. I think a good first step is to ask the author of that code how likely is to get a more general code to download other games, apart from Fortnite.

@treymerkley
Copy link

WorkingRobot/FortniteDownloader#4

@treymerkley
Copy link

Okay, so it looks like what would be needed would be to be able to fetch the owned games for the user, and then from there feed the name to a fetching URL. They appear to have a public API, so that's good.

@neuromancer
Copy link
Contributor

A small update on this. I just saw this open-source replacement for the Epic Games Launcher in case anyone is interested in reviving this feature.

@dotevo
Copy link

dotevo commented Apr 30, 2020

I'm not sure if someone started to investigate that issue. I've started digging into GameHub source code and I was able to use legendary (provided by @neuromancer ) to integrate EGS with GameHub. I'm far far away from ready solution but I have something:

Zrzut ekranu z 2020-04-30 13-34-07

Zrzut ekranu z 2020-04-30 13-34-36

I can install game and run it.

@neuromancer
Copy link
Contributor

OMG, that's amazing! is your branch ready for testing? I can give it a try in that case..

@djibux
Copy link

djibux commented Apr 30, 2020

Oh wow! Great job! I can also help test that.

@dotevo
Copy link

dotevo commented Apr 30, 2020

Like I said it is far away from ready PRQ. But... ok. dotevo#1

Steps:

@derrod
Copy link

derrod commented Apr 30, 2020

FYI You can also read game metadata from ~/.config/legendary/metadata/<app name>.json that will also include URLs for images etc.

I also added csv/tsv output earlier today so you can use those to avoid regex-ing the game names from list-games/list-installed.

That said there may be breaking changes to the CLI at any point so parsing its output seems less than ideal.

@dotevo
Copy link

dotevo commented Apr 30, 2020

@derrod Thank you :-) Looks much better.

Zrzut ekranu z 2020-04-30 22-53-10

@btegs
Copy link
Author

btegs commented Apr 30, 2020

Great job! I know that are there are some free EGS games in my account and would be nice to be able to run those in GameHub via Proton. If this is merged into GameHub with legendary bundled and not a separate install, that would be a nice bonus!

@neuromancer
Copy link
Contributor

If this is merged into GameHub with legendary bundled and not a separate install, that would be a nice bonus!

Another approach is to re-do all the legendary implementation inside GameHub, but I don't know if that's reasonable or not.

@djibux
Copy link

djibux commented May 4, 2020

@dotevo Legendary requires Python3.8. I don't have it on my system (Debian Stable). If you need help testing I will need to install a Virtual Machine.

@btegs
Copy link
Author

btegs commented May 4, 2020

@dotevo Legendary requires Python3.8. I don't have it on my system (Debian Stable). If you need help testing I will need to install a Virtual Machine.

What if you install pyenv from https://github.com/pyenv/pyenv#basic-github-checkout or https://github.com/pyenv/pyenv-installer and then install Python 3.8.2 from there? Can set it globally or on a per directory basis if needed.

@dotevo dotevo mentioned this issue May 5, 2020
9 tasks
@dotevo
Copy link

dotevo commented May 5, 2020

Currently I don't have enough time to finish my PR.
It somehow works with a PoC quality. If someone wants to test it is ok. If someone wants to help with PR then help is more than welcome.

@djibux
Copy link

djibux commented May 9, 2020

@dotevo, your work is awesome, it works out of the box.
Thanks.

epic games

@jcnils
Copy link

jcnils commented May 24, 2020

Thanks for it! I forked your work and I will try to help with your PR.

I might have misclicked something but it is working properly now.
image

@dotevo
Copy link

dotevo commented May 25, 2020

Great :-) Currently, the source code is very low quality. It was more-less copy and paste of existing modules. I've never used VALA and it was my first time when I was digging into GameHub. I've tried to add some TODO stuff to my draft PR. Feel free to take a task or to fix any part of that PR.

@jcnils
Copy link

jcnils commented May 25, 2020

No worries, same here. I found some nice material on VALA and I will try to keep things consistent with the rest of the code as well.

That was a nice TODO list, after work today I will tackle it, starting from checking the "Legendary", and setting it up. I found where most of the code is supposed to be, I just need to figure out how to do it in VALA, like how to check if a package exists and how to get it using the distro package manager.

@jcnils
Copy link

jcnils commented May 26, 2020

I need some help here with the

com.github.tkashkin.gamehub.gschema.xml.in

Wasn't the build process supposed to update it ? (meson and ninja)
I am running with ./src/com.github.tkashkin.gamehub --verbose -d

I figured out how to check if legendary package is there, so I was updating the UI to show that and to support the authentication code from Epic.

I get errors for example:
[ERROR] [GLib-GIO] Settings schema 'com.github.tkashkin.gamehub.auth.epic' is not installed

My code

		<schema path="@SCHEMA_PATH@/auth/epic/" id="@[email protected]">
			<key name="enabled" type="b">
				<default>true</default>
				<summary>Is Epic enabled</summary>
			</key>
			<key name="authenticated" type="b">
				<default>false</default>
				<summary>Did user get authentication code</summary>
			</key>
			<key name="auth-code" type="s">
				<default>'@PREF_AUTH_CODE_EPIC@'</default>
				<summary>Epic AUTH CODE</summary>
			</key>
		</schema>

Another error:
[ERROR] [GLib-GIO] Settings schema 'com.github.tkashkin.gamehub.paths' does not contain a key named 'epic-games'

The code

	<!-- Paths -->
		<schema path="@SCHEMA_PATH@/paths/" id="@[email protected]">

...
			<key name="epic-games" type="s">
				<default>'~/Games/epic'</default>
				<summary>Epic games directory</summary>
			</key>
		</schema>

Update: It was not updating the file on the glib-2.0 folder, so I removed the the AUR version I had here. It also removed the file.
The problem is, even If I build it, the file does not appear.
[ERROR] [GLib-GIO] Settings schema 'com.github.tkashkin.gamehub.ui.behavior' is not installed

Fix: After removing the AUR, I just needed to run sudo ninja install again =D

@jcnils
Copy link

jcnils commented May 26, 2020

Just need to update the path to wherever legendary is saving the games, and disable it if there is no legendary/authentication.

Maybe I can add a place to add the authentication code from Epic just like the Itch.

@dotevo
Copy link

dotevo commented May 27, 2020

I didn't see how Itch is done. We can use legendary for that.
Maybe you can use ~/.config/legendary/user.json file or run command directly. I'm not sure what is better.
I think that the final solution should use legendary if it is possible (and be some kind of UI wrapper) or should never use legendary. Probably the second option is preferred by @tkashkin but I think it's more difficult to do.

$ legendary auth
[cli] INFO: Testing existing login data if present...
[Core] INFO: Logging in...
[cli] INFO: Stored credentials are still valid, if you wish to switch to a differentaccount, delete ~/.config/legendary/user.json and try again.

@jcnils
Copy link

jcnils commented May 27, 2020

Itch implementation is using Butler, it is a command line tool similar to what Legendary is doing for us.
So I just took the same approach on Legendary, like how they verify if Butler is there, and later today on how the authentication happens using the UI.

The only difference I am seeing now is that they create 3 wrappers a ButlerDaemon, Client and Connection. Legendary is already running as a service here, so I wonder if this is a requirement to work in a few distros.
Maybe later we will figure out that.

I think using Legendary might render us good results faster. I don't think using that could be a problem given that Itch is already using another package that must be running. The difference is that Butler is from Itch.io while Legendary is not from Epic.

Once we get the Epic games working here with Legendary (and I have a better understanding of the code on GameHub) we can start thinking on how to improve it with people's feedback.

My fear on not using Legendary is that it took derrod +2 months to write Legendary. Rewriting it inside game hub will not be an easy task even with the help of Epic API Documentation

@jcnils
Copy link

jcnils commented Jun 1, 2020

Are there any way to read log messages from the subprocess with DataInputStream ?

[cli] INFO: Testing existing login data if present...
[Core] INFO: Trying to re-use existing login session...
[cli] INFO: Stored credentials are still valid, if you wish to switch to a different account, run "legendary auth --delete" and try again.

I saw that to get the game list you read messages written with "print". Legendary code handling authentication doesn't return anything and doesn't "print" anything when you are authenticated. It is all in the logs.

I will ask him to add some values to the return or to print stuff. But we probably should go with his suggestion of parsing json messages.

In the meanwhile I will assume that if it doesn't print it is a success.

@dotevo
Copy link

dotevo commented Jun 2, 2020

@jcnils I think that we need something like legendary status and there should be an information about auth.

@neuromancer
Copy link
Contributor

is #377 still in progress? There is this project to look for inspiration, if needed: https://github.com/flavioislima/HeroicGamesLauncher

@jcnils
Copy link

jcnils commented Dec 31, 2020

It is cool! I saw him on reddit asking suggestions for names a while ago, and someone mentioned Heroic.

On my part it is more about time than inspiration. I only have a couple hours per week to work on side projects.

Dotevo code is working fine, but some features required things that where not implemented on Legendary at the time. So I was trying to implement something on top of Epic API.

@Protektor-Desura
Copy link

Any idea when this will be rolled in the master branch and released for everyone to use?

@Lucki
Copy link
Contributor

Lucki commented Feb 8, 2021

Any idea when this will be rolled in the master branch and released for everyone to use?

This will probably happen after the current refactoring is done.

So I was trying to implement something on top of Epic API.

@jcnils Did you accomplish something already with the direct implementation?
I took a look into this and got it working through calling legendary similar the PR from detevo is doing but I'm building against the current refactoring branch and being more feature complete while integrating better into gamehub itself internally.

Sneak peek

@dotevo
Copy link

dotevo commented Feb 8, 2021

@Lucki It looks great.

@jcnils
Copy link

jcnils commented Feb 8, 2021

Did you accomplish something already with the direct implementation?

@Lucki I haven't touched this since June last year(login/auth was my last commit). But it seems you have that working already.

There is a recent PR on dotevo's with more features implemented that might be useful dotevo#3

@Lucki
Copy link
Contributor

Lucki commented Feb 8, 2021

But it seems you have that working already.

No, that's still handled by legendary by getting the sid exchange code automatically.

There is a recent PR on dotevo's with more features implemented that might be useful dotevo#3

Thanks, I'll have a look if I can include some of that.

@Lucki
Copy link
Contributor

Lucki commented Feb 11, 2021

I've looked into legendary a bit more and it seems doable to just do the same in GameHub. I'm able to log in and I'm able to fetch all the game information without legendary.

@tkashkin Legendary probably breaks EGS ToS. Same would be for any internal implementation - would a rewrite of legendary get merged with that conflict?
If not: Would a wrapping around legendary get merged even with knowledge of that conflict?

@tkashkin
Copy link
Owner

tkashkin commented Feb 11, 2021

@Lucki

Legendary probably breaks EGS ToS.

This link is broken or I need to join some server to see it, can you replace it by a screenshot or summarize it?

Maybe the best solution for cases like this and for easier extension would be to move game sources and data providers into separate plugins, this shouldn't be too hard to do.

I have already planned to somewhat separate game sources, right now I am rewriting them and they can be toggled with meson build options in my local branch.

@Lucki
Copy link
Contributor

Lucki commented Feb 11, 2021

This link is broken or I need to join some server to see it

Stupid discord…

can you replace it by a screenshot or summarize it?

There's nothing explained, just a random? guy claiming it would break ToS - I asked for further details but there was no answer.

CommandMC#7964: Yes, Legendary is against the Epic ToS. However, the requests Legendary sends to Epics servers are (at least as far as I know) indistinguishable from requests coming from the Epic Games Launcher. Of course, the chance to get banned is never 0%, but it really isn't high

would be to move game sources and data providers into separate plugins

Guess I'll keep trying to rewrite the functionality into GameHub then. I'm assuming an already working solution isn't too hard to make a plugin of?

@tkashkin
Copy link
Owner

I'm assuming an already working solution isn't too hard to make a plugin of?

Shouldn't be too hard, but there will be some changes.

@derrod
Copy link

derrod commented Feb 11, 2021

There doesn't seem to be anything in actual terms of service that legendary violates: https://www.epicgames.com/site/en-US/tos

Though I don't know if there are any other ToS related to the store, but at least in those ones there's nothing really that would make a project such as legendary violate them. Though IANAL.

@Lucki Lucki mentioned this issue Mar 19, 2021
17 tasks
@dotevo
Copy link

dotevo commented Nov 1, 2021

@Lucki Great that your branch is still alive! I will check your new version. It think this branch should be merged. It is opened so long and Epic Games support is long-awaited feature.

@redromnon
Copy link

redromnon commented Mar 7, 2022

Hey guys, even though the idea of integration of Epic Games into GameHub has been a low priority, I've noticed that quite a lot has been discussed here. Moreover, I've found out that this implementation is also being worked on but there haven't been any major developments or updates recently. I'm not sure whether the testing branch has been paused or abandoned.

I was wondering if anyone's thought of just importing games like Steam via unofficial Epic Games clients. I know that the branch being worked on uses Legendary to login and install games but Heroic is getting popular and you can maybe consider importing from it. My project Heroic Bash Launcher may help in some way for launching games. What do you think about this?

@Lucki
Copy link
Contributor

Lucki commented Mar 7, 2022

uses Legendary to login and install games

That's not true. It basically does the same legendary does but it's doing it on it's own. Feel free to improve things (there's a probably incomplete list at the PR top) or squash any bugs you're encountering.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests