Programming Language

There is no doubt in my mind, absolutely none. For a professional multiplatform game engine that's able to squeeze out awesome graphics you'll need C++ and support for OpenGL. You should forget about Java, C# and for Christ's sake JavaScript (he just doesn't like it). Some people think that gamemakers live in the stone-age or that they don't want to let go of the unmanaged libraries they have accumulated. The truth is: C++ really is better. Before you leave a comment telling me to keep this shortsightedness to myself and I should look at some awesome looking C# - XNA example, don't worry I'm already doubting this decision.

It's all a matter of asking ourselves "What do we want to achieve?". Do we really want to have multiplatform support with state of the art graphics? Yes I want that! Give it all to ME! Let's get serious :wink:, I'm not going to compete with a game engine made by an actual company and won't even make money out of this. On the off-chance that this going to be successful, it's probably not because it looks so much better than existing stuff and also not because we give support for iOS. This iOS statement is quite bold because of the growing market of IPAD-related products so maybe I should explain myself a little bit. If we want to make money in the App Store the best way is to create a very small game and we don't need a game engine for that. We'd probably create it using quick-'n-dirty methods of directly accessing the graphics API in game-related functions. People just don't like to play 'big' games on such devices and abstracting away complex stuff in a game engine only makes sense if you intend to use the feature more than once. Michael Goodfellow from also found out that it's quite a hassle to keep releasing the prototypes on every platform. To prevent this annoying situation, I'll just stick to Windows and make a port if there is enough enthusiasm.

Suddenly my reasons for using C++ and OpenGL are fading in the distance, but is there a better alternative? If I were to use C# or Java, at least I don't have to use tons of third-party libraries that would be needed when programming in C++. The programming environment for these languages is way better too (changing code while running it, compile-errors that make sense, decent Just-in time-debugging). Java obviously has multiplatform support, but that doesn't help you if you want to port your game to Xbox, Playstation or Wii (the more interesting platforms to create ports for). Maybe the biggest downside of the managed languages is the garbage collector. Games often have the tendency to use quite a bit of memory and freeing up memory exactly how we want it and when we want it is kind-of important. On the flipside of things, the most important part of the memory (on the Graphics card) can be managed quite well.

The obvious solution is to create our own programming language that combines all the good stuff into one tight little package. It turned out to be the most powerful Turing-complete language I have seen to date and I call it Procedural Object Oriented Programming. It's not that I want to brag or anything, but just imagine your code looking like this:

The biggest problem of making your own language that mixes up different syntax styles is that you won't be taken seriously if you don't release an SDK. I tried to upload it to my webspace provider, but they told me that they don't want to be hold responsible when mr. Microsoft decides to sue me. Another good example of big corporations holding back progress vitally important to the survival of mankind!

I'm sure that by saying this I will will lose the a couple of readers, but C# is just way better than Java as a language, as a framework and as a husband. C# just treats you like he cares and doesn't mind to cuddle. The house C# lives in is better too, there is just no way that Eclipse is, or ever will be, on par with Visual Studio. And just to quote a reliable source: "Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders". I'm not a C# fan-boy nor am I a Java-hater, I just think it's funny to troll people who are :). Its a combination of personal preference and choosing the right tool for the job. Let continue the discussion monologue and decide on what rendering API we should use.

Rendering API

I've had a little bit of experience with DirectX back in the day, used OpenGL in my previous (not well made) game engine and used XNA just to toy around with it. My knowledge of DirectX is a little bit outdated, the last thing I remember is using 3D polygons for 2D graphics just because it was that much faster compared to DirectDraw. I'm going to read up on the progress they made the last few decades so I'll be right back...

Okay, OpenGL is a mess, but at least she's powerful. She doesn't mind if you touch her in places that are never meant to be touched and boy oh boy is there a lot to be touched. I do enjoy tickling her just to see how she would giggle and if I can't seem to find her belly-button I'll just ask the huge group of people that is supporting her weight. I would like to see a redesign of OpenGL, but on the other hand I'm scared I will lose the girl I've grown to love. DirectX doesn't like to be touched just by everyone and tends to hold secrets. You could say that's a bad thing, but it makes me want to experience her all the more. She does allow me to touch her hardware and her rich parents will make sure that she'll have a bright future. It would make sense for DirectX to run faster than OpenGL, but that's probably just because I'm too scared to feed her all my polygons. XNA is DirectX's little sister and she sure is cute. I really had a great time playing with her, but her parents are really protective of her. Maybe we can't do everything we want but it's easy to make her smile. It might be too soon to call her mature, but I have great hopes that she too could show round curves in the future.

State of the art graphics is not all that important to me and writing monkey code for DirectX or OpenGL is not a fun thing to do. I think I'll just start with C# and XNA and see how things go. If I need more power I'll probably move to C++ with DirectX and if it ends up being something cool I'll just replace DirectX with OpenGL to make it platform independent. I do use the word 'just' a lot and you should notice that it's not meant as "it is easy to do". Most software engineers are analytic creatures that try to come up with best possible solution (for which I agree is C++ and OpenGL), but the success rate of these project is so incredibly low that its almost naive to worry about stuff like performance. If it was possible to program this in something like GameMaker and it would have been easier, I would probably do it. This is not what a software engineer (including myself) wants to hear because we are taught to write code that can be reused. We just have to teach ourselves that it's better to put things together with ductape to see if the idea is solid (and to start from scratch if it is), than it is to buy metal sheets and rivets and hope it will turn out to be a success. This idea of quick prototyping is not new and does not work on all (software) engineering branches, but i do think its important for gaming.

1 + 1 = 11

Lets sum up the brainstorming up till now so we won't get stuck at over thinking minor details. I don't really like procedural generated worlds and think C++ and OpenGL will give the best looking cross-platform result. For this reason we will use procedural generated worlds and start programming in C# using XNA.

Procedural ContentI Changed My Mind