Achievement systems are a very popular mechanic to help add depth and dimension into your game. During this post we will explain how these systems work and how to implement one in your game.
You may have read about systems such as Quests, Collections and other related systems. These are all very similar and really only differ in the details in how such a system is laid out. Let’s quickly look over some high level differences.
Achievements are generally accomplishments that happen once per game. Such as completing the initial FTUE, getting to Level 10, making your first purchase, completing 100 battles, etc. Generally once completed, you get an award and are unable to complete that same achievement again.
Quests are more tightly coupled with the games storyline. A single quest may be a series of actions that need to completed before the quest can be marked finished. For example a single quest could consist of the following elements. 1) To visit a particular part of a level, 2) battle the boss character located there and 3) retrieve 4 different items located in that level. At any given time a game may have several quests that the user is actively working towards. Once the quest is completed some sort of award is presented to them.
Collections are a little more passive by comparison to Achievements and Quests. With collections you build up a storage of a certain number of items. Once the collection of (for example 5 fruit based items) are collected, they can be exchanged for a more valuable item. Once the collection is completed users often have the ability to start the collection again.
The first step in implementing an achievement framework is to lay out the various steps that you want a user to take in their game progression. Aim to have them spread out throughout the game with their frequency changing over time.
For example during the users first 7 days of game play, you will most likely want several achievements to be unlocked during each play session. As the player matures, you will want to spread out these achievements and make them harder and harder to achieve.
The exact frequency is up to you for your mature players - but we generally like to think that a player should not go more than 5 standard length play sessions without earning an achievement of some kind.
Open up an Excel worksheet or notepad document and start a list of achievements that you want your users to obtain. Start by making generic achievement groups, for example “Leveling Up” or “Obtaining x Number of Items”. The list does not have to be fancy.
Look to our right. This is an example list of achievements that a learning based app might want to create. The achievements represent the number or lessons the users interacts with as well as the number of quiz questions / challenges.
The reason we recommend to start with groups is because when you lay out your final list, you will want to spread them out across your user experience curve so that they do not all unlock at the same time. Whether or not you should include an Achievement to get to level 20 or get to level 25, may depend on what other achievements may unlock around that same timeframe.
Some sample categories to consider including are:
This list is just a sampling of items you can include and is designed to help you get your brainstorming going.
Now that you have your groups, start to lay them out on an individual achievement basis. Include an approximation of what level or experience points will be required for a user to get to that achievement. Enter out your most specific achievements first, such as battling a certain boss character or making a specific purchase. Next you can start to expand out the groups above filling in the gaps within your users progression curve. For example if you have very few achievements defined for users between levels 10 and 20, you may want to add several that are a tad more generic, such as “Reach Level 15” or “Purchase x Item” which unlocks at level 12, etc.
With the desired achievements laid out, you can now start to plan the appropriate rewards for accomplishing such achievements. If possible, try to associate a player cost with the various achievements. For example reaching level 10 may require approximately 30 mins of the users play time. By contrast reaching level 100 may require over 100 hours of play time. Therefore the rewards for each of these achievements should be scaled appropriately to compensate the player relative to their cost of achieving the goal.
Aim to have the reward be something that the user will want to obtain. Consider making limited edition items that can only be obtained through this achievement system. This will help increase your user adoption if the reward is valuable enough to the user.
Now that you have your achievement framework laid out, you now need a way to track it. The exact implementation details will vary greatly depending on how complex your achievements are. From a general standpoint the engineers may want to take a global object approach with certain core functions. In addition they may want to implement child classes that represent the various achievement types.
What exactly do we mean by achievement types? Do you refer to each row in our achievement design or even each group? Not exactly. Rather we refer to how each achievement is going to be tracked. Let’s look at some examples
All of these example achievements above are considered progression tracking achievements. Whether or not the achievement has been reached can be done by simply maintaining a counter of the various actions and evaluating whether or not that counter has been crossed. All of the above Achievements can share the same achievement class definition. After a particular action occurs (such as reaching a new level) a call can be made into the Achievement class to see if the threshold has been crossed.
While you can track the progression of these counters within the achievement framework it is generally advised to track them outside in a more generic tracking system. That way if another piece of your game wants to use this counter (such as a Quest tracking in game item purchases) they will have access as well.
Now let’s look at some different examples.
These examples above are more Event based Achievements and will have a different way to mark progression. There won’t really ever be a call in code to check whether or not a threshold has been crossed. Rather these achievements will be triggered by an in game flow that will need to mark the achievement as completed.
The two above Progression based Achievements and Event based Achievements are just two example achievement types. You may end up coming up with many different types depending on your gameplay.
Now that you have your achievement framework designed and basic implementation to track details, you will next need to work out how the feature is surfaced to the user. Your first challenge will be to create the lobby that will allow the users to view their achievements, both completed and uncompleted. Think of this like a message board that lists out the various achievements in some sort of logical order (maybe according to when the user may potentially unlock the achievement). You will want to keep this UI tight with only the most critical display pieces being shown (such as the title of the achievement or how close the user is to achieving it). Depending on how much information you have to convey you may want to have a way for users to click on an icon or button and see additional details. This could include a short explanation on how to achieve the presented goal.
Early we spoke on the rewards associated with each achievement. Be sure to make the reward very prominent in the UI so that users can see exactly why they should progress towards a goal. if the user cannot understand the value of achieving a goal, they will not attempt to accomplish it.
Your users will have questions related to the feature, so your UI should have a way for users to get basic help if they need it. This may be in the form of a small FAQ or an explanation on how the system works. Keep this UI small as it will not be needed often. Hidden behind a button or icon is often best.
Users will often want to brag about their accomplishment, so don’t overlook the value of letting them share with friends either in game or out of game that they have completed a given achievement.
With the introduction of any new system or framework, it will never be perfect on first launch. Evaluate your performance and track how your users are interacting with the feature. If you are releasing an achievement to encourage the purchase of an in game item, try to track how many users purchase that item before and after the achievement system is put into place. This will give you clear insight into whether your achievement system is providing value.
If your achievement system is adding value, you should see players lasting longer within your game. Pay close attention to your user return rates (users who come back the next day, next week, etc). If the addition of an achievement system had no influence on those statistics then it is likely that your users saw no value in the achievements and / or associated rewards.
If adoption of the achievement system is behaving poorly you may want to consider a couple of tips before scraping the feature. First - make sure their are no UI implications. There may be a flow issue where users do not even really recognize that they feature is there. Is the feature surfaced and visible to user in an adequate fashion. Next look closely at your rewards - are they appropriate to the amount of effort required by the user. if the users do not appreciate the rewards or do not find them as worth their time then they will not engage with the system.
An achievement system can be a very powerful mechanic within your game to add depth and dimension. However it is not an easy thing to implement. it requires a lot of planning and design. It requires a proper technical implementation that allows for growth and scale. In addition it requires a clean UI experience that the users will be able to understand and work with. Lastly don’t ever underestimate the power of tuning and evaluating performance.