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:
.. image:: testgui_screenshot.png :alt: Test GUI :align: center
(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 system launcher
~/.desura/
A fallback option which can use (in descending priority order):
start.sh
scriptsinstall.sh
_ scripttrine2_complete_story_v2_01_build_425_humble_linux
becomes "Trine 2: Complete Story").. _Desura: http://desura.com/ .. _install.sh: https://gist.github.com/ssokolow/7010485 .. _PlayOnLinux: http://playonlinux.com/ .. _ResidualVM: http://residualvm.org/ .. _ScummVM: http://scummvm.org/ .. _system launcher: http://standards.freedesktop.org/menu-spec/menu-spec-latest.html .. _XDG .desktop files: http://standards.freedesktop.org/desktop-entry-spec/latest/
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.
One of...
PyGTK 2.x
, and enum34 (For the more advanced test GUI,
since it's what I'm used to and I don't like GTK+ 3.x)If you want to run the test suite, you'll also need:
.. _coverage.py: https://pypi.python.org/pypi/coverage .. _enum34: https://pypi.python.org/pypi/enum34 .. _Nose: https://pypi.python.org/pypi/nose .. _PyGTK 2.x: http://packages.ubuntu.com/trusty/python-gtk2 .. _PyQt5: http://www.riverbankcomputing.com/software/pyqt/download5 .. _PyXDG: https://pypi.python.org/pypi/pyxdg
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".
GAMES_DIRS
constant insrc/game_providers/fallback/__init__.py
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 suitegame list and why. (eg. TryExec
failed, eliminated by deduplication,
etc.)
backends. I'm writing more backends and may be satisfied with their GUI.
.. _Lutris: https://lutris.net/
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.
or path or ..." matching combined with not flushing SQLite records on uninstall to allow custom settings to persist should the user ever reinstall a game.
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.)
[1] <http://stackoverflow.com/q/3826552/435253>
[2] <http://stackoverflow.com/q/2182774/435253>
[3] <https://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning>
__(both scalar and vector) such as "What haven't I played recently?" and "Pick me something at random".
.. _LGOGDownloader: https://github.com/Sude-/lgogdownloader
messed up and games without custom gamma support can be forced to have
custom gamma by editing the gamma in another window while the game is
running (either using xgamma
or the X calls it makes).
to properly fix "Screensaver activation ignores Joystick input" until at least when Wayland replaces X.org.
OverlayFS" a more officially supported option, given that it's been in Ubuntu kernels since 11.10 and was mainlined in 3.18.
(Windows) for games like Towerfall Ascension which only recognize XBox 360 controllers and need other joysticks to lie about their identity.
can be transparently added to games like Cave Story+ which don't natively support joysticks at all.
[1] <http://www.catonmat.net/blog/simple-ld-preload-tutorial/>
[2] <http://www.catonmat.net/blog/simple-ld-preload-tutorial-part-2/>
hooks to do things like:
getpwnam(3)
and open(2)
to force games like
Draw a Stickman and Wizorb to write their non-hidden folders somewhere
other than directly in $HOME
even if they ignore $HOME
.Lying to games about the available set of joysticks to...
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 <http://www.3dconnexion.com/products/spacemouse/spacenavigator.html>
__
as non-default.$HOME
from getting doodled on by Wine apps, MojoSetup, and games which
use getpwuid()
to write non-hidden folders.
.. _Antimicro: https://github.com/Ryochan7/antimicro .. _CUSE: http://bryanpendleton.blogspot.ca/2011/02/fuse-cuse-and-uio.html .. _getpwnam(3): http://linux.die.net/man/3/getpwnam .. _joystick selection: https://imgur.com/sJeiCFK .. _LD_PRELOAD: http://www.linuxjournal.com/article/7795 .. _MetaModes: https://help.ubuntu.com/community/VideoDriverHowto#Twin_View_or_Dual_Head_displays .. _open(2): http://linux.die.net/man/2/open .. _uinput: http://who-t.blogspot.ca/2013/09/libevdev-creating-uinput-devices.html .. _xboxdrv: http://pingus.seul.org/~grumbel/xboxdrv/ .. _x360ce: http://www.x360ce.com/default.aspx
process/file-monitoring APIs to autodetect where the game stores its save files so an open analogue to Steam cloud save can be written by plugging into things like Dropbox/Mega/etc.
XMPP <https://en.wikipedia.org/wiki/Xmpp#Deployments>
_ integration for aSteam chat analogue.
well. (LAN broadcast, Internet via XMPP and NAT traversal?)
requirement that all of the games clutter up the games submenu in the system launcher.
Probably also a good idea to support some kind of "sync XDG menu" option for people who use something like Gnome Shell for everything.
I'll want a clear and well-optimized keyboard workflow for all major parts of the UI.
view that shows the disk usage breakdown for managed games and provides quick access to any detected uninstall scripts.
.. _Launchy: http://www.launchy.net/ .. _Filelight: https://en.wikipedia.org/wiki/Filelight