Life as an indie developer from India
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.
Pre-school to High School
In India, a child goes to school for twelve years in total. We start young - for example, my pre-school competition coaching classes started at age three. Competitive exams are there at every stage in India - generally because there are usually at least 10 times the applicants as empty seats, be it pre-school or a master's degree. Sometimes, it feels as if education exists only to get you through the next big standardized competitive exam instead of making you learn something :)
I began year one of my schooling at the ripe old age of five. Programming classes only started in our sixth year, as an “optional” subject. Optional subjects are taught for one thirty minute session out of forty-eight hours of schooling per week (think Saturday is a holiday? Tough luck, kid), and don’t count towards your actual grades. Coding isn’t taken seriously - the optional programming classes taught either HTML or QBasic (yes, QBasic).
Luckily for me, in my eleventh year in school, I had the chance to take up C++ programming as an elective subject. At this point, I didn’t know any programming – all I knew was that some of my friends and teachers said I was “good at computers," whatever that meant. 15-year-old me had to choose between C++ (famed for being a tough subject, hard to score grades in) or “easier” subjects: Economics or Psychology. As for why these subjects are easier, don't ask me.
I loved my C++ classes as they managed to be everything my education had lacked so far. Instead of memorization and grammar, we had open-ended lectures about programming concepts. My teacher actually encouraged students to solve problems in different ways! I even made a Dope Wars clone for DOS using Turbo C++ as my class twelfth project. I believe this is the area in which I was luckier than other kids, and I am still grateful to my C++ teacher for that.
However, when you're in your final two years of school, the spectre of university entrance exams looms larger than anything else. Let me give you a picture:
- One million kids competing for five thousand college seats
- An advertising and coaching industry built around exploiting teenage insecurity and societal pressures for money (sign me up!)
- The narrative fed to you is "get into a good college and enjoy a cushy job for the rest of your life! Fail to get into college and you'll be a miserable failure for the rest of your life!".
Let me tell you that nothing stamps out creativity or risk-taking from a 16 year old better than what every kid undergoes during the age of 14-17.
Anyway, I failed to pass in the biggest of the big competitive exams, but managed to pass one of the other smaller ones and ended up in the CS degree course at my college. This is where Indian education is probably very similar to other countries - an year is divided into two semesters, your first year is a general year and so on.
After the first “general” year, I was ready to learn some programming - and boy, was I mistaken.
Our programming classes used Turbo C++ 3.0 - not the most up-to-date compiler, I'm sure we can agree. It can’t even run natively in any Windows version newer than XP. This was a bone of contention amongst a lot of my classmates as well, because it meant our education was obsolete before we even learned it.
Suffice to say - my education didn’t fill me with confidence in my ability to compete in the job market. I started learning how to make a “modern” application using Visual C++ in my spare time, so that I could program something that my laptop could actually run without emulating DOS. Combined with my interest in video games, I ended up at Lazyfoo’s SDL tutorials which helped me a lot in setting up a basic framework for a hypothetical future game.
To give you an idea of how much this type of extra-curricular activity is discouraged, I was actively told to stop using VC++ in my lab assignments. I was even docked grades for this in a couple of lab sessions for this. At the risk of sounding hyperbolic, it is as if the entire system is built to discourage creative thought and mass-produce some kind of ideal robotic factory worker.
How I ended up making my own engine
In 2008, when I was making my first game - there weren’t any pre-existing engines at the same level of popularity as Unity or Unreal today. I was familiar with Valve’s Source engine, having been part of the HL2 modding scene (I worked on Dystopia!). However, access to the source for Source was restricted, and it was prohibitively expensive to license. These factors made writing my own engine the only realistic choice at the time.
After soaking up a lot of tutorials and advice (many on Gamasutra), Teenage-me realized that trying to write a general purpose engine was a waste of effort. Teenage-me was also the kind of person that makes a game about how much college sucks and my god aren’t adults annoying?! Ahem.
This is how I started work on my first game, A.Typical RPG, a game that was Scott Pilgrim style view of my college experience. The game was pretty much my tutorial codebase gradually morphing into a game. By sheer luck, I managed to find a very talented artist to work with me due to both of us having been a part of the HL2 modding community.
How I benefited from programming a game from scratch:
- I got to teach myself basic concepts like state machines, game loops, input handling.
- I learned how to manage a team, and how to set goals and deadlines for a project.
- I was learning general C++ concepts like templates, vectors, certain algorithms which I feel made me a better programmer overall.
- Due to the game being a mini-game driven RPG, I had to program lots of systems - event handlers, conversation mechanics, asset loading/unloading to optimize performance, saving/loading game state and so on.
- I was making something I wanted to play while doing all of the above.
Pretty much every point in that list can be taken as a negative point, considering the fact that learning basic programming concepts while working on something you intend to sell is probably not a great idea. Maybe I would have ended up making all of my 3 games with Unity if I had been born a couple of years later.
There isn't really an "ending" here - I'm still making games, and I was incredibly lucky to meet the right people at the right time. In future posts, I'll discuss how I met my team, and how I program my games in more detail.
P.S. If you want to know more about my work, please visit my website. Thanks for reading!