I've just finished creating puzzles for the latest piece of free content in Exploit: Zero Day, and it was my first time doing a considered design of puzzles. I wanted a few levels of difficulty, but for puzzles to not just become obnoxious as the difficulty increased.
The puzzles I've designed will be going live later this week, and hopefully folks will like them. I iterated quite a bit on some of them as I tried out different tactics, especially the puzzle pictured with this post.
When it was all said and done—which took a while, since I was new to it—I was able to distill the tactics I used into this handy-dandy list.
Keep in Mind What Draws Players' Eyes
When playing, players' eyes will probably start at a port node and follow a packet. Their eyes will be drawn to nodes being disabled, then to nodes being enabled. If the puzzle has a large mass of nodes, the enabling of a previously-disabled key node might get lost in the colorful shuffle. If the puzzle is large, an effect happening far from the packet might not be quickly noticed.
If it might be difficult for a player to spot where your goal node is amidst a busy puzzle (especially if the goal node is initially disabled), it's helpful to have one of the paths a packet takes early in the puzzle solution draw the eye in that direction.
Try Something Representational
If the puzzle represents a certain kind of server, play around with shaping it in a way that reflects that function. It doesn't always work, but when it does, it can help give both you and the player a strong sense of intent in the design.
Plus, it can be cute.
Consider Having Unlocking Segments
We like to think of challenge in games as a teaching mechanism. Not in the way of "getting schooled", but that by surmounting the challenge, players learn how the system of the game works. That certainly applies in the larger scope of a game like Exploit: Zero Day, which starts new players through a series of small but increasingly complex puzzles to teach them how different nodes work.
It can also work well in an individual puzzle: by giving the player access to small part of the puzzle, which they then break out of into the larger puzzle (or a larger segment), you offer the player the chance learn what tricks they'll need on a small scale.
Interconnect Toggles to Ramp Up the Difficulty
Exploit: Zero Day has several nodes that toggle the state of other nodes, either for a few seconds or until the switch is hit again. A common usage is to have a Buffer node (which deactivates a node for a few seconds) attached to a Blocker node (which stops packets). To get past the Blocker node, the player has to hit the Buffer, then hit the Blocker before it reactivates.
To increase the difficulty, connect these toggling nodes to one another. For example, connect a Semaphore node (the new pass-through Flip-flop node) to another Semaphore node that's connected to a disabled Key node. That will result in the player needing to figure out the (possibly narrow) window in which the Key node is even available to be hit.
We try not to use this too often, because it can make a puzzle very difficult to keep track of. There's also an increased likelihood of the player getting into a state they can't fix. If a chained Flip-flop or Semaphore's state gets out of sync with some other part of the puzzle, the player might have to refresh and start the puzzle from scratch.
Check for Trivial Solutions
It would be very frustrating to build out this complex, beautiful multicolor system of nodes, only to realizes that what you thought was a 10-step solution could be done in... two. Take a break, come back with as fresh an eye as you can, and play the puzzle anew (start from the goal node, trace backwards, etc.). Does it actually require (nearly) as many steps as you originally found it to take? If not, figure out what's extraneous and either make it useful, or remove it.
Got Other Tips?
Are there any good tips I missed? Let us know in the comments or post over on the forums.
Interested in playing Exploit: Zero Day while it's in alpha? Join the monthly mailing list, and you'll get an access code when the next newsletter is sent out. If you already have access, make sure you're caught up on your Jobs.
Members of the press, YouTubers, and streamers can request access from distribute().