"Abandonware" Game Launcher
This is a little Python 3 app to launch "abandonware" easily from my console. It looks like this:
I am well aware that "abandonware" is not a real thing, and that even if it were, it'd be increasingly less common thanks to the fine work of places like GOG. Regardless, I've got a bunch of old games which are used via Dosbox, Z-machine interpreters like Frotz, or (less commonly) console emulators. I wanted to have them all via a nice easily-traversed TUI menu system, and hence this silly little app was born.
This was developed on Linux. It could possibly be useful to someone on MacOS/OSX. It could maybe run in Cygwin on Windows, but good luck on that front.
I'd be a bit surprised if anyone but me finds this useful, but figured I'd put it out there just in case.
This is a Python script which requires at least Python 3.7, and
uses urwid for the TUI stuff. It could
be pretty easily adapted to run on lower versions of Python,
but I'm using some arguments to
subprocess.run() which were
introduced in 3.7, and I don't care enough to support lower
setup.py or anything like that; just slap it
~/bin dir, or symlink it there, or just run it
from the git checkout.
The app uses files named
abandon.info on your filesystem to
know what to display on the menu. It's hardcoded to start in
/usr/local/games/abandon, so you'll have to change that by
hand down at the bottom of the script. If anyone else ever
actually uses this, feel free to bug me and I'll optionize
that or something.
From that root dir, each dir you want to include should have
one of those
abandon.info files. The simplest is a category
file, which just creates a folder/category:
cat: Other sort: ZZZ
sort is optional but can be used to sort entries by something
other than their category/name.
For games themselves, here's my Zork III
name: Zork III: The Dungeon Master (1982) sort: zork 03 type: zmachine rom: Zork 3 R17-840727.z3
name is what's shown in the menu, of course.
still optional, and will override
name when sorting the list.
type can currently be one of:
The idea behind having a "generic" name is that some games may
end up working better with some emulators/interpreters/environments
over others. For instance, I prefer using
frotz for most of my z-machine
games, but some of them require the fancier stuff that
But rather than hardcode frotz for all the others, I can specify
zmachine and change the "default" later, should I decide
I'd rather run all of them in grotz. (Or even some other
z-machine interpreter altogether.)
All types except for DOS/Dosbox require a
rom parameter in the
abandon.info file. DOS/Dosbox can specify the
to auto-launch an EXE/COM/BAT file, but will otherwise just map
C: drive and leave it there:
By default, dosbox games will use
~/.dosbox/dosbox.conf for the
configuration. If the file
abandon.conf exists in the game's
dir, though, it will use that instead.
That's about it! The directory you're "in" while running the
app is scanned for
abandon.info files each time you enter or
leave, so if you make changes to the files, or add/delete
abandon.py still running, those changes will
be refreshed by going out and back in to the dir in question.
This is quite straightforward, of course. Arrow keys and enter will be your primary input methods, though thanks to using urwid for the TUI stuff, you should be able to click with your mouse too, should you want to do that.
You can also hit
b to go back to the previous dir, and
quit the app.
o can be used to open up an xterm inside the
currently-selected menu item.
Categories show up in yellow, launchable games show up in green.
If there are any errors in an
abandon.info file, there'll be
a red entry in the list.
I thought about being clever with what emulators/interpreters/etc
were supported, but since I'm likely to be the only user this thing
ever has, in the end I didn't care. The supported
are specified in a couple of vars at the top of the
class, and then their commandlines are constructed inside that
activate function. It'd be quite trivial to add new