Particle Attachment for AI

From The DarkMod Wiki
Jump to: navigation, search

Attaching Particles to an AI

This page covers attaching particle systems to specific bones on an animated model (such as an AI). This should work for any animated object, it must have an md5 file so it contains bones.

The particle will be attached to a bone, this gives you plenty of options as most AI have 20+ bones. The names of the bones can be found in the AI's md5 file which can be opened with notepad or wordpad. For example, steambot.md5mesh contains the bones for the steambot. The joint names are usually fairly obvious as the animators need to find that info easily. left_hand is obviously a bone in the left hand.

You'll need to create a particle effect using the Particle Editor, or you can use an existing particle effect. Once you have that you can add some info to your AI's def file. Be wary that editing an existing particle in the editor will change all particles of that type, so it's best to add a new particle via the editor (you can copy settings from a similar particle if you like).

There are probably 2 ways to go with the particle attachment:

  • constantly emitted particle
  • particle emitted at intervals.

Adding the following spawnarg to your AI will add a particle named steam_puff to the joint named smokestack.

"smokeParticleSystem1" "steam_puff-smokestack"

Alternatively you can add the particle named smokestack to the joint named smokestack by using this line

"smokeParticleSystem1" "smokestack"

The first option is probably best as you can reuse particles instead of making a new one to match the joint name. Either way you'll notice that the above lines contain smokeParticleSystem1. An AI can have multiple smokeParticleSystems attached, in which case just increase the number: smokeParticleSystem2, smokeParticleSystem3, etc. The Monster_Boss_Cyberdemon.def from standard Doom 3 has 9 of these; 2 are used for footsteps, the other seem to be permanently attached flame particles to his back and mouth.

Note: Even though the spawnargs are called smokeParticleSystem#, you don't have to use them just for smoke. They work with any particle effect.

OK, great you say. But I only want a steam puff coming from my steambot's smokestack everytime the top of the stack opens. (In this case the stack happens to open towards the end of each animation.)

If so you'll need to add a line to your AI's model def description, as in the example below. This can be found in the AI's .def file (in this case lantern_bot.def).

anim walk		 models/md5/chars/steambots/lant_bot_walk.md5anim
{
frame 12	footstep
frame 31	footstep
frame 31     triggerSmokeParticle smokestack
}

In the above example, all of the particle effects attached to the bone named "smokestack" will start from the beginning every time the "walk" animation is at frame 31.

Importing the model and animation into a 3d program are probably the easiest way to find a specific frame, but you can also get it right by trial/error guessing. Most animations are around 30 frames, look for cycles. A bipeds walk anim is usually 2 steps (ie left foot, right foot) so a dust cloud coming from his right foot would be somewhere around frame 25, if it's late or early you can adjust until you get it close enough.

The benefit of using this method instead of a timing script is that you can match the particles timing to an AI's action even if something happens in time to mess up the sync.

Once you have the particle attached to the AI you can go in game and bring down the console ( Shift ~ ) and type editparticles. This will open the Particle Editor and you can edit the size, shape, timing, gravity, ect... of the particles. It takes a minute so be patient, once it has been opened it will only take a second to open again until you restart game mode.

If your number of particles being emitted is too high, the movement speed is too low, or a combination of these two then you might not notice them being emitted at the desired keyframe. If you want visible puffs using only one or two particles, increase as needed.



This is probably to be deleted soon, need to test self starting particles

I believe nothing other than "smokeParticleSystem1" "smokestack" is needed, they seem to start on their own, but if you want to start them you need to use above instruct