Spoiler: I was successful with my first indie game because it got pirated.
But before we get into that, let me introduce myself. Hi! I’m Ed, and I survived making my first indie game by myself! Now that the shock of achieving this miracle has worn off, I’d like to give something back.
I have so much to share that I had to split the article into 3 parts:
- The story of the game’s development and how I made it.
- The key lessons I learned.
- Facts and data about the development process and the tools/plugins used.
Before reading this you will probably want to familiarise yourself with my game so you have some context. Hang Line is an extreme-physics climbing game where you swing up dangerous mountain peaks and rescue stranded survivors from avalanches and angry goats. You can watch the trailer below.
You can also download it here for free:
Download on Apple App Store:
Download on Google Play:
So with that out the way, let’s get started! This first part covers the emotionally turbulent and surprisingly unconventional journey of Hang Line’s development. It’s about how to find guidance through the near impossible challenge of launching your own indie game but also how to ignore advice and follow your own personal journey to success. And also how piracy can sometimes not be a bad thing...
What started it all
The main reason I decided to quit my job and become an indie developer was because I read an article written by a fake robot dinosaur.
“SMART PEOPLE HATE DUMB IDEAS. ONLY THINK OF WAYS IDEA CAN’T WIN.”
The article basically explains how people turn down their own ideas because they think of all the reasons they won’t work. This is a huge reason why some people never start their own business.
“BE TOO STUPID FOR FEAR. TOO STUPID TO STOP. TOO STUPID TO FAIL.”
This really resonated with me. I was basically an expert at finding reasons that something was a dumb idea!
Also I was getting a bit fed up of the AAA console industry. I had worked at about 10 different game companies at this point, and in almost half those roles I had lost my job due to layoffs. Studios were collapsing left, right and centre, projects were getting bigger and bigger and everything was becoming sequels, prequels, remakes, reimaginings etc. This was a big motivation to get out and do my own thing.
A Mountain to Climb
So I had decided to take the plunge, but I was not in an ideal situation. At this point I had:
- No team
- No funding
- No money for contractors
- No art skills
- Limited programming ability
I had spent the last 15 years working as a game design or design lead. The last thing I programmed was some crappy special effects for a football game in my first gamedev job. The memory leaking skid marks left by those football players still haunt me today…
And not only was I lacking in skills and resources, there was also the little matter of the Indiepocalypse.
Too many games being released, impossible discoverability etc… Every single article I read on Gamasutra was telling me I was doomed. It seemed like the worst possible time to ‘go indie’. But then I remembered the important words of that robot dinosaur:
“TOO STUPID FOR FEAR. TOO STUPID TO STOP. TOO STUPID TO FAIL.”
So I went about trying to figure out how this could actually work.
I didn’t know anyone at the time that was dumb enough to take a chance working with me despite how many times I kept going on about wise robot dinosaurs. So I decided my only option was to keep my job for now and learn what I didn’t know in my free time.
I went and downloaded Blender and started an online tutorial. I mean how hard could it be to make 3D art?
Er.. yeah. Turns out it's pretty hard. That’s the first thing I built in Blender. It’s supposed to be a submarine...
But I stuck at it, a few hours every evening, and gradually, bit by bit, I started to improve…
Eventually I felt confident enough that I could make something in 3D, so the next thing I did was to get back into programming and try and build a super simple prototype in Unity. I ended up dedicating my evenings for the next few months to build a car parking game. Yep, it was about as exciting as it sounds.
Turns out that parking cars in a video game is pretty similar to parking them in real life - boring.
Anyway, it did what I needed. I felt confident enough to quit my job and get started.
Deciding on a concept
This was my initial plan:
- Make a game in 3-6 months
- Fail miserably
- Do another one and make it way better
This plan did not go to plan. At all. You see there was one fundamental flaw - I’m a perfectionist. No matter how much I would love to finish a game in 6 months, it just wasn’t going to happen. But I didn’t realise this yet...
The first big decision I made was to target mobile. This was mostly because it just felt more achievable. Every Thursday I would religiously download and play the latest free games on the Apple iOS Store that had got a front page feature. I felt like I had some chance of making something of similar quality.
So I decided to set some goals for the project:
- Keep it small/achievable
- Free to play with ads
- Relatable theme, no fantasy/sci-fi
- Simple one-handed controls (so you can play stood up on the metro)
- Potential to look beautiful (helps with getting a feature)
I then went through a load of ideas that I’d been writing down for months, and I scored them based on a bunch of criteria that were important to me for making a mobile game.
The one that scored highest was a climbing game. I initially had this idea of making an ‘infinite climber’ rock climbing game. I thought climbing controls could be really cool on mobile with the touch screen. I did some competitive research and found out I was actually completely wrong! There were actually quite a few mobile climbing games that were attempting something very similar, and the controls were just utterly awful.
But then I thought - why not just tap on the screen to swing the guy where you want to go … on a grappling hook?
And at that moment, Hang Line was born.
Creating a Prototype
My first thoughts on creating a prototype were:
“Swinging rope physics… that sounds a bit complicated.”
Like I said before, I am not an advanced programmer. If someone has already solved a problem before, I will happily go and seek out that code. So I searched on the Unity asset store just in case, and lo and behold there it was - ‘Easy 2D Grappling Hook’!
Very rapidly I was able to get a basic prototype up and running.
I told you it was basic!
So the first things I needed to get in to tell whether this was fun were:
- Barriers in the environment to navigate
- Hazards to avoid
- Some ‘springyness’ to the grapple
Already this prototype was giving me a lot of useful information. It was already kind of fun to swing around, but it was really hard to be precise with the physics. This meant that swinging into something that instantly killed you was a really BAD idea!
So I started to come up with dangers in the environment that could cause you difficulty but still give you a chance to recover.
Things were coming together, but once I got the build onto mobile and started showing people it was pretty clear that there was a big problem. Even though there weren’t any hazards that would instantly kill the player, people still smashed into things by accident constantly. The problem was because of the portrait aspect ratio, when you were moving left and right, there just wasn’t enough of a view of what was coming up.
I wanted to keep portrait on the phone because it meant you could play the game with one hand. So what I needed to do was make the levels have more upwards traversal. But not just straight up because that was boring, I needed diagonals. But not just diagonals, curvy diagonals :)
At this point I was making the levels out of Unity cubes. So making curves wasn’t particularly easy. But I also realised that I needed to start thinking about art anyway. What was the environment actually going to look like?
I decided to do a few tests by exporting my whitebox Unity cube level and importing it into Blender to try and make it look more pretty.
The results were ok but it was just insanely time consuming to model everything in 3D. How was I supposed to make a game with 50+ levels using this method?
So I went back to the Unity asset store again to find a solution! At the time nothing on there did what I needed, but I did find a useful tool called PolyMesh 2D on github.
This tool allows you to create simple 2D shapes in the editor, and generate simple 2D colliders for them. It can also extrude the meshes outwards.
Through some fiddling around with the mesh code, I managed to re-purposed this tool so I could start creating more organic shaped levels and the game really started to come together.
But it didn’t solve my art problem entirely - it still looked very flat and boring. How was I going to change this into something pretty?
And then I had a slightly crazy idea.... What if I could generate the art …. automatically?!?
Now the reason this was a crazy idea was that my programming skills were still pretty basic at this point. But since I didn’t have a producer telling me to stop, I decided to dive in headfirst…
After many weeks of tearing my hair out I finally came up with a solution that did what I needed. It was basically a frankenstein combination of multiple different chunks of code that I’d found on the depths of the internet that I bashed together to form a process that would convert a simple 2D shape into ....a sexy angular low-poly 3D rock!
I built this into the editor so that I could generate the meshes as I went along editing the level.
This made a huuuuuge difference. It now actually felt like you were climbing something that looked like a mountain! It also meant I could create a level from start to finish in about 3-4 hours.
The other most important technical decision that helped make the game was using behaviour inheritance. This probably seems completely obvious to the programmers out there, but to me it was something quite revolutionary.
What I wanted to achieve as a designer was to have every entity in the game interact with every other entity. To begin with, this meant having every single entity a physical object so they could all collide and bounce around, but it also meant creating interactions between each entity. For instance, what should a goat do if a cat leaps on it?
The answer was to create an object hierarchy and have each entity inherit behaviours from its parent. Looking at the diagram below, if we allow a goat to kick a ‘destructible object’, then all entities inheriting from ‘destructible object’ will be kickable by a goat.
So what should a goat do if a cat leaps on it? Obvious - it should kick the cat!
(research shows that if you want your game to sell more copies, put goats in it).
This inheriting of behaviours allowed for a crazy amount of cool chain reactions and emergent gameplay. It's really the core of what makes the game unique. There’s still things that happen in the game to this day that I’ve never seen before and I’m the programmer!
So you’re probably thinking at this point that things are looking good. I was about 6 months in and I had final environment art, a level editor and all the game mechanics. Must be about time to ship right? Well yes, that’s what I thought too. And boy was I wrong!
Turns out that creating a UI and progression system, putting in Ads/Monetisation, doing a tutorial, creating marketing materials…. all this stuff is insanely time consuming. And not just that, it’s also soul consuming.
During this period I hit a real low. The loneliness of working on a project entirely by myself was really starting to affect me, and I was also very anxious because everything was taking so long. Negative thoughts kept popping into my head - will I finish before I run out of money? Will it be successful? Am I wasting my time?
I covered these emotional struggles in another article I wrote a while back, which you can checkout here if you’re interested.
During this period I asked a lot of very experienced developers for advice. Probably the most common thing I heard was:
“Just get the game out as soon as you can, it’ll probably fail anyway.”
Although this wasn’t exactly what I wanted to hear, it was actually pretty solid advice, and statistically very accurate. But regardless, I chose to completely ignore it. Rushing things just wasn't me.
So I battled on. And on. Slowly slipping deeper into the pit of anxiety.
Until one day I was chatting to a games journalist friend of mine over dinner who was telling me how they’d spent a long time earlier in their career working completely alone. They said it was painful but there was one really big advantage that you gain. He basically said:
“Working your ass off by yourself for ages makes you really flipping good at your job”
When you’re working alone, there’s no meetings, no at the desk discussions, no casual chit-chat, no email conversations - you’re 100% focussed on work all day. You are dedicating 100% all of your time to honing your craft. This gave me a big motivational boost. Mostly because I suddenly had the realisation that even if I fail, at least I’ll be a lot better at making games. And that was what I needed to instill in my brain in order to finish - failure is ok.
Finally I got it to the finish line. But I wasn’t confident enough to go out all guns blazing straight off, so I decided to do a soft launch.
I was helped initially by the fantastic chaps at RoundZero. They work with mobile developers through soft launch to see if they want to create a publishing partnership. They provide you with a bunch of users for free initially via advertising, to see if your game has potential.
So I hit the launch button and waited eagerly to see what happened. After a week, on Unity analytics, the graph I was looking at was something like this:
About 300 users in India, which was the country where we soft launched. Not bad, but not quite enough to get any really useful data. Then one evening I had a look just before bed, and suddenly the graph looked like this:
For some reason there was a giant spike in downloads. Cool. But then I noticed the number of official users in the google dashboard was actually still about 300. What the…?
I then filtered the users by country on Unity Analytics just to make sure they were from India. And what did I find? Most of the users were actually from Russia! But I hadn’t released the game in R