Not my style but this situation calls for it:
http://www.youtube.com/watch?v=P3ALwKeSEYsThank you for the fast help! I'll fiddle a bit more with the states and animation timings, but otherwise it is perfect.

Here's the script. The animation timings are off.
datablock ItemData(IT_SkullHead)
{
category = "Item";
className = "Item";
shapeFile = "./skull.dts";
image = "IM_SkullHead";
rotate = false;
emap = true;
uiName = "Skull Head";
iconName = "Add-Ons/Weapon_Gun/icon_gun";
canDrop = true;
mass = 1;
drag = 0.1;
density = 0.1;
friction = 0.5;
elasticity = 0.1;
sticky = 0;
gravityMod = 1;
maxVelocity = -1;
dynamicType = 0;
doColorShift = true;
colorShiftColor = "1 1 0.949 1";
};
datablock ShapeBaseImageData(IM_Skull)
{
shapeFile = "./skull.dts";
emap = true;
mountPoint = $HeadSlot;
offset = "0 0 0";
eyeOffset = "0 0 10 1";
rotation = eulerToMatrix("0 0 0");
scale = "1 1 1";
doColorShift = true;
colorShiftColor = "1 1 0.949 1";
};
datablock ShapeBaseImageData(IM_SkullHead)
{
className = "ItemImage";
shapeFile = "./skull.dts";
Item = "IT_SkullHead";
emap = true;
firstPersonParticles = true;
armReady = true;
melee = false;
mountPoint = 0;
offset = "0 0 0";
rotation = eulerToMatrix("0 0 0");
eyeOffset = "0 0 0 0";
eyeRotation = "0 0 0 0";
correctMuzzleVector = false;
doColorShift = true;
colorShiftColor = "1 1 0.949 1";
stateName[0] = "Ready";
stateAllowImageChange[0] = true;
stateWaitForTimeout[0] = true;
stateTimeoutValue[0] = 0.1;
stateTransitionOnTriggerDown[0] = "Equip";
stateName[1] = "Equip";
stateScript[1] = "onFire";
stateTransitionOnTriggerUp[1] = "Ready";
};
function IM_SkullHead::onFire(%this, %obj, %slot)
{
%client=%obj.client;
if(!%obj.HatWear)
{
%obj.HatWear = 1;
for(%i = 0;$hat[%i] !$= "";%i++)
{
%obj.hideNode($hat[%i]);
%obj.hideNode("headskin");
}
%obj.unMountImage(1);
%obj.mountimage(IM_Skull, 1);
%obj.unMountImage(0);
%obj.mountimage(IM_SkullHeadEmpty,0);
%obj.schedule(0,"playThread",1,shiftAway);
%obj.schedule(1000,"playThread",1,root);
//%obj.playThread(1, root);
}
}
datablock ShapeBaseImageData(IM_SkullHeadEmpty)
{
className = "ItemImage";
shapeFile = "base/data/shapes/empty.dts";
Item = "IT_SkullHead";
emap = true;
firstPersonParticles = true;
armReady = false;
melee = false;
mountPoint = 0;
offset = "0 0 0";
rotation = eulerToMatrix("0 0 0");
eyeOffset = "0 0 0 0";
eyeRotation = "0 0 0 0";
correctMuzzleVector = false;
doColorShift = true;
colorShiftColor = "1 1 0.949 1";
stateName[0] = "Ready";
stateAllowImageChange[0] = true;
stateWaitForTimeout[0] = true;
stateTimeoutValue[0] = 0.1;
stateTransitionOnTriggerDown[0] = "Equip";
stateName[1] = "Equip";
stateScript[1] = "onFire";
stateTransitionOnTriggerUp[1] = "Ready";
};
function IM_SkullHeadEmpty::onFire(%this, %obj, %slot)
{
%client=%obj.client;
if(%obj.HatWear)
{
%obj.HatWear = 0;
%obj.unMountImage(1);
%obj.unHideNode("headskin");
%obj.unMountImage(0);
%obj.mountimage(IM_SkullHead,0);
%obj.schedule(0,"playThread",1,shiftAway);
%obj.schedule(1000,"playThread",1,armreadyright);
%client.applyBodyParts();
%client.applyBodyColors();
}
}