WARNING: This project doesn't yet have a permanent name, so this URL isn't permanent. I merely uploaded this on request.
This is a very Work-In-Progress experiment in how far I can go to produce something Steam-like for DRM-free games without depending on an external service.
Currently, its primary focus is on getting the game provider backends complete, comprehensive, and reliable, so this is what the test GUI looks like:
(The blurry Crayon Physics and Delve Deeper icons will be fixed when I bypass the scaled icon caches used by PlayOnLinux and the Desura client and read straight from the source files. The undersized DOSBox icon issue is already fixed.)
At the moment, it supports the following backends:
-
XDG .desktop files installed into the launcher system
-
The Desura client when using
~/.desura/
-
Games configured in a system-wide install of ScummVM or ResidualVM.
-
Windows applications via PlayOnLinux
-
A fallback option which can use (in descending priority order):
- Metadata scraped from GOG.com's
start.sh
scripts - Metadata scraped from my
install.sh
script - Names, icons, and executables heuristically inferred from filesystem paths
(eg.
trine2_complete_story_v2_01_build_425_humble_linux
becomes "Trine 2: Complete Story")
- Metadata scraped from GOG.com's
NOTE: Currently, it preserves no state. While the "Rename..." and "Hide" options in the test GUI do work, they won't be remembered across restarts.
-
A POSIX-compliant operating system
-
One of...
If you want to run the test suite, you'll also need:
NOTE: Until I decide on a permanent name, I can't produce an installable package name and, thus, can't test in a virtualenv with tox. As such, I can't guarantee my list of required dependencies is complete.
Also, the test suite doesn't yet exercise the code branches for things like "PlayOnLinux not found".
-
Edit the
GAMES_DIRS
constant insrc/game_providers/fallback/__init__.py
-
Run one of the following:
test_providers.py
for a quick, bare test of what the backends findtestgui.py
for the GTK+ 2.x test GUI which exercises the full range of functionality currently implemented.testgui_qt.py
for the Qt5 test GUI which I'm using to drive frontend agnostic refactoring and to identify warts in a Qt implementation.nosetests
to run the test suite
- Support for moving things like PlayOnLinux, Desura/Desurium, ScummVM, and ResidualVM out of the list of games (where the XDG backend put them) and into either the context menu for the things their game_providers returned or a menu bar.
- Support for launching as a separate user somehow as one way to protect my
$HOME
from getting doodled on by Wine apps, MojoSetup, and games which usegetpwuid()
to write non-hidden folders. - Look into ways to make "separate out save/config/log files for backup using OverlayFS" a more officially supported option, given that it's been in Ubuntu kernels since 11.10 and was mainlined in 3.18.
- Backends for anything ScummVM-like which both reliably scraped and launched directly into a specific game.
- Look into merging with Lutris. They've got a GUI and plans for more backends. I'm writing more backends and may be satisfied with their GUI.
- Tagging/Categorization, filtering, and sorting
- Joystick activity proxying for reliable screensaver suppression
- Play time tracking incorporating input idle-based AFK detection
- Antimicro integration, if possible
- Support for taking a "local GOG backups" folder and providing a Steam-like ability to batch-select and install .deb and/or .tar.gz games from it. (At minimum as a proof of concept. LGOGDownloader integration later, maybe.)
- LD_PRELOAD [1] [2] hooks to do things like:
-
Wrapping X11 APIs to change resolution and create new windows so that games can be forced to windowed operation without realizing it. (Especially under LXDE since Openbox is terrible about remembering window positions and I dread launching new games because they might default to fullscreen operation and trash my desktop layout)
-
Wrapping POSIX APIs like
getpwnam
to force games like Draw a Stickman and Wizorb to write their non-hidden folders somewhere other than$HOME
even if they ignore$HOME
. -
Wrapping SDL calls so games like Dungeons of Dredmor will still offer sane windowed-mode resolutions if the nVidia TwinView
MetaModes
option is used to lock the desktop at 2560x1024. -
Lying to games about the available set of joysticks to...
- ...prevent games like Wizorb from crashing with more than 4 joysticks connected.
- ...provide joystick selection for games like Rogue Legacy which insist on using joystick #1, despite Linux having no Joystick Control Panel to mark your 3DConnexion Space Navigator's dud joystick endpoint (it's not a joystick at all) as non-default.
- Redirect games which prefer evdev over joydev through some kind of uinput- or CUSE-based proxy to reverse the deprecation of the ability to calibrate devices with broken defaults like the Saitek Cyborg 3D USB Gold (currently useless in Strike Suit Zero).
- Possibly XMPP integration for a Steam chat analogue.
- Matchmaking for DOSBox's IPX tunneling if I can figure out how to do it well.
...and various other things not yet copied out of my TODOs