When you develop, i.e. create, a video game, you may want to follow this checklist of best practices. This is less important than the actual content or gameplay of the game but these items apply to the majority of video games:
- Enemies don’t respawn automatically unless the player is informed. By default, except for JPRG games, the expectation is that there is a limited number of enemies. No matter your genre, you must be consisent: enemies either respawn everywhere or nowhere. If there’s a special area with respawn, you must inform the player (for example, the character could be repeating “I don’t think they’ll ever stop coming.”).
- When there’s a time limit, you must show an actual countdown timer on the screen. No matter how bad the situation looks, the default assumption is that you can leave the game on for hours away from keyboard and nothing bad will happen. The characters can keep repeating things like “We need to hurry.” or “There’s not much time left.” but unless there’s an actual countdown timer in the HUD, you cannot punish a player for waiting.
- Mark all points of no return. In open world games, any points of no return must be clearly marked. If completing a question will cause a chapter to end, or if moving into a certain dungeon will end a part of the game or if talking to a certain NPC will move you in the finale, a big red dialog box should pop up in the player’s face, stating in no uncertain terms something like “This is a point of no return. If you proceed, the chapter will end and you will no longer be able to return to Littletown. Do you wish to proceed? [Yes, move on.] [No, not yet.]” Do not use in-character dialog for this. Make it very clear by using a game interface element.
- All animations are skippable. No matter how fun and beautiful an animation is; when you see it for the tenth time, it will be boring and a waste of the player’s time. All animations, not just cutscenes, just be skippable at the press of a button. Especially those that happen often.
- Options can be changed in-game. The player should be able to change resolution, video quality settings, controls, fullscreen mode while in-game, not only from a special utility or only from the main menu.
- 15-second countdown timer after changing resolution. When a player changes resolution, pop up a dialog box telling him to confirm the change. If he doesn’t confirm within 15 seconds, revert the resolution change. This is useful because the player might change the resolution to something that is unreadable. The timer is useful because the dialog box itself might be out of bounds of the screen.
- Custom resolutions. Resolution detection utilities are not perfect. Also, in the future, greater resolutions than you might think possible may exist. Allow the player to choose an arbitrary resolution (perhaps via .ini files) in those cases.
- Infinite save slots. Don’t place a limit on the number of save slots a player may have. One save slot is not enough. Three save slots is not enough. Ten save slots is good, but still not enough. Don’t place a limit.
- Allow named saves. Allow the player to name his save files. The current chapter, quest, screenshot and date and time of save are all well and good, and you may offer those as the default or show them anyway, but also allow the player to name the save file. This will allow them to more easily pick the save they want to load.
- Offer the “Continue” button from the main menu. Once at least one save file exists, the Continue button should appear and load the save that was last saved.
- Quicksave/quickload. The player can press a button to quickly save the game without going to menus and press a button to reload that save. The default keys should be F5 for quicksave and F9 for quickload. A quickload should not ask for confirmation.
- Quick death. When the player dies, make sure they can get back into the game as quickly as possible. Any animations must be skippable, and any loading must be as fast as possible.
- Invert mouse. Give the option to invert mouse vertical mouse axis.
- Change difficulty mid-campaign. The player can change difficulty at any time if he discovers that currently the game is too easy or too hard for him. When the player first chooses a difficulty, tell them that it is possible to later change it (e.g. “You will be able to change the difficulty later.”)
- If there are only two buttons, make it obvious which one is selected. If there’s only two buttons in the menu and keyboard is used to select a button, which one is selected? The white one or the green one? You press an arrow key and now the first button is green and the second is white and you still have no idea which one is selected. Use 3D effects, not color, to show which button is selected. If you can’t use 3D effects, put a label somewhere else on the screen that tells you what button is selected.
- Loading screens are interesting. Add interesting information to loading screens. If you use tips, give the player the option to cycle through them. Many players will read the single tip faster than the game loads. Allow the player to do things while the game is loading, perhaps perusing the in-game encyclopedia, playing a minigame or browsing achievements.
- The player can pause at any time. Allow the player to pause the game at any time, including during cutscenes. Especially during cutscenes that can’t be repeated. Sometimes the player needs to leave immediately: allow them to return back at the exact moment they left. Just… how many times did I have to suppress my urge to go to the bathroom just because the frigging 10-minute cutscene just wouldn’t end.
- Mute. Always allow the player to mute any music you have.
- Control remap. Different players prefer different keyboarrd setups. Allow the player to change key bindings. Bind to keys, not to letters. The system’s keyboard layout should not affect which button is used to shoot and which one to jump. Ask the French.
- Use standard default keys. By default,
- F12: open the in-game menu
- Esc: cancel; or open the in-game menu
- Alt+Enter: toggle fullscreen mode
- F5: quicksave
- F9: quickload
- For action games:
- Ctrl or C: hold to crouch
- Shift: hold to run
- E or Space: interact
- Space: jump
- R: reload
- I: open inventory
- J or L: open journal
- W/A/S/D or arrow keys: move