Guest editorial by Peter "Durante" Thoman. Durante is the creator of PC downsampling tool GeDoSaTo and the modder behind Dark Soul's DSfix and Deadly Premonition's DPfix.
The PC gaming market is thriving. Hundreds of games are released every month. Some are from established studios, who have been working on PC games non-stop for years or even decades, but this is now the exception. Indie developers are changing the face of Steam. Developers who once made games exclusively for consoles are porting them to the PC for the first time—and some of those games, like Dark Souls, are finding bigger, even more passionate communities than they had before.
For developers new to the PC, there can be bumps in the road. As I’ve learned from my interactions with some developers, at times they simply don’t know what PC gamers want and expect from their games: graphics settings, keybindings, modding support, and more. Likewise, gamers often are not fully aware of the restrictions and workloads their wishes impose on developers, and why some of these features may not be included.
This article is aimed at addressing both groups—to tell developers what PC gamers expect from their games and which of those features we consider most vital, and to explain to gamers how much work it takes to meet those expectations.
The features PC games should strive for
I’ve chosen to group the features discussed in this article by importance, and discuss them in the order from essential, to important, to enthusiast.
- Essential features are those that PC gamers have expected for decades, and which are provided as a minimum standard by the vast majority of games released on the platform. These will be used by almost everyone.
- Important features are those which greatly improve the versatility of a game, and are likely to be used by many, but are not as strictly required as the essentials.
- Enthusiast features are just that: options and functionality targeted at enthusiasts. While these might not seem worth the effort at first glance, it is important to consider that enthusiasts often are also opinion leaders, and can provide lots of free and highly targeted marketing for a game.
For each feature, after a short description, its impact and importance will be discussed, followed by a description of the difficulty of implementation and potential show-stoppers. Please note that the latter is generalized and will differ from game-to-game.
After features, I tackle two other crucial elements that define a great PC game: user experience and performance.
These are the features that every single PC port should aim to include. Most PC gamers will expect these features, and they're important because of how broad and varied the PC platform is.
PCs are used with a wide variety of displays, from small laptops to 4K monitors. As such, the ability to natively render to all these devices is paramount. Furthermore, supporting arbitrary resolutions offers a first, simple and effective step of performance scaling—if someone has trouble running the game, they can reduce their rendering resolution.
An important thing to note here is that the correct approach is not to provide a selection of “common” resolutions. The only correct way to implement this is to programmatically support any resolution, and populate the list by querying the OS. This has the additional benefit of also transparently supporting downsampling.
For any 3D rendered game, the difficulty of supporting this feature should be very low. Realistically, the only common roadblock which might be encountered in ports are fixed pixel coordinates for UI elements, which would need to be exchanged for relative positioning.
With the variety in PC hardware also comes a large variety in performance and expectations. Some might be happy to play slow-paced games at 20-30 FPS, while others will insist on a locked 60 FPS—or more—and have the hardware to support it. Therefore, supporting variable frame rates is just as essential as supporting arbitrary resolutions.
Sadly, the implementation story for this feature is not always as straightforward as in the case of arbitrary resolution rendering. When setting out to develop a new game, making the decision to support variable framerates does not impose much effort. However, porting an existing game may present difficulties: in some old games animations or even game logic may be frame-locked, and even in modern games some physics simulations might break with time step lengths which differ greatly from what they were tested and developed with.
The third in the triumvirate of essential features again stems from the PC’s diversity. Players might be using any type and combination of keyboards, mice and other input devices with your game. Accordingly, the ability to remap all in-game actions to these devices is required.
There are a few rather easily implemented features which are often missed in games, and make this functionality more useful and complete:
- Allowing for more than a single key to be mapped for each action
- Enabling the mapping of “unusual” mouse buttons—that is, not just M1-M3, but also M4, M5, etc
- For actions such as crouching, allow them to be mapped either as toggles or held-down buttons.
Implementing input remapping is mostly UI work, and thus not particularly difficult, though it may be somewhat time consuming—especially if there are many different scenarios in a game which feature button prompts and are handled distinctly in the engine.