Library Development and How to Make More as an Indie Developer

As a follow up to the post I made yesterday about starting projects and not finishing them, I’d like to talk today about the financial benefits to this approach to game development, from an indie perspective.

In today’s industry, you essentially have two options to “make it big”:

  1. Develop an absurdly addictive, amazing, original game that will sell millions upon millions of copies and garner commercial success
  2. Develop good, solid libraries from which you can build a couple dozen games that will sell decently

Now the chances of coming up with option 1 are slim to none. Especially for a one man development team, like myself.

On the other hand, by developing solid libraries and a good testing framework, one can easily release a good game and follow it up with sequels and other games in the same genre. Combining the sales of a handful of games will, in the long run, be more profitable than the one-hit wonder. When that first game’s sales die down and people start losing interest, what will you do? Will you have a variety of new games coming out constantly, or simply hope and pray that the one game brings in enough wealth for you to retire?

Personally, I’m a firm believer in the “don’t put all your eggs in one basket” theory, but let’s break it down even further so you can see exactly how this can benefit you. I’m building on Steve Pavlina’s articles from back in the day when he ran his game publishing/development company (I don’t think he has the articles anymore) so bear with me.

It takes approximately 6 months to a year to build a simple game and publish it yourself on your website. Depending on how good your advertising and marketing skills are, it could take easily 6 months to build up enough sales to be able to sustain a healthy quality of living from the game sales alone. That would mean for 6 months you would have very little money (unless you had a day job, which makes the game development process take even longer) and you would have no real idea of whether or not your game is going to bring in any sales at all!

On the other hand, reusing libraries and keeping a strong, up-to-date testing framework, will allow you to easily throw together game after game, taking only a few weeks to a few months for content development and you can release a new game or an add-on or sequel to an existing game you’ve created. Steve mentioned that he was able to release a game and a month or so down the road he could spend two weeks developing new content for his existing game and releasing it as an add-on, charging almost as much as the game itself.

By reusing your libraries, you not only save development time, but you give yourself some financial overlap between games. When one game’s sales are starting to sputter down to nothing, you’ve already got another game building up sales and market-recognition.

So before you quit your day job to become an indie game developer, please put some time into your library development.

Tired of Starting 13 New Projects Every Month and Finishing None of Them?

Me too. I used to think that it was just me having a particularly bad case of ADD or OCD (I usually start thinking my code could be written much better if I just started over, then I start thinking the design could be better, and next thing you know I’m transitioning from a 2D engine to a 3D engine), but it’s not that. A big part of it, in my humble opinion, is simply a lack of a strong testing platform. Allow me to elaborate.

When you first start thinking up a project, you might be envisioning it in your mind and it looks great, feels great, plays great, and nets you millions of dollars in the end. This is a good thing. It’s very important that you can visualize the final project in explicit detail or it’s going to be harder to transfer the idea into a solid game. However, after you start the project, reality starts to set in and you realize you don’t have the programming knowledge to complete your project, or the artistic resources, or the time, or the interest. Whatever the case, you stop the project and move onto something else. I would like to propose a solution.

Stronger test applications and frameworks. Test applications and frameworks can at least diminish the time-investment needed to determine the playability of the game. Imagine that you have a framework that initializes your renderer, creates your blank window, and allows you to tweak settings, such as the perspective. Now imagine in addition to the above, your framework can load images, compute vectors, and perhaps you even have a fairly flexible editor available for creating environments. Yes, what I’m describing is essentially an existing engine. However, in my experience, existing engines tend to have far too much clutter to be reasonable for a small test application. It would be much easier to dive into your own code and tweak a few settings and be able to fire up a test version of your game, something to see if the idea is going to be fun or not.

In addition to solving the gameplay problem (often what seems like a good idea in one’s head is actually quite bad in an actual game-play), it saves you from losing interest too early in the project because you’ll have visual results immediately. But even still, it gets better. With each new project you create using your framework, you’re solidifying the code. Every time you start a new project you’re essentially running more tests on your framework and building a stronger and stronger foundation. This saves you even more time down the road.

I had always heard that it wasn’t wise to start trying to create a game until you had a handful of libraries at your disposal but until now I never realized how important such libraries were. I always assumed it would only take about 20 minutes to throw together a little Windows application that was OpenGL enabled and I’d be good to start writing game code. While this is certainly true, I wasn’t thinking about image loading, memory management, resource management, object creation, world creation, and so on. These various tasks take up a growing amount of time until next thing you know, you’re 6 months into development and have little more than a rotating cube to show for it. You may have lots of math libraries and Windows control libraries running in the background, but those are not exactly motivating to me. If I was to show a math library to my room mate, chances are he’d walk away, totally unimpressed. If, on the other hand, I was to show him a complete 3D environment with shading, lighting, clouds, terrain, and objects, along with some interesting game-play, chances are good he’d start getting hyped up and asking if he can give it a go.

Many people have great luck with existing engines but it’s not for me. I’ve always been the type of person who has to know what’s going on behind the scenes (actually, that’s the reason I jumped into game development in the first place). My problem with existing engines is that I don’t know what’s going on. I can spend countless hours reading beginner’s tutorials, line after line after line of source code, and other types of documentation, or, I can take up about the same amount of time and write my own engine from scratch. It may not be as robust as the existing engine, but I’ll have no question as to what’s going on behind the scenes.

In order to help you build your own testing framework, I’ve decided to give you a brief list of some of the qualities that you will need to greatly reduce the amount of time it takes to build up a working demo of your game idea.

  1. Window Management System
  2. Graphics API Management (Ideally this would be cross-platform)
  3. Resource Management System (images, models, sounds, etc.)
  4. Scene Management System
  5. Math Systems (Vectors, Matrices, etc.)

These are just a few things to get you started with. Basically, anything generic that you might need in a game engine, and build that into this test framework. The key is modularity. If any particular system is going to restrain your game development, don’t allow it into your test framework. You want total creative freedom from this framework and the more restrictions you place on yourself, the harder it’s going to be to come up with that unique new idea.

It… Is… Alive!

As HopeDagger has pointed out in my last post, it’s been a painfully long time since I’ve updated. I let real work and game development take over my blogging life and I’ve left you all in the dark and for that I am sorry.

So in an effort to prove my rekindled love for blogging, I’m going to go ahead and give you all an update on what’s been going on.

In game development news, I’ve been furiously working on an outdoors engine. I learned quadtrees for the first time (which took a lot longer than I thought it would) and am now working hard on a generation method that I’m comfortable with. LOD algorithms have me ready to gouge out my eyes and I have since taken a break from LOD programming and focused more on the terrain optimizations I can handle like tweaking generation methods, adding better smoothing filters, and trying to combine various other algorithms to make the generator more robust.

Basic quadtree implementation, no polygons rendering in it

The idea is a Tribes-like game with very little (if any) indoor scenes to make things easier on my engine and allow more time on actual development. I’d like to make the focus on team-based deathmatch because I love team deathmath and haven’t seen too many great free online team deathmatch games.

I’m going to try and keep blogging at least once per morning with an update on the game’s progress, but if it comes down to working on the game or posting, I’ll definitely be choosing game development.

As far as this page, I think my domain name is about to expire, but I’ll probably just get a new one with a little more possibility than simply one named after myself. First things first however, this bad boy needs a redesign. I was looking my available templates and I’m not really pleased with any of them. So I should have something a little prettier up here in about a week.

By the way, something I found mildly entertaining that my WordPress using friends should get a laugh out of: I love it when a spammer posts a comment starting with “Sorry :-(” then proceeds to toss in about 100 links to viagra and porn. It’s like the spammer has a conscious :-P.

« Previous Entries Next Entries »