Do you know what the gaming world was like ten years ago? Microsoft’s Xbox 360 was a big success, largely due to its gaming network Xbox Live. The service offered (and does so to this day) plattform wide friend lists, achievements, leaderboards, multiplayer and more. And players loved this new kind of social network. So it is no surprise that, with the advent of the App Store in 2008, various comparable services for iOS, tried to break into the new market. Another two years later, Apple itself joined the party and integrated its service GameCenter right into iOS. Now surely, with Apple caring so much about gamers, GameCenter would be the new Xbox Live, right?
Well, while all the other gaming networks for iOS perished quickly (rest in peace, Openfeint), GameCenter wasn’t a runaway hit either. Just try to open the GameCenter app on your phone and you’ll know what I mean. Still, the network exists to this day, and as I used GameCenter and its framework GameKit extensively in Letteral, I want to share with you the experiences I gained. So what will it be for achievements, leaderboards and multiplayer? 1UP or rather Game Over?
What’s the offer?
Game Center’s features can be divided in three blocks. They are
- Leaderboards, Challenges and Achievements
- Profiles and Friends
- Matchmaking and Multiplayer
While I didn’t use every last of these features, I’ll explain what all of them do and let you in on what I’ve learned about them, if I did so.
Leaderboards, Achievements and Challenges
You can probably guess what these do. If a player’s performance in your game can be quantified, like scoring points or beating a level in a certain time, you can allow players to compare their performances through leaderboards. Unlike in old arcades, where there was a local champion for each machine, leaderboards in Game Center are stored online so players can actually see who in the world is the fastest to beat level 3. (Sometimes, global leaderboards rather show you who is the best cheater but that’s another story…). For each app, Game Center allows developers to create 100 different leaderboards. If you use something called leaderboard sets, this number goes up to 500. You can use a leaderboard set if you can feasibly group your leaderboards. For example, if your game has multiple difficulties, a leaderboard set could be “Level 1” and the leaderboards in there could be “L1 Easy”, “L1 Medium” and “L1 Hard”.
You can create and manage leaderboards through iTunes connect. Each leaderboard has a unique identifier and you can set things like its data type (e.g. integer, float or a time) or whether small or large values are better. Of course, you can also localize your leaderboards names for different languages.
I didn’t use leaderboards in Letteral as there just isn’t anything I could measure. Your final score in a match can’t be higher than 7 and the number or turns a match takes is pretty meaningless as well. I could have gone for something like “Total points scored” but this rewards grinding rather than skill so I decided that it was not worth the effort.
I also didn’t implement challenges. Tightly connected to leaderboards, these allow players to choose one of their high scores (or a particularly difficult achievement for that matter) and challenge one of their friends to beat them. The challenged player then receives a push notification, informing him about the thrown gauntlet. Now, I would like to tell you more about how challenges work or even if they still work at all but as I sad: Letteral doesn’t have them.
The opposite is true for…
These little fellows are used extensively throughout the game. In fact, they are so important for the game that one of the three options in the main menu is devoted to them. This makes sense for Letteral as there are just a lot of little deeds for which I can reward the player: Form a 10-letter word, take over multiple hexagons at once, win your first game… Achievements are a great way to make these accomplishments even more rewarding for the player.
I also use them to subtly teach players to play more efficiently. It is much easier to win if you block all eight hexagons on the board, so there is an achievement if you do this the first time. You can block the board even more effectively if you take over just four triangles in the center so guess what: Another achievement rewards the player for doing just that.
The last type of achievements is my favorite one: Secret achievements. For these, players only see the title but not the instruction on how to complete the achievement. This hopefully encourages people to think outside the box and try out things they usually would not do. For example, the easiest of these achievements is called “The name of the game” and it rewards players for, you guessed it, playing the word LETTERAL. There are four more secret achievements, called “Won’t lovers revolt now?”, “The floor is lava”, “Overachiever” and “Toyonaka 1969” which I won’t spoil here. Especially the last one is so difficult (and silly) that I doubt that anyone has cracked it yet.
Apart from pure satisfaction, player are also rewarded with actual goodies for reaching an achievement in Letteral. Most of the “normal” ones reward the player with a free live. Therefore, even though I don’t have a mechanic that grants players free lives after a certain time, especially newer players will be able to start multiple games before having to worry about their lives for the first time. The secret achievements are much more valuable as they grant players a theme credit which usually costs $0.99. I chose to give out these credits for two reasons: First, I wanted to make these achievements especially rewarding as players might have had to jump though one or two hoops just to get them. Secondly, even though the theme credits are part of my monetization model, I wanted everybody to play the game for free without feeling that they are missing out on something. Through these rewards, players can easily unlock their favorite theme without ever paying a dime and only players who want a wider variety of themes are “forced” to actually pay for them.
In order to implement achievements, you first have to head over to iTunes connect. Just like with leaderboards, go to your app’s features and hit “Game Center”. Here, you’ll find a list of your achievements along with the option to add new ones. Unfortunately, iTunes connect doesn’t just ask you for an ID, localized titles/descriptions and the question whether an achievement can be earned repeatedly or just once. It also asks for a lot of information that is obsolete: The number of points an achievement gives and the question if it is hidden. Also, rather annoyingly, iTunes connect wants an icon for each achievement. As the GameCenter app was discontinued in 2016 and many apps, like Letteral, show a custom banner for achievements anyway, this information should not be mandatory anymore in my opinion.
Another thing that developers have to be aware of, is the fact that there is no comfortable way to add localized descriptions to your achievements (or leaderboards). In order to add a single localization, just follow these eight “easy” steps:
- Open the achievement’s page
- Open the “Add language” page
- Select the new language
- Enter your localized title
- Enter your localized pre-achievement description
- Enter your localized post-achievement description
- Hit save
- Hit save on the next page again
If you have dozens of achievements and multiple languages, going through these steps again and again will take hours – And that doesn’t include the time you need to actually translate the text. And keeping your localization database in sync with the information in iTunes connect later on isn’t much fun either. You can easily localize a whole app by importing an xliff-file which will be created by your translators anyway and I wonder why Apple doesn’t offer the same functionality for the text that is stored in iTunes connect…
If you managed to add all of your achievements to iTunes connect without going mad in the process, you can head over to Xcode and write some code. Now, I won’t talk much about the actual coding here. This would simply go well beyond the scope of this blog and there are loads of resources on programming out there already, So just going over the steps briefly: GameCenter provides you with two lists of object. You can get the list of GKAchievements via [GKAchievement loadAchievementsWithCompletionHandler:] and the list of GKAchievementDescriptions via [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:]. The GKAchievements are the ones you absolutely need: they contain stuff like the achievement’s ID, a percentage that notes the user’s progress in completing the achievement or a flag that tells you if the achievement was already completed. When a user made progress towards an achievement, you just update the GKAchievement and save it back to the server via [GKAchievement reportAchievements:achievements withCompletionHandler:]. The GKAchievementDescriptions on the other hand are optional. They contain the (localized) titles, descriptions and images of your achievement, so essentially what you filled in in steps 4-6 of the list above. You only need to load those from the server if you plan to have a list of all available achievements in your app. If you don’t have this list, and if you are fine with Game Center’s default “Yeah, you reached the achievement”-banner, there is no need to load the achievement descriptions.
By the way, talking about “Yeah, you reached the achievement”-banners: Most games just show the default banner, but in Letteral, I disabled it and opted for a custom banner instead. This way, the banner fits the visual style of my app and I can also show further information, like the reward that an achievement grants you.
So that’s achievements, leaderboards and challenges. Next time, we’ll turn to the heart and soul of Game Center: Matchmaking and Online Multiplayer.