Completely untested, but I can't see where it'd go wrong as I use a similar method:
datablock ShapeBaseImageData(yourWeaponImage)
{
...
stateName[#] = "FirePick1A";
stateScript[#] = "onFirePick";
stateTimeoutValue[#] = 0.01;
stateTransitionOnTimeout[#] = "FirePick1B";
stateName[#] = "FirePick1B";
stateTransitionOnAmmo[#] = "FirePick2A";
stateTransitionOnNoAmmo[#] = "FirePick3A";
stateName[#] = "FirePick2A";
stateScript[#] = "onFirePick";
stateTimeoutValue[#] = 0.01;
stateTransitionOnTimeout[#] = "FirePick2B";
stateName[#] = "FirePick2B";
stateTransitionOnAmmo[#] = "Fire1";
stateTransitionOnNoAmmo[#] = "Fire2";
stateName[#] = "FirePick3A";
stateScript[#] = "onFirePick";
stateTimeoutValue[#] = 0.01;
stateTransitionOnTimeout[#] = "FirePick3B";
stateName[#] = "FirePick3B";
stateTransitionOnAmmo[#] = "Fire3";
stateTransitionOnNoAmmo[#] = "Fire4";
stateName[#] = "Fire1";
stateSequence[#] = "Fire1";
//other fire stuff here
stateName[#] = "Fire2";
stateSequence[#] = "Fire2";
//other fire stuff here
stateName[#] = "Fire3";
stateSequence[#] = "Fire3";
//other fire stuff here
stateName[#] = "Fire4";
stateSequence[#] = "Fire4";
//other fire stuff here
};
function yourWeaponImage::onFirePick(%this,%obj,%slot)
{
%obj.setImageAmmo(%slot,getRandom(0,1));
}
Torque changes onAmmo/onNoAmmo states instantly when the state starts, so you have to use two for every change. This just picks a random state out of four - you'd then make give the animation four sequences called Fire1, Fire2, Fire3 and Fire4. Change the #s to fit in with your set of states. Give the fire states a timeout value 0.02 less than what you currently have it as to account for the picking states if you're using the armAttack animation as well to make sure it doesn't desynchronise. (e.g. fire when you're lifting the weapon up rather than bringing it down)