- Microgolf Masters
This one was a while in coming - our current TripleFun game: Microgolf Masters.
About the game
Masters is the sequel to MicroGolf Challenge, itself the sequel of MicroGolf, so it's interesting to see the evolution of the game as time has gone by. As of the time of writing, MicroGolf Challenge has been removed from sale to stop any confusion amongst players.
While Challenge was a good game and enjoyed modest success, there were problems with the inherit conception of the gameplay and monetisation, so after meeting with other CEOs of mobile games companies, Nicolas decided that the best course of action would be to release a new game. That way, we can make any number of breaking changes with the previous one without suffering the wrath of an existing playerbase.
And there were a hell of a lot of changes. Here are just some of the differences:
- More granular upgrade system (In Challenge we underestimated just how quickly players would progress). Balls can now also give boosts
- Progression through courses was replaced by a League system (previously named Rank). Winning matches gained you crowns. Win enough crowns and you pass to the next League. The top League is Masters, where the ranking is ELO based.
- A new season system. Every week, a new season begins. You win rewards based on how you placed in the previous season, and your League would be reset (depending on where you finish, it'd be reset more or less)
- A new solo mode, where players are presented with a new course every day. Get the best score of the day for your League, and you win rewards, as well as a medal for your profile
- 8-player Tournament mode, where players face off in 1v1 matches until there's one winner. Amongst other things, that winner gets a trophy for their profile
- 4-player free-for-alls, or 1v3, where 4 players play on the same course, which is pretty fun
- A Card system. As you play, you'll win or buy Cards, which can be used for all sorts of things, such as getting new balls, upgrading your stats, getting Boosters, etc
- Boosters! In games, you're allowed to bring 2 boosters with you. These are special items, that used at the right time, can turn the tide of the game. Some of the Boosters included are extra Strength/Accuracy, Confusion, Anchor, Invincibility, Assassin, and Unsinkable.
More updates are coming down the line. At the minute, we're finishing up a big performance update, to get the game back up under 60fps and silky-smooth, and after that we're planning on a teams feature, where players can face off against each other in 2v2 matches.
A bit about the development
Challenge was our first Unity game, so by the time we tackled Masters we had a bit more experience and could tell what was working and what wasn't. Although we were working from the same codebase, we profited a bit at the start of development to restructure and refactor anything that wasn't up to scratch.
One thing we set from the start, which I'm glad about, it focused solely on Android development, so we were only on one platform from the get-go. This was a huge timesaver in the long run, as, if you don't know about it, the time to release on different platforms is wildly different.
Though it's better nowadays, iOS would routinely take ~2 weeks to validate a release. As you're working in sprints of about 2 to 3 weeks, this meant that you had to support the version in dev, the version in pre-prod (that was currently being validated), and the version in prod. So anytime there's a bug, there was a 2 to 4 week delay before we could fix it (once you've figured out if it's already been fixed or if it's a regression).
Android, on the other hand, has a release window of a few hours. The difference is day and night. Release in the morning, then monitor, and you still have time to scramble a fix if necessary. As an anecdote, we were cleaning up plugins and requested permissions, and I removed one that inadvertently changed the path to the Application storage directory, which is where we saved the player's save file, including their login details. So I borked every single player that wasn't signed in with Facebook. Needless to say, that's a good feeling. Happily, the files weren't gone, so once I'd found the problem, two releases in the same day later, everyone was back up and running. That would have been impossible on iOS.
Another thing that we did was enlist the help of fellow Unity devs BeTomorrow. They're based just down the road from us, and we had help from Gaël Lequeux and Alix Fumoleau, both of whom brought their Unity expertise to the table and helped us out with the UI and perf.
We're also using the services of Logmatic.io, which is a company specialised in logging and metrics. We had our own solution, but we'd always have to wait a day before the logs were available in our backend. With Logmatic, all logs come in in real-time, and we can do some pretty deep searches. This is a life-saver when it comes to support and bug-hunting. As a result, the majority of support questions can be resolved in around about a minute from the time we open the mail.
Masters was in soft launch on Android for quite a long time before we pushed it on iOS. All in all, there were around 25 versions released on Android while we added, fixed, and polished new features.
When we did release on iOS, it was to a pretty awesome feature. We ended up on the home page of the US iTunes store and ended up in the top 10 overall, and top 5 for sports and strategy. On the french store, we hit #1 and #2 for sports and strategy respectively. Considering the other games on offer and their respective advertising budgets, this was huge!
The effect of this was pretty immediate; we were gaining around 50k players per day. Our server started crying, but the effect in game was pretty impressive. Searching for games was immediate. Even tournaments, which would normally take a bit longer to fill up, were instant.
On our end, aside from the heady rush that comes with topping the charts and having a huge influx of players, we were scrambling about trying to make sure everything kept running. Our poor server guy, Camille, got about 3 hours of sleep until we could nail down a deadlock situation that was happening if players did specific things in the tournament. Once you start getting big, the law of large numbers takes over, and what can happen, will happen.
All in all, we can't really complain. To be featured at all is a massive gain, and can easily make a company. The fact that we were able to build and release so quickly on Android meant that we were coming to iOS with a pretty solid app that had already proven gameplay, so it was well received.
One mistake we did make around this time was to reset the League of all existing players. The rationale was that we'd just made a big change in how the League system worked, and we'd start all players off on the same foot, but it obviously could never been the case. Old players figured themselves unjustly treated (players love getting new things, but absolutely hate losing them, especially if they've felt they've worked for it), and we got slammed in the ratings. New players, on the other hand, were coming in, and right away facing off against seasoned opponents with much higher performance and better balls, so they were getting creamed in games. For them, they didn't know what was going on, so it was just like the game was badly balanced, and I'd say we lost a good number because of it. I think the day after that update when live, I must have answered over 200 emails on the subject :D
With every game, we learn something new, so here are a few of the take-aways that have stood out for me:
- Unless you have a specific reason not to, focus on Android first. While for Masters the ratio is currently something like 6:1 in termes of iOS:Android, focusing on Android first allowed us to nail a lot of the functionality and bugs before releasing mass market. Once iOS is in the measure, expect your effective dev time to double
- Sometimes all you need is a little presentation change. When we first released tournaments, we had maybe 1-2 a day, simply because it was so hard to get 8 players together at once. Players would join, see no-one, then leave. To get into a tournament, it wasn't uncommon to wait for half an hour or just get very lucky. We were discussing all sorts of solutions, each of which non-negligible in terms of development. In the end however, we went with a simple "Starts in..." countdown that would automatically show over the tournament button on the client for 5 mins every half an hour. No server integration or fancy logic, just a simple label. Result: the next day, we had over 400 tournaments played
- Don't use Scenes: I can't count the number of problems we've had because we've used Scenes in our game. If you're just doing a hard switch, then maybe you can get away with it, but the minute you start trying to do transitions, you're opening yourself up to a world of hurt (all special classes (e.g. Android Native) need to be marked
DontDestroyOnLoad, you'll have to create your own destroy-all-old-GameObjects logic, only to discover some wonderful consequences (UnityIAPs, I'm looking at you), in an old version of Unity, destroying a Scene cleared out all statics declared while that scene was active, etc)
- In the quest for performance, you'll find yourself going against the Unity grain as often as not. When you first start in Unity, everything is components-this, and components-that. After a while, you see that you've about 10k active objects in your scene and they could all be replaced with simple non-component code. You'll also find that the default shader for 2D sprites is suuuuuuuuper slow. Write your own. I wrote a whole post of different performance tips for Unity.
- Getting featured by Apple is a big deal. Overnight we added maybe 700k players. This was just after our server guy went on holidays and you suddenly find your server falling over under the load, or threading/race conditions/deadlocks now happen with frightening regularity. Sorry for ruining your holiday, Camille :D
- Invest in your support tools. As previously mentioned, Logmatic.io soon proved themselves pretty useful in helping find and solve problems, but the other end of the stick is being able to do something about it. With each release, we've beefed up the support tools. Everything happens through restlets for ease of use. Some of the things you should be able to do:
- Search for players by key, ID, nickname, transaction ID. Generally, anything unique. If you're not returning the full Player object, then you should at least have all the important info
- Gift them hard and soft currency, in-game items, you name it. If they can get it in the game, you need to be able to gift it
- Change their XP, level, or League. This is also useful when testing, and you have gated content
- Change their stats, win-loss ratio, medals, trophies. Again, also useful for testing leaderboard/profile display
- Have a way to transfer/recover accounts, as people will lose access to theirs, and they'll sooner quit that start all over again
- Push new content, and reload it into memory without having to restart the server. We can do this with pretty much any of the data objects in the game, so adding/changing/fixing content is relatively easy
- Assign A/B groups if you have A/B testing
- Turn on and off features of the game, such as debug logs, A/B testing, access to non-essential features such as leaderboards etc
- Know why your players are spending and what they buying. Without a doubt, I think the most important feature of the game is the ranking leaderboards. The people that will get the most addicted to your game will be the ones at the top, and they'll generally make repeated purchases to keep their advantage
- Analytics and metrics are super important. While there are a lot of debates over gut- vs data- driven game design, you can't deny the usefulness of seeing the immediate results of your choices. At the very least your data should be set up at a cohort level, so you can effectively measure if you've improved in the right areas.
- Be careful touching monetisation. Early on in development we modified the economy of the game to make things cheaper. Woah boy, was that a mistake. Aside from tanking our revenue to about a third of what it was, we'd never gotten so many emails. People were complaining that things were cheaper. Once you think about it, it makes sense: those that have purchased, especially just before the update went live, immediately had their purchase devalued. After the update, the same purchase would net you about twice the amount of in-game items. This was especially bad with players that had made repeat purchases, as they felt that everything they'd spent was now worthless, even though they were technically our most valued customers. Interestingly enough, a small percentage of players were also angry because it now let other players reach their level easier. When the economy is tight and IAPs are relatively expensive, purchasing something gives you a distinct advantage (better equipment etc), so some players were enjoying topping the charts simply because their purchases put them out of reach of most players. It's something to think about.
Play Microgolf Masters
Microgolf Masters is available on both iOS and Android, so go give it a shot. Once you're in on it, it's very competitive. We've got the whole floor where we work playing it after lunch and 4-player mode is genuinely fun when you're all together.
You can also check out some images of the project.