Game Development Community

dev|Pro Game Development Curriculum

Muffler weapons

by Mr Li · 08/23/2012 (2:36 pm) · 6 comments

This is the weapon muffler state . Modeled m4a1 in shooting game. :)

Which contains the ordinary state and muffler state , their properties can be adjusted according to the actual situation .

Unfortunately opened fire state bug .

stateFire[17] = false;//true, Is true, the sound does not correct

datablock ShapeBaseImageData(m4a1Image)
{
   //...

   //
   stateName[0]                     = "Preactivate";
   stateTransitionOnLoaded[0]       = "Activate";
   stateTransitionOnNoAmmo[0]       = "NoAmmo";

   // Activating the gun.  Called when the weapon is first
   // mounted and there is ammo.
   stateName[1]                     = "Activate";
   stateTransitionGeneric0In[1]     = "SprintEnter";
   stateTransitionOnTimeout[1]      = "Ready";
   stateTimeoutValue[1]             = 0.5;
   stateSequence[1]                 = "switch_in";
   stateSound[1]                    = m4a1DeploySound;

   // Ready to fire, just waiting for the trigger
   stateName[2]                     = "Ready";
   stateTransitionGeneric0In[2]     = "SprintEnter";
   stateTransitionOnMotion[2]       = "ReadyMotion";
   stateTransitionOnTimeout[2]      = "ReadyFidget";
   stateTimeoutValue[2]             = 10;
   stateWaitForTimeout[2]           = false;
   stateScaleAnimation[2]           = false;
   stateScaleAnimationFP[2]         = false;
   stateTransitionOnNoAmmo[2]       = "NoAmmo";
   stateTransitionOnTriggerDown[2]  = "Fire";
   stateTransitionOnAltTriggerDown[2] = "Muffling";   //
   stateSequence[2]                 = "idle";

   // Same as Ready state but plays a fidget sequence
   stateName[3]                     = "ReadyFidget";
   stateTransitionGeneric0In[3]     = "SprintEnter";
   stateTransitionOnMotion[3]       = "ReadyMotion";
   stateTransitionOnTimeout[3]      = "Ready";
   stateTimeoutValue[3]             = 6;
   stateWaitForTimeout[3]           = false;
   stateTransitionOnNoAmmo[3]       = "NoAmmo";
   stateTransitionOnTriggerDown[3]  = "Fire";
   stateTransitionOnAltTriggerDown[3] = "Muffling";   //
   stateSequence[3]                 = "idle_fidget1";
   stateSound[3]                    = LurkerIdleSound;

   // Ready to fire with player moving
   stateName[4]                     = "ReadyMotion";
   stateTransitionGeneric0In[4]     = "SprintEnter";
   stateTransitionOnNoMotion[4]     = "Ready";
   stateWaitForTimeout[4]           = false;
   stateScaleAnimation[4]           = false;
   stateScaleAnimationFP[4]         = false;
   stateSequenceTransitionIn[4]     = true;
   stateSequenceTransitionOut[4]    = true;
   stateTransitionOnNoAmmo[4]       = "NoAmmo";
   stateTransitionOnTriggerDown[4]  = "Fire";
   stateTransitionOnAltTriggerDown[4] = "Muffling";   //
   stateSequence[4]                 = "run";

   // Fire the weapon. Calls the fire script which does
   // the actual work.
   stateName[5]                     = "Fire";
   stateTransitionGeneric0In[5]     = "SprintEnter";
   //stateTransitionOnTriggerDown[5]    = "NewRound";
   stateTransitionOnTimeout[5]    = "NewRound";
   stateTransitionOnAltTriggerDown[5] = "Muffling";   //
   stateTimeoutValue[5]             = 0.05;//0.15;
   stateFire[5]                     = true;
   stateRecoil[5]                   = "";
   stateAllowImageChange[5]         = false;
   stateSequence[5]                 = "fire";
   stateScaleAnimation[5]           = false;
   stateSequenceNeverTransition[5]  = true;
   stateSequenceRandomFlash[5]      = true;        // use muzzle flash sequence
   stateScript[5]                   = "onFire";
   stateSound[5]                    = m4a1FireSound;
   stateEmitter[5]                  = WeaponFireMuzzleEmitter;
   stateEmitterTime[5]              = 0.05;

   // Put another round into the chamber if one is available
   stateName[6]                     = "NewRound";
   stateTransitionGeneric0In[6]     = "SprintEnter";
   stateTransitionOnNoAmmo[6]       = "NoAmmo";
   //stateTransitionOnTriggerDown[6]  = "Ready";
   stateTransitionOnTimeout[6]  = "Ready";
   stateTimeoutValue[6]             = 0.05;//0.05;
   stateTransitionOnAltTriggerDown[6] = "Muffling";   //
   stateWaitForTimeout[6]           = "0";
   stateAllowImageChange[6]         = false;
   stateEjectShell[6]               = true;

   // No ammo in the weapon, just idle until something
   // shows up. Play the dry fire sound if the trigger is
   // pulled.
   stateName[7]                     = "NoAmmo";
   stateTransitionGeneric0In[7]     = "SprintEnter";
   stateTransitionOnMotion[7]       = "NoAmmoMotion";
   stateTransitionOnAmmo[7]         = "ReloadClip";
   stateTimeoutValue[7]             = 0.1;   // Slight pause to allow script to run when trigger is still held down from Fire state
   stateScript[7]                   = "onClipEmpty";
   stateSequence[7]                 = "idle";
   stateScaleAnimation[7]           = false;
   stateScaleAnimationFP[7]         = false;
   stateTransitionOnTriggerDown[7]  = "DryFire";
   stateTransitionOnAltTriggerDown[7] = "Muffling";   //
   
   stateName[8]                     = "NoAmmoMotion";
   stateTransitionGeneric0In[8]     = "SprintEnter";
   stateTransitionOnNoMotion[8]     = "NoAmmo";
   stateWaitForTimeout[8]           = false;
   stateScaleAnimation[8]           = false;
   stateScaleAnimationFP[8]         = false;
   stateSequenceTransitionIn[8]     = true;
   stateSequenceTransitionOut[8]    = true;
   stateTransitionOnTriggerDown[8]  = "DryFire";
   stateTransitionOnAltTriggerDown[8] = "Muffling";   //
   stateTransitionOnAmmo[8]         = "ReloadClip";
   stateSequence[8]                 = "run";

   // No ammo dry fire
   stateName[9]                     = "DryFire";
   stateTransitionGeneric0In[9]     = "SprintEnter";
   stateTransitionOnAmmo[9]         = "ReloadClip";
   stateWaitForTimeout[9]           = "0";
   stateTimeoutValue[9]             = 0.7;
   stateTransitionOnTimeout[9]      = "NoAmmo";
   stateScript[9]                   = "onDryFire";
   stateSound[9]                    = m4a1EmptySound;

   // Play the reload clip animation
   stateName[10]                     = "ReloadClip";
   stateTransitionGeneric0In[10]     = "SprintEnter";
   stateTransitionOnTimeout[10]      = "Ready";
   stateWaitForTimeout[10]           = true;
   stateTimeoutValue[10]             = 3.0;
   stateReload[10]                   = true;
   stateSequence[10]                 = "reload";
   stateShapeSequence[10]            = "Reload";
   stateScaleShapeSequence[10]       = true;
   stateSound[10]                    = LurkerReloadSound;

   // Start Sprinting
   stateName[11]                    = "SprintEnter";
   stateTransitionGeneric0Out[11]   = "SprintExit";
   stateTransitionOnTimeout[11]     = "Sprinting";
   stateWaitForTimeout[11]          = false;
   stateTimeoutValue[11]            = 0.5;
   stateWaitForTimeout[11]          = false;
   stateScaleAnimation[11]          = false;
   stateScaleAnimationFP[11]        = false;
   stateSequenceTransitionIn[11]    = true;
   stateSequenceTransitionOut[11]   = true;
   stateAllowImageChange[11]        = false;
   stateSequence[11]                = "sprint";

   // Sprinting
   stateName[12]                    = "Sprinting";
   stateTransitionGeneric0Out[12]   = "SprintExit";
   stateWaitForTimeout[12]          = false;
   stateScaleAnimation[12]          = false;
   stateScaleAnimationFP[12]        = false;
   stateSequenceTransitionIn[12]    = true;
   stateSequenceTransitionOut[12]   = true;
   stateAllowImageChange[12]        = false;
   stateSequence[12]                = "sprint";
   
   // Stop Sprinting
   stateName[13]                    = "SprintExit";
   stateTransitionGeneric0In[13]    = "SprintEnter";
   stateTransitionOnTimeout[13]     = "Ready";
   stateWaitForTimeout[13]          = false;
   stateTimeoutValue[13]            = 0.5;
   stateSequenceTransitionIn[13]    = true;
   stateSequenceTransitionOut[13]   = true;
   stateAllowImageChange[13]        = false;
   stateSequence[13]                = "sprint";
   
   // Ready to fire, just waiting for the trigger
   stateName[14]                     = "MuReady";
   stateTransitionGeneric0In[14]     = "MuSprintEnter";
   stateTransitionOnMotion[14]       = "MuReadyMotion";
   stateTransitionOnTimeout[14]      = "MuReadyFidget";
   stateTimeoutValue[14]             = 10;
   stateWaitForTimeout[14]           = false;
   stateScaleAnimation[14]           = false;
   stateScaleAnimationFP[14]         = false;
   stateTransitionOnNoAmmo[14]       = "MuNoAmmo";
   stateTransitionOnTriggerDown[14]  = "MuFire";
   stateTransitionOnAltTriggerDown[14] = "unMuffling";
   stateSequence[14]                 = "idle";

   // Same as Ready state but plays a fidget sequence
   stateName[15]                     = "MuReadyFidget";
   stateTransitionGeneric0In[15]     = "MuSprintEnter";
   stateTransitionOnMotion[15]       = "MuReadyMotion";
   stateTransitionOnTimeout[15]      = "MuReady";
   stateTimeoutValue[15]             = 6;
   stateWaitForTimeout[15]           = false;
   stateTransitionOnNoAmmo[15]       = "MuNoAmmo";
   stateTransitionOnTriggerDown[15]  = "MuFire";
   stateTransitionOnAltTriggerDown[15] = "unMuffling";
   stateSequence[15]                 = "idle_fidget1";
   stateSound[15]                    = LurkerIdleSound;

   // Ready to fire with player moving
   stateName[16]                     = "MuReadyMotion";
   stateTransitionGeneric0In[16]     = "MuSprintEnter";
   stateTransitionOnNoMotion[16]     = "MuReady";
   stateWaitForTimeout[16]           = false;
   stateScaleAnimation[16]           = false;
   stateScaleAnimationFP[16]         = false;
   stateSequenceTransitionIn[16]     = true;
   stateSequenceTransitionOut[16]    = true;
   stateTransitionOnNoAmmo[16]       = "MuNoAmmo";
   stateTransitionOnTriggerDown[16]  = "MuFire";
   stateTransitionOnAltTriggerDown[16] = "unMuffling";
   stateSequence[16]                 = "run";

   // Fire the weapon. Calls the fire script which does
   // the actual work.
   stateName[17]                     = "MuFire";
   stateTransitionGeneric0In[17]     = "MuSprintEnter";
   //stateTransitionOnTriggerDown[17]    = "MuNewRound";
   stateTransitionOnTimeout[17]      = "MuNewRound";
   stateTimeoutValue[17]             = 0.04;//0.15;
   stateFire[17]                     = false;
   stateRecoil[17]                   = "";
   stateAllowImageChange[17]         = false;
   stateSequence[17]                 = "Fire";
   stateScaleAnimation[17]           = false;
   stateSequenceNeverTransition[17]  = false;
   stateSequenceRandomFlash[17]      = false;        // use muzzle flash sequence
   stateScript[17]                   = "onFire";
   stateSound[17]                    = m4a1OnFireSound;
   stateEmitter[17]                  = WeaponFireMuzzleEmitter;
   stateEmitterTime[17]              = 0.04;

   // Put another round into the chamber if one is available
   stateName[18]                     = "MuNewRound";
   stateTransitionGeneric0In[18]     = "MuSprintEnter";
   stateTransitionOnNoAmmo[18]       = "MuNoAmmo";
   //stateTransitionOnTriggerDown[18]  = "MuReady";
   stateWaitForTimeout[18]           = "0";
   stateTransitionOnTimeout[18]  = "MuReady";
   stateTimeoutValue[18]             = 0.06;//0.05;
   stateAllowImageChange[18]         = false;
   stateEjectShell[18]               = true;

   // No ammo in the weapon, just idle until something
   // shows up. Play the dry fire sound if the trigger is
   // pulled.
   stateName[19]                     = "MuNoAmmo";
   stateTransitionGeneric0In[19]     = "MuSprintEnter";
   stateTransitionOnMotion[19]       = "MuNoAmmoMotion";
   stateTransitionOnAmmo[19]         = "MuReloadClip";
   stateTimeoutValue[19]             = 0.1;   // Slight pause to allow script to run when trigger is still held down from Fire state
   stateScript[19]                   = "onClipEmpty";
   stateSequence[19]                 = "idle";
   stateScaleAnimation[19]           = false;
   stateScaleAnimationFP[19]         = false;
   stateTransitionOnTriggerDown[19]  = "MuDryFire";
   
   stateName[20]                     = "MuNoAmmoMotion";
   stateTransitionGeneric0In[20]     = "MuSprintEnter";
   stateTransitionOnNoMotion[20]     = "MuNoAmmo";
   stateWaitForTimeout[20]           = false;
   stateScaleAnimation[20]           = false;
   stateScaleAnimationFP[20]         = false;
   stateSequenceTransitionIn[20]     = true;
   stateSequenceTransitionOut[20]    = true;
   stateTransitionOnTriggerDown[20]  = "MuDryFire";
   stateTransitionOnAmmo[20]         = "MuReloadClip";
   stateSequence[20]                 = "run";

   // No ammo dry fire
   stateName[21]                     = "MuDryFire";
   stateTransitionGeneric0In[21]     = "MuSprintEnter";
   stateTransitionOnAmmo[21]         = "MuReloadClip";
   stateWaitForTimeout[21]           = "0";
   stateTimeoutValue[21]             = 0.7;
   stateTransitionOnTimeout[21]      = "MuNoAmmo";
   stateScript[21]                   = "onDryFire";
   stateSound[21]                    = m4a1EmptySound;

   // Play the reload clip animation
   stateName[22]                     = "MuReloadClip";
   stateTransitionGeneric0In[22]     = "MuSprintEnter";
   stateTransitionOnTimeout[22]      = "MuReady";
   stateWaitForTimeout[22]           = false;
   stateTimeoutValue[22]             = 3.0;
   stateReload[22]                   = false;
   stateSequence[22]                 = "reload";
   stateShapeSequence[22]            = "Reload";
   stateScaleShapeSequence[22]       = false;
   stateSound[22]                    = LurkerReloadSound;

   // Start Sprinting
   stateName[23]                    = "MuSprintEnter";
   stateTransitionGeneric0Out[23]   = "MuSprintExit";
   stateTransitionOnTimeout[23]     = "MuSprinting";
   stateWaitForTimeout[23]          = false;
   stateTimeoutValue[23]            = 0.5;
   stateWaitForTimeout[23]          = false;
   stateScaleAnimation[23]          = false;
   stateScaleAnimationFP[23]        = false;
   stateSequenceTransitionIn[23]    = true;
   stateSequenceTransitionOut[23]   = true;
   stateAllowImageChange[23]        = false;
   stateSequence[23]                = "sprint";

   // Sprinting
   stateName[24]                    = "MuSprinting";
   stateTransitionGeneric0Out[24]   = "MuSprintExit";
   stateWaitForTimeout[24]          = false;
   stateScaleAnimation[24]          = false;
   stateScaleAnimationFP[24]        = false;
   stateSequenceTransitionIn[24]    = true;
   stateSequenceTransitionOut[24]   = true;
   stateAllowImageChange[24]        = false;
   stateSequence[24]                = "sprint";
   
   // Stop Sprinting
   stateName[25]                    = "MuSprintExit";
   stateTransitionGeneric0In[25]    = "MuSprintEnter";
   stateTransitionOnTimeout[25]     = "MuReady";
   stateWaitForTimeout[25]          = false;
   stateTimeoutValue[25]            = 0.5;
   stateSequenceTransitionIn[25]    = true;
   stateSequenceTransitionOut[25]   = true;
   stateAllowImageChange[25]        = false;
   stateSequence[25]                = "sprint";
   
   stateName[26] = "Muffling";
   stateTransitionOnTimeout[26] = "MuReady";
   stateTimeoutValue[26] = 2.0;
   stateSequence[26] = "fire_alt";
   stateSound[26] = m4a1SOnSound;
   
   stateName[27] = "unMuffling";
   stateTransitionOnTimeout[27] = "Ready";
   stateTimeoutValue[27] = 2.0;
   stateSequence[27] = "fire_alt";
   stateSound[27] = m4a1SOffSound;
};

About the author

huaxiao studio

Recent Blogs

• weapon recoil(Torque3D 1.2)

#1
08/23/2012 (2:43 pm)
stateFire[17] = false;//true, Sound error.
#2
08/25/2012 (8:57 am)
Would you mind enclosing your code inside code blocks to make for easier reading?

// This is code!
// use [code]
[/code]
#3
08/27/2012 (1:39 pm)
@Mr Li
Please edit the resource and provide an actual description for the preview text.
#4
08/28/2012 (7:49 pm)
@Robert
Sorry , the first grant resources . I have improved.
Thank you.

@Scott
Thank you.
I have improved.
#5
08/29/2012 (4:10 am)
Any chance to see a little movie, showing this gun and function in use?
#6
08/29/2012 (9:40 am)
Thanks for posting this resource Li :)