Are there frameworks for reasoning about questions such as: Given my quest and level design, is it guaranteed that for any combination of player choices there is no way for the player to lock themselves out of completing the game?
As an example, assume a quest like this:
- The Player can betray NPC A and receive item b from NPC B as a reward, or
- The Player can betray NPC B and receive item a from NPC A as a reward.
- The Player can trade either item a or b for a key. This is the only way to obtain key.
- Only the key opens a new zone. This is the only way to enter zone.
- The player can kill NPC A. Upon death, NPC A does not drop item a.
With this setup, the player can lock themselves out of completing the game if they kill NPC A and betray NPC B. In this case, they can neither get item a nor b as a reward, therefore never obtain key, and never enter zone.
Now look at these two additional rules:
- If killed, NPC A drops item a.
- The only way to kill NPC A is through an item that can only be obtained from zone.
Adding either of these options / constraints ensures that the player can never lock themselves out of completing the game.
If you needed a while to read through these rules, then it means that it is at least a bit difficult to reason about them, although this is only a very small example. For any realistic number of options, constraints, NPCs, items, and quest branches, chances are high that we overlook a potential path in which the player ends up in the most frustrating situation: being unable to complete the game, and potentially finding this out only very late.
How do people reason about such things? I can imagine encoding some useful information into my quest descriptors, items, etc., turning it all into some sort of giant state machine and computationally validating that there are no dead ends. Or I can turn all the options and constraints into Prolog clauses and check for satisfyability. Both seems doable but expensive to build just for one game.
How do studios do this? Are there existing frameworks? Endless QA and hoping for the best? Leaving it to beta testers?




