User:Tepples/Console to PC port checklist

Bruno Ferreira made a checklist of ten things that console-style PC games need to do in order to allow comfortable play both on the desktop and in the living room.


 * Mouse in menus
 * Make sure all menus and inventory screens can be navigated with the mouse as well as any input device used in-game (such as a keyboard or controller).


 * Pointer sensitivity
 * Use operating system pointer sensitivity (base speed and acceleration) for menus. If your game also uses the mouse for aiming, give separate sensitivity curve options for that.


 * Third-party controller support
 * If your PC game is for GNU/Linux, OS X, or Windows desktop, allow use of HID joysticks in addition to XInput controllers. (In Windows desktop, use  or DirectInput for non-XInput controllers.) Because their button layouts can be a Tower of Babel, so give users the option to share their button layouts and search for other shared layouts by VID/PID. Ports to Android should allow use of external keyboards and Bluetooth gamepads. And for cricket's sake, don't use the cop-out of mapping keyboard keys or HID buttons to Xbox 360 buttons and then Xbox 360 buttons to actions.


 * Binding overloading
 * If buttons' functions are context-sensitive, such as reload and use, allow the player to split them. Make it clear to the user which functions can be placed on the same button.


 * Don't make everything huge
 * Unlike console displays, which can be as small as 360i, PC displays are almost always high-definition. In addition, a 1080p display on a desk fills more of the view area than a 1080p TV. So give players an option to push text sizes smaller in menu and inventory screens to fit more settings on each screen.


 * Expose configuration files
 * Let the user turn antialiasing, vsync, and other options on and off. Let the user control which device is used for sound, especially in games with voice chat. And document all configuration files and -console commands.


 * Allow dedicated servers
 * For non-MMO games, provide a way to host customized online games using no publisher infrastructure. This can be hosted on a player's home computer or on the so-called "cloud" (a VPS on someone else's computer leased by a player). And be sure to support IPv6, as a lot of providers are using the dual-stack lite pattern of assigning a publicly routable IPv6 prefix and an IPv4 address behind a carrier-grade NAT.


 * Allow saving anywhere
 * Structure your game model to separate the game model from the details of the view, and determine how each part of the model shall be serialized. This way the player can save anywhere.


 * Use the existing profile
 * Don't require players to create an account on an online service just to play the game. If the player doesn't want "social" features, let him play without having to create an account. And default to the "social" feature matching the distribution method. If the user bought the game on Steam, use Steam accounts. If on Windows Store, use Microsoft accounts. If on Google Play Store, use Google accounts.


 * Support modding
 * At minimum, document asset formats. Providing tools to read and write those formats is even better.