I was playing BioShock 2 Remastered and encountered some nasty bugs. On multiple occasions, the game would CTD upon killing an enemy. I eventually fixed the problem by following this guide by hexaae, but it left a bad taste in my mouth nonetheless. 2K Marin unintentionally created a game where a crash is likely to cost the player an hour or more of progress, and the remastered edition introduced some crashes! (I played the original BioShock 2, and I don't remember it crashing like this.)
Now, this isn't entirely 2K Marin's fault. They were following the design paradigm created by 2K Boston in the original BioShock, and I don't blame them for not wanting to stray too far. For the reader who has never played either of these games, here's how they work:
- The game is divided into several large levels, each of which can take an hour or more to complete.
- The game autosaves at the start of each level, and only at the start of each level.
- If the player dies, they are resurrected at a Vita-Chamber. Essentially no progress is lost on death.
- As there is no real penalty for dying, making manual save files is usually a waste of time unless you're about to quit the game.
We can see that players are likely to proceed through the game largely ignoring the manual save option. There's simply no compelling reason to fiddle about in the save menu rather than actually playing the game. However, the autosaves are quite infrequent: if the player is forced to revert to their last autosave, they will lose a significant chunk of progress. The incautious player can but hope that the developers have made a crash-free game. Unfortunately, those hopes were unfounded, and I had to completely redo several levels. (I also lost progress to a brief power outage, which wasn't the game's fault, but it certainly did nothing to improve my mood.)
How could this have been done better? Let's look at some examples.
- From Software's Dark Souls III expects the player to die frequently, so it effectively autosaves whenever the player does anything. Your inventory persists between deaths, although the enemies respawn.
- Bethesda Game Studios' The Elder Scrolls V: Skyrim expects to crash frequently, so it autosaves at every area transition. Areas are relatively small, so autosaves will happen at short intervals, and the game keeps the last three autosaves in case of corruption or other problems.
- Obsidian Entertainment's Pillars of Eternity has challenging and mentally demanding combat with permadeath, so it encourages the player to be paranoid about making manual saves before any fight that looks particularly tough.
For BioShock 2, a degenerate solution might be to chop up the levels up to have more loading screens for autosaves, but I would consider this an option of last resort. Building large, complicated levels with no interruptions should be lauded, not discouraged. The save system should be modified to match the level design, not the other way around! BioShock 2 doesn't seem to be able to make saves smoothly; all saving is done through a menu or loading screen where the game locks up until the save is complete. This poses some challenges for us as armchair designers to insert some more autosaves. Perhaps the game might autosave after the player has swapped out their plasmids or gene tonics at a Gatherer's Garden or Gene Bank? The player is already on a menu screen, so the autosave won't interrupt any action. Players probably won't swap upgrades often enough for the save pause to become annoying, but they are likely to do so after completing some major milestone that has rewarded them with ADAM (the game's secondary currency for buying genetic upgrades). Now the autosave prevents them from ever having to repeat tedious upgrade-swapping.
The lesson for game designers is such: Make an effort to calculate an "average time lost to crash" statistic based on the way your game incentivizes the average person to play. If the ATLTC exceeds half an hour or so, I think your game needs more autosaves. Even if your game is rock-solid, future re-releases might not be, and smart design can mitigate software instability.