Do you like video games but don't like how inconsistent and annoying it can be to enjoy them on a personal computer? Then read on, I have something for you! And if you're not such a gamer, you'll probably learn fun things in the article nonetheless.

In this article I'll present you the new GNOME application called Games, whose first preview version (labelled 3.18.0) just came out.

Your games library

Video games on personal computers exist in lots of shapes and formats, each of these being accessible in very different ways:

games installed from Software are found alongside the applications,

Steam games are listed in the Steam client,

video game consoles and retro computers games are handled as ROM files, disk images or archives, each one playable with a different application depending on the original platform,

some game engines have their games distributed as packages that have to be run with the correct engine, such as LÖVE or the Doom engine,

Web based games are available on Web browsers,

and there are probably more formats we didn't thought of!

There is no consistent way to access them all, which hide the fact that games are more than files or applications: they all represent the same kind of media, meaning they all share lots of metadata types which could be used to ease your life!

Games tries to solve this problem by automatically listing and presenting you the games available on your computer, letting you browse your collection and play the game you want very easily!

Currently, Games handle these game types:

your regular desktop games,

your Steam games,

your LÖVE games,

your NES/Famicom games,

your SNES/Super Famicom games,

your Game Boy/Game Boy Color games,

your PC-Engine/TurboGrafx-16 games.

More games are listed but are not playable yet, and more will come in the future!

Game integration

Games tries to integrate games as tightly as possible. An example of that is the usage of the Libretro API (via the Retro and RetroGtk libraries) which allow it to integrate some gaming console emulators and some video game engines directly into the application, making them installable as plug-ins and avoiding to cripple your file system with support for gaming platforms you don't care about. Thanks to this API, Games can treat emulators and engines just as a music player would treat audio codecs and play the games itself, controlling lots of details in the process, such as:

the execution of the game,

the outputs (the audio, the video, the gamepad's vibrations, ...),

the inputs (the pressed buttons, a camera, ...),

serializing the emulator/engine's state,

and more!

An obvious feature is that we can integrate the inputs and the outputs into Games' window, but a particularly interesting feature we can offer by leveraging the serialization capabilities of the API is to propose you to resume the game where you left it!

For this release, only the NES, SNES, Game Boy and PC-Engine games are integrated. You can control them using your keyboard with the following hardcoded mappings:

Keyboard NES/Game Boy SNES PC-Engine Arrow keys D-pad D-pad D-pad Return key Start button Start button Run button Backspace key Select button Select button Select button D key A button A button Ⅰ button S key B button B button Ⅱ button W key - X button - A key - Y button - Q key - L button - E key - R button -

Future

Covers, icons and other metadata

Currently, the listed games have very few available metadata, some don't even have an icon or a cover. We obviously want to offer covers or icons for all the games, but we also want to go further by using metadata to offer interesting features such as refined search.

Game controllers

Game controllers can range from regular gamepads to dance mats, via light guns and guitars. Unlike keyboards and mice, game controllers are available in very different shapes and sizes and have equally different kinds of inputs (analog or digital buttons, direction pads, analog or digital joysticks, triggers, spinners, motion sensors...), making them really hard to handle by developers. Even controllers that are very similar — such as the Xbox and PlayStation gamepads — can have buttons placed similarly have different hardware button numbers in the drivers: even wired and wireless Xbox 360 controllers have different button numbers!

These details make game controllers hard to handle, as you have to know the type of the controller, the number and kind of inputs it has, and its layout.

You probably want gamepad support, and not to configure it if possible. To do that we will have to add a gamepad configuration facility — preferably in the Control Center — and to gather the gamepads' layout descriptions and button mappings.

More games

Currently, only a handful of game types are playable and barely more are listed. We want to support (and integrate) as much games as we can!

Improved search

Looking for games should be refined: we want you to be able to filter games depending on their genre, on the allowed number of players, on the required controllers, on their developers...

Deeper integration into GNOME

Games could be a Shell search provider, allowing you to quickly search and run any game.

Also, the Control Center should be leveraged to configure the gamepads.

Help wanted

If you want to test the application, you have some crazy ideas we could implement, you know some crazy game formats and consoles we didn't think of, you know an awesome video game database website we could use, you are a specialist of some particular format/architecture (MD-DOS games, ScummVM, ...), you know OpenGL, GtkGLArea, PulseAudio...: we need your help!