Pull Algorithms
Often when designing games, we need to design a pull algorithm, or a way to give the player a random game object from a pool of random objects. It's hard to visualize how these random distributions look in practice and so difficult to design them well. Over the course of this article, I’m going to present a bunch of small simulations to help understand various algorithms.
Table of Contents
Basic Player Engagement
Stimulation
This is our first simulation and it’s pretty simple. Just click the interact! button to give the player a game piece. Different players require different amounts of engagement. If a player receives too little stimulation, they will leave.
This is a really abstract representation of how getting stuff in games works. Nevertheless, you can imagine that if this were Pokemon Go, every time you pressed the interact button, the player got a new Pokemon.
Interact! |
On The Simplifications of the Article
This is an obvious and gross simplification of the player's experience. However, if we look at it as purely the experience on the single axis of the pull system, and a heavy simplification of that as well, we can still derive value from these simulations. It is also worth remembering that a new feature could do well in this simulation, but still be bad for your game due to something that this article doesn’t cover, such as negatively impacting the decision making in the game or increasing complexity to the point of impenetrability. Video games are complex and need to be looked at with multiple lenses.
Basic Systems
A common game development pattern is to use a system to drive the player’s engagement instead of hand-crafting it in the manner of the above simulations. It’s often time consuming and expensive to hand-craft a full drop pattern. So, with this simulation, we’re going to go over a basic system to do that for us.
There are three sliders to play with in this simulation:
Pull Rate: How often the player gets a new game piece.
Novelty Requirement: The player's need to get new stuff.
Pull Rate 0 Novelty Requirement 1 |
Observations:
You can see that in this simulation, you get to an almost steady state very quickly, where the players that want more engagement than the system provides leave and the rest persist indefinitely.
Pull Systems
Simple Simulation
We're now going to add some detail to the previous simulation to make it skew closer to a real pull system.
The impetus for this piece came from watching Pokemon Go release the second generation of Pokemon into the wild, so we’re going to use that game as the primary example for the rest of the piece. In particular, we’re going to look at the way players randomly encounter new Pokemon to catch, and consider that a pull system.
We’re going to start with the most abstract representation, where we’ll just assume that all of the pieces are of equal value and we’ll assume 100 of them.
Pull Rate 0 Novelty Requirement 1 Number of Pieces 100 Value of New Piece 2 Value of Duplicate Piece 0 Average Number of Pulls: Average Number of Unique Pieces: Average Time for Player: |
Observations:
Setting the pull rate to a value equal to that in the previous graph and leaving the value of duplicate pieces at 0 results in the graph tending to 0 as all the players get more and more pieces and so are less likely to experience that boost of getting a new piece.
If we set the value of a new item to be equal to the value of a duplicate, we can recreate the previous graph trivially.
Increasing the pull rate beyond a point when the value of duplicate pieces is still 0 results in a decrease in average time beyond a certain point as players quickly collect