I use a slightly different approach for this. Basically I use a decay option. For example when the ship shoots a bullet, when can they shoot again.

Whenever an action occurs (eg Shoot) I set a ShootPower variable. Each move this Shoot Power Variable decreases (By TC in the above source example) - In the Move procedure I check if ShootPower is <= 0 and if it is I can then do the next action.

Each particle can be allocated a DecayValue. When this decay value is <= 0 then do the next random action, and set DecayValue again. To make it even more random - set DecayValue to a random value (DecayValue := Round(Random * 100) + 50).