particles! particles! particles!

Tuesday, April 29, 2008

As some of you might have noticed in our last video, we have started putting particles in our game. For the non-developers out there, particles are how we create effects such as explosions, weather, dust or any situation where we need to animate some kind of graphical effect using many graphics moving together in a certain way. We are using an excellent particle library called Particle Universe which allows you to create these effects in a script type format. Here are a couple of effects I have been working on lately using this system.



Here is a snippet of the script of the bottom explosion effect, detailing how the system should animate the fireball part of the explosion:


// --------------- fireball ---------------
technique
{
use_alias $defaultBillboardRenderer
material fireball
default_particle_width 25
default_particle_height 25
visual_particle_quota 500
emitter Point
{
emission_rate 1
force_emission true
velocity 0
time_to_live 1
}

// expand quickly then slow
affector Scale
{
xyz_scale dyn_curved_linear
{
control_point 0 1
control_point 0.1 4500
control_point 0.3 500
}
}
// change color over time
affector Colour
{
colour_aff_time_colour 0 1 1 1
colour_aff_time_colour 0.1 1 1 1
colour_aff_time_colour 0.3 .8 .6 .6
colour_aff_time_colour 0.45 .2 .2 .2
colour_aff_time_colour 0.65 0 0 0
}
}

New Video! Basic Gameplay tag-test

Tuesday, April 22, 2008



In this video we are using a “Tag” type game mode as an intitial test of our gameplay scripting system. Using the experience from this we will design bigger and more exciting gameplay!

In this mode, players compete for the longest amount of time being "IT". The longer you are "IT" the more points you rack up. There is also a 3 second immunity after you have become "IT". For this level, we also made points accumulate faster the closer you are to the middle, to encourage people to duke it out in the middle ring.

The test was a lot of fun, and gave us a lot of ideas and feedback for how we are going to implement more gameplay features in the near future!

a couple menu mock-ups

Tuesday, April 15, 2008

I just made a few menu mockups, to start thinking more in depth about what we want to do for them. Here is one for the main menu as well as one for the customize garage. As always, click for the full sized versions!

The idea for the main menu is that the elements fly in from the edges of the screen, and a model of your character / kart on a stand screws into place from the bottom off screen.



The customization menu will be able to handle all your kart and character customization or tuning. The left of the screen is where you will pick which element you are changing, and you can browse through your options on the right side, as well and pull it out further like a drawer with the red arrow to view more options at one time. The bottom of the screen is where your customizable color swatch options will appear for the item you have selected.

just putzing around in the garage

Friday, April 11, 2008


Here is a screenshot of the garage environment I have been working on this week. This is the area where you will be able to tweak, color, and change everything about your kart and character's look and performance. Click on the image to see a bigger version!

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...