bottlesdevs / Bottles

Run Windows software and games on Linux
https://usebottles.com
GNU General Public License v3.0
6.15k stars 258 forks source link

[Request]: Allow scripts to download games directly from online stores (e.g Steam, GOG, Epic Games Store...) #3097

Open koplo199 opened 11 months ago

koplo199 commented 11 months ago

Tell us the problem or your need

It's been months (possibly a year?) since I got the first browser tab opened with the aim of researching this topic, the count keeps increasing since then, let's do a write up so I can finally close them all...

One of the first issue I came across was https://github.com/bottlesdevs/Bottles/issues/1149, a feature request for Lutris scripts. And indeed, Bottles benefiting from more than 6000 pre-configured games installation scripts would be awesome! But I would argue that it's not the scripts themselves who add the real value there: most of them are either outdated or do... nothing.

Example with the Portal 2 installer script: what it does, and its the only thing it does, is instructing the Lutris Steam service to install the appid number 620 which, you guessed it, is the Portal 2 appid.

It is those Lutris services that are immensely useful, as they allow to install games, DLC's, and updates without having to deal with the store frontend! It not only ease the process a lot (some of them already being horrid to interact witch on Windows, so on Linux...), but also saves disk usage as they do not have to be downloaded for each game!

They are the first brick on which 99%totally made up number of the available scripts are built.

Describe the solution you'd like

I cannot express how much Bottles exposing similar services would simplify the installation of some games.

And combined with the Bottles scripting capability and its dependencies management, this feature has the potential to be the first step toward the Bottles own version of Lutris community-maintained game installers.

Additional context and references

Now the real question is: how should it be done ?

There globally is two options : implement from scratch or use existing implementations. This is not a new problem, so many resources already exist.

The Heroic Games Launcher for instance use another project named Legendary for its Epic Games Store integration. For GOG, they use heroic-gogdl which seems to be their Python port of lgogdownloader. For Amazon Games nile is used which, amusingly, list Bottles support in its features.

Lutris have their own implementation under their services directory. Each service implements the relevant methods of the template class defined in base.py.

Joining effort with one of these existing project would probably be the best solution here.

orowith2os commented 11 months ago

I think we can take the most from Lutris here; they've been doing their stuff for a while now, and have considerably more contributors right now than Bottles.

I would like to spend more time fixing all of the other (311) bugs and filing down the issue tracker, but it is what it is. Nothing much is happening with libadwaita Bottles for now, sooo.....

imLinguin commented 11 months ago

Is being game launcher like Heroic or Lutris really in scope of Bottles though? The addition would be cool, but to be honest it only adds unnecessary layers for app that wasn't designed for it.

koplo199 commented 11 months ago

I think we can take the most from Lutris here; they've been doing their stuff for a while now, and have considerably more contributors right now than Bottles.

I agree, it would also be the most lightweight solution.

I would like to spend more time fixing all of the other (311) bugs and filing down the issue tracker, but it is what it is. Nothing much is happening with libadwaita Bottles for now, sooo.....

Well

More seriously, even if I have less time than I had a few months ago hopefully #3101 will be updated so it could close #2918 and #2166.

Part of the reason I waited so long before posting this is that Bottles probably wasn't ready for it at that time, but with the amount of bug fixes it received since then (source: I wrote a fair amount of them), it probably is now.

I'm so excited by this feature, and can't wait to see what the community will do with it!

koplo199 commented 11 months ago

Is being game launcher like Heroic or Lutris really in scope of Bottles though? The addition would be cool, but to be honest it only adds unnecessary layers for app that wasn't designed for it.

How exactly wasn't Bottles designed for it?

imLinguin commented 11 months ago

I mean for talking directly to game services. Bottles was made allow users to conveniently run Windows software on Linux. The installers are there to automate installation of applications and their dependencies, which also includes games.

The idea borrowed from Lutris of calling the given service's official launcher to install the game could make sense here. I just don't see the part of directly talking with the service APIs as a good fit for the project.

I'm not saying this is necessarily bad idea, it just seems to me like something really out of the project scope.

koplo199 commented 11 months ago

If I understand you correctly:

  1. Bottles offering to easily download games and their dependencies is fine, as long as the said games relies on an hardcoded URL on their scripts. However, if Bottles offers to to easily download games and their dependencies but with an hardcoded APPID on their scripts, then it is not a good fit for the project, and would really be out of the project scope.

  2. Instead, users must manage to install and execute game stores frontends never intended to run on Linux, bunny-hop their way through a land field of bugs, and only then install their games, dependencies and other potential configuration quirks manually because none of that could be automated as a result. Rinse and repeat for every game, accumulating at the same time multi-gigabytes of mostly useless stores fronted for each concerned Bottle. This is the correct scope of the project, this is what Bottles was made for.

That sounds like an heavily modded simon says game I'm unsure I want to play.

However, given the experience you have in the implementation of this same feature in other projects, I would gladly accept your help in implementing it for Bottles too, and sincerely hope you could now see the value it brings to it.