Game Development

Huge static libraries in Visual Studio 2005

I build Ogre + dependencies into a static lib in Visual Studio 2005. The resulting .lib was 1,445,853,944 bytes. In fact I had to use a special flag /expectedoutputsize:50000000 or else the compiler incorrectly reported “LNK1106: invalid file or disk full: cannot seek to 0x76364” It also took minutes to link.

The same thing, built as a DLL was 7,921,664 bytes and the lib was 2,983,094 bytes. It took less than a second to link.

Game Development

Should have used fmod to begin with

fmod is the RakNet of the audio world.

From looking at the website to getting it running in my game was 15 minutes.

It compiled and ran as I expected the first time.

It was documented.

The sample actually worked and was easy to follow.

I didn’t even have to write a wrapper!

$5000 is pretty steep for a commercial license but the shareware license at $100 is well worth it. I’ll be registering.

Game Development

OpenAL makes me want to kill someone!

OpenAL has to be the worst packaged library I’ve ever used.

The distributions are different between the SVN, the downloadable installer, and the source download.
There is a downloadable installer for a library to begin with, which makes no sense.
The license terms for the downloadable installer are draconian.
The library is split among 4 projects, each with different settings, which output to 2 .libs with no explanation as to why or what the differences are. The actual library takes 2-3 .libs depending on which one you download, which in turn takes 1-2 dlls, again depending on which one you download.
None of the three dowloads work without modifications.
Each of the three downloads only contain a subset of the code, meaning you have to download all 3 anyway and then figure out how to put them together.
The tutorials don’t run because they require a DLL that isn’t included in any of the distributions.
You can’t build static libraries or directly include the source without modifying the code.
Version 1.1 is utterly incompatible with older versions and in fact seems to have less features.
The documentation is so out of date that it is flat out useless for that functions that it does cover, which is only a minor fraction of the actual functions.
The code does not include useful user documentation in the headers so you have to just guess what the functions do.

/* Create Source objects */
AL_API void AL_APIENTRY alGenSources( ALsizei n, ALuint* sources );

Um thanks…

Out of all the libraries I’m including in my game engine, by far I’ve spent the most time trying to get OpenAL working. I’m about to just say screw it and use fmod instead, even though fmod isn’t free.


Ogre3D update

I’m trying out Ogre3D now. So far I’m impressed!

I found a nice particle editor although it took some digging around in the forums. So that’s one big headache gone!
It has a GUI editor which could be easier to use but seems to do everything I want. Another headache gone.
It has exporters for every 3D modelling package. That’s great, because it frees me up from having to write one. If I do have to write one, I have the sources so I can do the modifications I need to.
It obviously supports shaders and enough graphics techniques for my game.

I made a project called RakEngine, which has Ogre3D, RakNet, and OpenAL. I’m going to screw around with it until I get some clickable buttons on the screen, showing some particles, and playing some sound. Then I will do a new state system. That’s pretty much it for the engine! I don’t need physics but if I do later turn out to need it there is a newton plugin for Ogre 🙂

In order to test the engine I can try writing something really simple, like multiplayer hangman. Although I don’t like taking the time away from my game, that covers all the basics so I can iron out the kinks.

I can then start over and do my real game 🙂

Game Development

Reality Engine vs. Ogre 3D

I was really excited about finishing the MMOG networking code recently and moving over to the Reality Engine. However, after looking at and discussing it for a few days it seems like there are some serious flaws in the design of RE.

First of all, they wrote most of the game in script. This is fine, except that the script they chose was C#. Which is also fine, except that C# requires that your end-users install the .net 2.0 framework. This is unacceptable because, at least with downloadable games, users might choose not to do that. I don’t blame them. Who wants to install some bloated crap from Microsoft and slow down your system just to play a game? It’s almost unheard of for a game to require you to install some 3rd party application just to play the game.

So now I have an engine with no game code.

Doubly bad, they also used C# for their GUI designer.

So I have an engine with no GUI code.

They also tied in Ageia physics to their physics library. Which itself requires an installation of a 3rd party driver. Which is also unacceptable for the same reason. So now I have an engine with no Physics either.

I’m not going to use their networking because although they used RakNet, they did a bad job of implementing it. So I have an engine with no networking.

RE has a good renderer. Except their toolset is very limited. For example, no particle editor and support only for MAX. Oops!

At least I get support in an engine right? Nope, because they aren’t answering the forum anymore.

So I’m left with a sound engine… an input engine… not much else really. I already have a sound engine though (OpenAL). I already have an input engine too.

So what am I left with?

I guess I have the option to either continue to use Irrlicht or to swap and start over with Ogre3D (Duke Nukem Forever!). I don’t want to keep starting over but the problem with Irrlicht is they are years behind Ogre3D. I really like how well written and easy to read and use the code is. But there’s no editor and a hell of a lot of other stuff missing. I spent quite a lot of time writing my particle editor. Then I was faced with writing code to render text on the screen. And so forth. With so much time spent on low level things, it would probably be faster just to use Ogre3D. I’m on the edge at this point and saying “Fuck it” and starting over with Ogre3D. It’s a sunk cost fallacy to stay with Irrlicht just because I already spent a lot of time on it. The question is, what is the fastest way to get my game done at this point? And it’s probably starting over with Ogre 3D. Since my network code is abstracted out I lose nothing there so I’m still maybe 40% done.