Tic Tactics was a competitive online game that allowed you to play a more strategic take on the classic game Tic-Tac-Toe with friends or random opponents. The gameplay was asynchronous and turn-based, so you could have multiple games going at once against multiple opponents.
Everyone knows how to play tic-tac-toe, but Tic Tactics adds a twist: there are nine boards, each of which contains the “normal” tic-tac-toe experience. It’s “tic-tac-toe-ception”.
For example, if the center board is active, and you play a move on the upper-right tile of the center board, your opponent’s next move must then be in the upper-right board. As a result, your moves dictate where your opponent will make their moves. You need to win three boards in a row horizontally, vertically, or diagonally to win a match.
There was also a player level system, where you gained XP when making moves and winning matches. As you leveled up, you’d gain new titles (Beginner, Tactician, Conquerer, Master, etc). Additionally, the game made use of an ELO-based rating system that was used to match up opponents of equal skill.
Tic Tactics was developed in mid-2013 and released in 2014. It was available for several years on the Apple App Store and Google Play, but it’s no longer available.
Tic Tactics was developed in 2013, and it was Hidden Variable’s first foray into the world of networked multiplayer and free-to-play games. We developed our backend server logic in C# using a service called Player.IO, which was later rebranded as Yahoo GamesNet.
I learned a lot about backend server development, deployment, and monitoring. Using a platform like Player.IO instead of hosting our own servers gave us some huge advantages (such as not having to worry about keeping our servers up, or dealing with hardware scaling).
It also presented some challenges - when Player.IO didn’t support features that we needed, we had to get creative. One example was Player.IO not supporting API calls with JSON bodies - only web form content was supported! As a result, we had to run a server whose only job was to convert web form data to JSON and redirect the content to some other server.
On the client side, we used Unity, along with many of the libraries and features we had used on Bag It!. We used Playmaker to script our tutorials and NGUI to do our UI (this was before Unity had their own UI system).
My primary contributions on the client were a game state framework with animated transitions (which made moving between screens feel quite snazzy), and a scroll list system that can display hundreds or thousands of friends with ease, due to clever recycling of elements as they entered and left screen, pagination of remote data, and delayed loading of picture data from Facebook.
On the server, I was primarily responsible for implementing purchase validation for Apple and Google in-app purchases, as well as a system for managing logins from a variety of sources (Facebook, Google, Game Center).