Remember my old thread about Engines and hobbyist game programmers? In some ways, I'm still stuck in the same trap. I know I've been busy on an ASP project for months and my current C++ tinkerings are with scripting environments and garbage collection but what's happening with my game projects?
So, why the rewriting? If you recall Manta-X is in it's 4th or 5th rewrite. Why's it been rewritten so much you may ask! The main reason is that I've coded the game 'engine' myself. The first 3 versions were me playing Carmack and trying to come up with some all-purpose engine that I could adapt to make my simple space shooter. I armed myself with a C++ compiler and a printout of the Enginuity series and thought I knew it all. I'd read this, that and the other and thought I knew my way around C++ well enough to make my engine. "Once that was done", I'd decided, "I'll make my game!". Hah, well let's just say it never got done.
Making an engine is not making a game. Unless you know your stuff, you will always get back to a point where you realise that you can't code your desired game feature because of some flaw in your engine. You go back and patch the engine to cope with your new feature and go from there. But your patch takes a long time to add in and doesn't really get implemented as well as you'd hoped because it's a rejig of some core feature and you were in a hurry. So the flimsy implementation of your patch then
causes bugs to appear later down the line which you go back and tie together with some more code. Before you know it you've done this 7 or 8 times and have spaghettified your engine code with your game code running in some unstable fashion on top.
So you've got your engine 'working' and go to work on your game code some more. You get to the stage that you'll need some cool levels and content for your game and realise that your custom engine dataformats that you thought were cool six months ago don't quite cut it anymore. You started out with some abstract idea when you implemented them and didn't have any real-world grounding in there. So you go back and recode them to something more practical - but it's sad to see that cool code go to waste. Then wait, you've got to create the tools to make your levels - you can't really pick up anything that's out there already because the formats are different. Plus you think that you've coded the engine, you can code the tools too...
A few weeks later you realise that making tools is shitty work and you've just spent a few months on some rudimentary toolset that works, but not quite the way you wanted it to. So when you wind up with a bit of content you realise that the failure to plan your game has resulted in some rewrites of the game engine logic to make it work as it should. You had plenty of cool models flying around with multiple textures and nice lighting, but when it comes to setting up real level structures and controlling the updates of the game objects you're in trouble. So you go back and start rewriting that section of the game code; but the changes you make are fairly big and the code doesn't compile any more. What's worse, the spaghettified code you thought would be ok requires these changes to be replciated system wide - except now you've got a few dozen files and a few hundred thousand lines of code to work with.
The game dies shortly after that when you realise you'd be better off starting again, this time with a 'plan'.
Sound familiar? It's probably you; I know it's been me many times in the past.
So what do you do? Let's face it this is not 1985 anymore; it's hard work for people to throw out a decent game in a year, let alone a few months how it was back then. Many of us insist of working alone, so if you do - we should do all we can to take the burden off ourselves. If you have a team of ten with design document and a few years of coding time go make your new engine and impress the world... If you're on your own in your bedroom, stay the hell away from making Engines if you intend to make a real game out of it. Trust me on this, you are either doing one or the other; very few of us can claim to have done both (and if you have, I both envy and respect you).
Middleware is a term that's fairly ambigous but I think we should be getting used to it. What we're all guilty of is going back and reinventing the same wheel over and over and over and over. It's like me not believing in gravity so going out and poving it every time I experience it's effects. We're supposed to be advancing this science, advancing the game creation field, not bloody stagnating it with half-assed engines and square wheels. We should be taking some basecode and adding to it, not throwing it out and remaking it from scratch. Countless others have slaved away at the same problems, why should the rest of us be so stupid, effectively sticking our fingers up at their work and making it ourselves.
So back to me. I've realised where I want to go, I want to make games like I used to do back on the Amiga. I'm taking my own advice. Screw making my nice generic scenegraph message passing hybrid. I'm going to pick up some technology and work with it. I'm used to using third party libraries such as SDL and scripting languages, but that's simply not enough. I want to make a game, I want to do it in C++ so I'm going to use a third party Engine. I've been looking around and Irrlicht has the stuff I'll need, perhaps not the way I'd do it but sod it - I'm going to throw something at it see what I get out. I'm afraid I'm going to have to bend my arrogant 'do it myself' bones and accept that the world of development can't always be the way I want it. I'm going to have to put up with someone else's basecode and build from there; even if I have to fight the interface I'll stick to it. So my project might fail - big deal, I bet that I get a damn sight further than I have before.
Coming to this conclusion has been a long path. I've stepped down gradually; in the past I tried it all myself, then I stepped down and let SDL do some of the work - well now I'm going to trust Irrlicht to do more of the work. A catalyst for this change is down to my recent promotion at work. I am now a developer on a fairly large, important database project that's critical to the company. They have an existing basecode that is in constant development; it's impossible for me to impose any of my will on this code. Sure, I can make changes here and there to the functionality, but the actual core is not going to change, even if I disagree with how it's done. I'm sorry people, but that's the way it is these days. I think the same should also apply to game projects. If you're an indie working on your own it's very easy to do what you want, when you want with no discipline to stop you. I really do feel that we're in for a hard think, we're facing the wrong way - let's make games and not engines! We can realise game ideas that large publishers have no hope in creating; why the hell do we end up losing those dreams in the middle of a failed engine project?
I feel very strongly about this now, as you may be able to tell. In some ways, I feel as if the current teaching resources are to blame. All the books and articles flying around about game development teaches you how to start from the ground up - where are the books and articles on taking an existing game engine and building a real-world game on it? I don't mean a tech demo, I mean a real-life, functioning game that you can pass to your friends to play with.
If you've written a game on Irrlict, Crystalspace, OGRE, Quake2, or [whatever] engine, I urge you to sit down and start thinking about how you can impart this knowledge onto other people. I'd love to see a 10 part series that focuses on picking up an engine and making a real game from it. Where are they? You don't see anything like that anywhere. If you can do it, write an article or two! If you do, I can hold my hand up and say that your name will be remembered by others. You will be the people that picked up the torch and carried it to the next runner. Let's inspire the next generation, let's stop them from making the same mistakes we've made for years...
I do acknowledge that some people should be making engines for us all to use, it's part of the deal. But people asking where to start, why do we point them at a C++ compiler and a direct X SDK? Why not at some Irrlicht tutorials? It'd be neat to point a beginner to an all-in-one 'make a game' tutorial that uses a common third party engine. It's something that's hard to do right now. Don't believe me? Read here and tell me it wouldn't help the guy. If you still don't believe me, listen to John Hattan and Washu. I'm not the only one thinking along similar lines (although I'm probably hitting the bone without as much tact).
I've noticed that most of our forum topic activity is cyclic in nature; we have people asking where to start all the time, people asking what to do next and then people just vanishing with little or nothing to show from their efforts. It's obvious that people are helping out on the same questions over and over because the problems aren't really changing. Hardware is advancing but people are still bickering about C vs C++, C++ vs BASIC, DX vs OGL, etc.
This tells me that we're perhaps in a rut as indie game developers. Sure, some of us will make advances, make great games, great engines and so forth (WhiteSpace's "StickSoldiers", RectorInteractive's "Sector 13", Raduprv's "Eternal Lands" and EDI's "Morning's Wrath" spring to mind). We're indies, we have the world at our fingertips - I can't help think that we should be doing more. Why start at the same bases? Let's learn a lesson and step up and help each generation in turn make that further step. Let's rekindle the old spirit of the 1980's/early 1990's.
I really hope you understand my meaning here. I'm going to be following it from here on.
Fixed journal links, thanks John