-
-
A chaotic little tabletop battle, built for iPhone.
-
Just you, your tank and its flashlight.
-
50+ levels. All handcrafted, one block at a time.
-
Learn by doing, with a few notes along the way.
-
Who said paywalls had to be boring?
-
The game has its own original soundtrack too.
-
A little welcome gift for every new player. Scratch to reveal!
-
9 custom icons, one for every tank in the game.
-
Tiny Tanks Bento Box
-
Brought a few of the tanks into the real world!
-
Captured directly from the iPhone app
-
Captured directly from the iPhone app
-
Captured directly from the iPhone app
-
Captured directly from the iPhone app
-
App Icon
Inspiration
Ever since I got into coding a few years ago, my slightly unrealistic dream was to make games. I grew up playing so many of them and always felt like I had a good eye for what made them special. But making a game seemed like a pretty complicated place to start, so I stuck to making regular apps instead. I still tried to sneak as much playfulness and personality as I could into them.
Fast forward to this summer, when I saw that this year's Shipaton had a new "Best Game" category. That was pretty much all the convincing I needed to finally give it a shot, and I immediately knew what I wanted to make.
I wanted something that took me back to my earlier gaming days on the Wii. I've always had a soft spot for those simple, beautifully crafted games that didn't need endless content or complicated systems to keep you playing. They just had a great idea, executed really, really well.
One of my favorites was this little tank game included in Wii Play. I spent an unreasonable amount of time playing it growing up (like, really unreasonable). I loved it, and I wanted something like it on my phone. So why not make it myself?
All those game ideas, mechanics, interactions and design details I'd been thinking about for so long weren't hypothetical anymore. I finally had somewhere to put them.
For my first game, I decided I might as well leave no stone unturned.
What it does
It's a simple concept. You play as a tank in a little toy battlefield full of enemy tanks with one objective: to make sure you don't make it to the next level. Your goal is to make it through all 50 levels, with increasingly dangerous tanks lurking around as you go.
As you play, you'll notice the battlefield slowly getting covered in tracks, explosions and markings from other tanks' demise. Even the structure of the level can change, since some obstacles are destructible and let you completely reshape how you approach a fight.
Your tank can move, shoot and lay mines. Shooting is deliberately limited to stop you from just spamming your way through a level. You're supposed to have a strategy and make each shot count. Bullets ricochet off surfaces, which opens up a whole world of ways to get creative with your shots (and occasionally kill yourself with one). Mines can be used offensively, defensively or to blow open parts of the level itself.
There are 9 enemy tanks and each one has its own personality and fights completely differently. My personal favorite is the teal tank. It's pretty shy and likes to keep its distance, but fires whistling rockets that can ricochet twice. Cute.
You get 3 lives to make it through all 50 levels. Once those are gone, it's back to square one.
And if that isn't enough, there's a hardcore survival mode where you're thrown into a pitch-black battlefield with a flickering flashlight strapped to the top of your tank. You have to survive increasingly difficult waves of "zombie" tanks (yes, it's meant to be fun). Game Center keeps track of your best survival time, so whoever lasts the longest gets bragging rights.
How I built it
Tiny Tanks is a native iOS game written entirely in Swift. The battlefield itself is built with SceneKit, including the tanks, board, bullets, blocks, lights, camera, particles and all the little toy materials. SpriteKit sits on top for the HUD and controls, UIKit hosts the main game view, and SwiftUI handles things like the shop, individual paywalls and the welcome gift scratch card.
Since this was my first time making a game, a lot of this was figured out as I went. My process was basically: build something, play with it, realize it feels wrong, change it, play it again. Repeat a few hundred times.
The enemy tanks all work from the same set of behaviours. They can move around the level, look for you, decide when to attack, find another route if they're blocked and even figure out where to aim if you're moving. From there, each tank gets its own rules. Some chase you, some keep their distance, some lay mines and some dodge your shots. The green one can even look for a wall to ricochet a shot off (watch out for that guy).
All 50 levels are handcrafted, and probably where I spent the most time iterating. I wanted each level to have a reason to be there, whether that was to teach a tactic, introduce a new tank or just make something chaotic. Each one is built with an idea in mind, hopefully creating a natural build-up towards tougher tanks and more complex layouts.
I got equally (or more) carried away with sound. Cannon pops, ricochets, empty clicks, mines, rocket whistles, tank treads, UI ticks, ripping paper, scratching cards... Almost everything has a sound, usually with several variations. I went especially hard on this after hearing Andy Allen (from !Boring apps) talk on about how important, and often overlooked, sound design is. He was right.
Challenges
The first thing that caught me off guard was actually not related to the code. It was the amount of freedom you have when making a game. With regular iOS apps, we're used to how things should work and feel. There's a certain consensus around a lot of the UI/UX, and even in the most custom of apps we end up falling back on familiar patterns like sheets, navigation, lists...
With a game, it felt like there could be a thousand ways of making any one thing. Especially with such a specific and tactile art direction. The HUD, menus, controls, banners, paywalls... All of them had endless possibilities, while still needing to feel like they belonged to the same family. Keeping that same style and art direction across both the actual game and the UI/UX was probably one of the toughest challenges.
On the more technical side, enemy tanks were really difficult to get right. There's such a fine line between an enemy being challenging enough to keep things interesting and being so difficult that the game stops being fun. It took a ton of iterations to get each tank type feeling right, and to be honest, it's one of those things I could probably tweak forever and never be completely happy with. But seeing each enemy slowly develop its own little "personality" made all that tweaking worth it.
Accomplishments that I'm proud of
More than the technical side of the game, what I'm most proud of is the attention to detail I've put into it. I really went hard on making sure every interaction, component, animation and mechanic felt as polished as I could make it. I spent an unreasonable amount of time on details that (hopefully) elevate the whole experience.
Almost every interaction responds with its own haptic feedback and there are tons of variations of sounds so things don't feel repetitive or lifeless. My favorite example is the welcome gift scratch card, which you can actually scratch with your finger and then rip open to claim your gift. With the animation, haptics and all the scratching and ripping sounds together, it genuinely feels like the real deal!
I'm also really proud of the soundtrack. All of the music was made without generative AI, which meant it could be made specifically around the two very different sides of Tiny Tanks. The normal mode is playful with an almost military parade feel, while Lights Out is much darker and eerier, even using church bells to signal the next wave. I liked the music so much that I ended up making a whole section where you can listen to every track on its own little CD player.
What I learned
Making this game has really changed how I look at building software. In a game, so much of the experience comes from all the little moments you find along the way, whether that's sounds, animations, haptics or things we'd often overlook in a regular app. I've always been obsessed with details, but making this game has taken that to another level.
The biggest takeaway from this experience has been realizing just how much I enjoy making games. There's a creative freedom to it that makes almost anything feel possible, with the best reward of all being that once it's all said and done, I actually get to play and enjoy the thing I made.
What's next
The no-brainer next step is multiplayer. I'd love to make a versus mode where you and your friends battle it out to be the last tank standing, and a co-op mode where you can play through the normal campaign with a buddy. Having two players would completely change the dynamics of the levels and open up a whole new set of mechanics built around working together. I plan on building this around Game Center friends, which are already part of the game through the Lights Out leaderboard.
Another thing I would love to add is different scenes for the normal game mode, kitchens, garages, garden, bathroom, so it feels like were taking the battlefield all throughout the house, with all the obstacles adapting to the new environment. That would also include perks and objects that actively affect the way you play a certain level.
Finally I would love to design more levels, more enemy tank types and add some fun cosmetics like some cute hats for our own tank. Who wouldn't love a tank wearing a cowboy hat?
Built With
- coremotion
- gamekit
- metal
- revenuecat
- scenekit
- sprite-kit
- supabase
- swift
- swiftui
- uikit


Log in or sign up for Devpost to join the conversation.