← Back to projects

Uptown Bingo

A mobile game using a client-server model made from scratch using Unity with a small team with 500K+ downloads.

C# Java Unity MVP Analytics Mobile xCode Networking Addressables MySQL Redis Jenkins CI/CD AWS
Uptown Bingo

Building a fun and responsive mobile game

This was mainly a Unity project, with a framework library that was used by other games also developed by GamePoint. The game was connected to a dedicated server using websockets. The server was written in Java used a shared database for all GamePoint games.

The game is divided into a core game and a meta game. The core game is playing Bingo in a fun and engaging way. The meta game consists of unlocking furniture and decorating the house using the rewards from playing Bingo. The meta game has many features: friends, NPC's (story and maintaining friendship), daily rewards, seasonal events and much more.

I was a Unity Developer on this project by title but expanded into writing framework code, server code, database scripts and simulations. I was the only person to be active on so many layers within GamePoint (at the time). I had the pleasure of working with a great small team of around 5 people to quickly prototype, iterate and release. I worked here for 3 years.

What I built

A look at some of the systems and features I worked on while working on this project.

Features
01

Features

Due to the small team size, I made the majority of features from the programmer side. This often involved working together closely with design, art and framework to bring a feature alive.

I worked on a wide range of features: core gameplay (Bingo), the furniture catalog, NPC friendship, in-game shop, FTUE (tutorial), dialogs, furniture placement, daily rewards and many more.

Each new feature involved working with people from Ukraine as they mainly managed the server and framework side, aligning on how a feature should work and making sure our code connects.

Particles
02

Performant "Juice"

"Juice" is the visual layer build on top of a game to make it feel satisfying and smooth. Think about money explosions, flying particles, small bounces on taps and fluent but subtle animations. As a mobile game, it is extremely important that this is done well, and performant. You don't want the game to feel stuttery, hampering your experience.

I used custom optimized solutions with quite a lot of vector math involved to make balls rolls smooth from the ejector, make buttons have nice animations and to make a fully custom particle system to create explosions of resources moving towards a point with barely any performance impact.

Simulations and Algorithms
03

Simulations and Algorithms

The designer on this project was very involved and loved data. I was happy to help him out by making simulations of 1000's of multithreaded games played within seconds to generate data for him to tweak the balancing.

My goal was to deliver as many sliders as I could to the designer so that they would be able to tweak it as much as they want. This also involved writing tweakable algorithms for game flow, easily configurable power ups, resource distribution and much more.

I also figured out a super efficient algorithm to find patterns on a bingo card. Since a card only has 25 cells, it means we could move all daubed cells into 4 bytes and use bit-wise operators to quickly find any matching pattern.

Events
04

Addressables and Events

As this is a live mobile game that often got seasonal events, we had to build innovative solutions to allow easily adding and removing assets from the game. As a mobile game needs to often be below 100MB, and the game had way more than 1000+ unique furniture pieces, it was an interesting challenge getting it all to work.

We decided to go with remote Addressables in a properly structure fashion to allow the game itself to be very small and to download and remaining assets on start-up. This also allowed us to do updates like seasonal events without needing a new release that has to be screened by Google or Apple. Using AWS we delivered live addressable updates revamping the entire map while the player only had to download very little data.

Problems I had to solve

Mobile Game Dev

Making mobile games means constant optimization is needed, especially a few years back when phones weren't as powerful. Assets need to be small and compressed. Loading needs to be fast as a mobile player loses attention quickly and any stutters will make people quickly quit. Not to forget the wide range of old devices that we wanted to support.

Framework

Since GamePoint had many different games with similar features, they decided to make a Unity framework library where features are build in a generic setup to allow games to re-use the same systems. This sounded great on paper but in practise every game wanted the feature to behave slightly differently. Writing framework code was definitely challenging trying to avoid other games from breaking.

Backwards Compatibility

We didn't enforce any player to use the newest version of the game any time we updated. On mobile, that's quite normal since it would force people to spend many MB's on their monthly data to play your game. This creates an interesting challenge to make all features backwards compatible with versioned network messages, different addressable builds and compatbile database/server changes.

Interested in the game?

You can find the live game to try for yourself here.

To Uptown Bingo