You can't do it alone...

Tuesday, April 1, 2008

...unless you have some help.

Zero Gear is being created by two people. One artist and one programmer.

That is not entirely true however. We are making use of many, many tools to help us create this game. These tools have large communities of people creating them. I wanted to give some credit to these people and also just show how we are doing this so others might see how they can speed up their development with free tools.

Programming Language:
C++
C++ is a very popular programming language and we use it. Most of these tools (not all!) apply to C++.

3D Rendering:
Ogre3D
Every game needs to draw stuff on the screen. For 3D graphics Ogre is a great library. It has been in development for 6 years and been used in a lot of projects. Check it out, it will make your life easier.

GUI:
Navi
Navi is fairly new but a great solution if you want to get complex GUIs in game very fast. It uses the Gecko renderer (Firefox uses this renderer too) to render webpages to a texture. This allows you to create a GUI in something like Dreamweaver or any standard HTML, CSS, JavaScript tools. The only catch is that it is a bit slow for any real time displays. Note: This only works with Ogre.

Particles:
Particle Universe
The very FIRST thing that any game should have is PARTICLES. This is a great system to create awesome looking effects quickly. I am told that an editor is in the works. Note: This also only works with Ogre.

Texture Maps:
xNormal
xNormal is a great little tool that is kind of the swiss army knife of baking and displaying maps on 3D models. We use it to bake Ambient Occlusion into the textures of many of our models.

Physics:
Bullet
A game where nothing moves isn't very fun. Bullet will make things move. You can see it in action in our last video.

Networking:
ENet
ENet is a simple UDP networking library. It is a layer on top of UDP that adds reliability and ordered packets when needed and basic connection management. It is great if you want something easy to use but plan to implement most networking features yourself.

Network Prediction:
EPIC
EPIC is a class to extrapolate the players on the client past the most current physics update from the server. See this great article for some tips on how Valve does this.

Scripting:
Lua
Lua is a scripting language we have embedded in our game. We plan to have all gameplay coded in Lua. This will mean that it will be very easy to add new game modes, items, GUIs, animations, etc during development and perhaps even allow the community to create these too. It also helps speed up development as we don't have to recompile the game every time we want to change a single value or algorithm.

Script Binding:
luabind
luabind helps us connect Lua to our game. It uses C++ templates to generate binding code for your classes (Really good use of TMP!!). There are a few options for doing this. We decided luabind was best for us.

Script Debugger:
Decoda
This is a great tool to debug code written in Lua. It allows the standard debugging operations such as call stack, breakpoints, watch, etc. It is great if you have a lot of code written in Lua and you aren't a perfect human. This is not free however (but it is cheap and useful!).

XML Parsing:
TinyXML
XML is a really great way to store data in a human readable format. Just use it...

General Code Support:
Boost
Boost is actually a large collection of different libraries for C++.
We use:
shared_ptr
bind
function
signal
I will have to do another post about these as they are a bit more complicated...

8 comments:

Anonymous said...

I'm using FantastiqUI, but Navi also looks very nice. I think that the performance for going straight to flash without running a browser has some benefit, but you definitely get some added flexibility with a real browser!

Brian Cronin said...

Wow Tim, I don't know how I hadn't heard of FantastiqUI before! I am going to have to do more research on it. Thanks for the tip!

Unknown said...

Looks great! Do you plan on releasing a Linux build?

Brian Cronin said...

With the exception of one library, all our code should port over to Linux. I can't say for sure yet but if we find the time I will see what it takes to build everything on Linux.

I would love to have the game on Linux and OSX. It is hard to support a lot of different platforms with a small team :(

Anonymous said...

nice post. It would be great if you could post more info on how you use boost.I'm in the process of integrating boost::signal in my project as well :).

Brian Cronin said...

I plan on posting more on boost at some point. I use boost::signal but I am planning on removing it for my own implementation soon (as I just am not taking advantage of its templating features).

boost::shared_ptr is a must! I use it a lot... (maybe too much?? nah!)

Haqqaton said...

Hey, this project looks great.
I'm currently making a game with a friend too. But we are programmers, and now we need a artist.

So, the models (characters) used in game are the default (.mesh's Ogre) or you've created another format?

Thanks for the tool's list.

Brian Cronin said...

We use the default Ogre mesh format. Animations are done using the mesh format too.

There is a plugin for Maya to export the meshes you can get on the Ogre site.