package 
{
	import adobe.utils.CustomActions;
	import com.adobe.utils.PerspectiveMatrix3D;
	import flash.geom.Point;
	import flash.geom.Vector3D;
		
	public class MobsTemplate
	{
		// Basic Info
		public var ID:int 					= -1;								// ID Number		
		public var boss:Boolean				= false;							// If mob is a boss
		public var Name:String 				= '';								// Name
		public var AI:Boolean 				= true;								// Has active AI	
		public var HPmax:int 				= 0;								// Max Hit Points
		public var HPcurrent:int 			= 0;								// Current Hit Points
		public var speed:Number				= 0;								// Mob's speed
		public var awake:Boolean			= false;							// Mob is awake
		public var waking:Boolean			= false;							// Mob is awake
		
		public var radius:int 				= 0;								// Radius for bullet hits
		public var radiusMove:int 			= 0;								// Radius for wall Collision
		public var yOffset:int				= 0;								// Amount to offset the center of the radius verically
		public var posNow:Point 			= new Point(0, 0);					// Mob 2D Position (currentX, currentZ)
		public var posTry:Point 			= new Point(0, 0);					// Mob 2D Position (attemptedX, attemptedZ)
		
		// Rotation
		public var yRot:Number				= 0;								// Rotation in Y for facing.
		public var yRotSpeed:Number			= 0;								// Degrees can turn per tic.
		public var vertRotation:Boolean		= true;								// Whether to rotate about vertical axis	
		
		// Collision
		public var collide:Boolean 			= false;							// Hit a wall or a mob
		public var collideWall:Boolean		= false;							// Hit a wall (used for explosive wall hits)
		public var dropTest:Boolean			= false;							// If mob should car about dropping of edges
		public var dropAmt:Number			= 0;								// How far to check for drop
		public var dropPoint:Point			= new Point(0, 0);					// Test 
		public var ignoreMobs:Boolean		= false;							// Whether to collide with other enemy mobs
		public var collideTime:int			= 0;								// How long mob has been colliding
		public var unstickTime:int			= 0;								// Time left to unstick mob
		public var collidePlayer:Boolean 	= false;							// Colliding with player
		
		// Gravity
		public var gravity:Number			= 0;								// Amount to move down per frame
		public var onGround:Boolean			= false;							// Mob is on the ground
		public var groundCnt:int			= 0;
		public var groundCntMax:int			= 3;
		public var vertMove:Number			= 0;								// Jumping
		public var movePoint:Point 			= new Point(0, 0);					// Normalized move amount
		public var mobCanSeeYou:Boolean		= false;							// If mob can see player
		public var angleToDesired:Number 	= 0									// Angle from Mob to Player
		public var rotateAmtY:Number 		= 0;								// Amt To Rotate
		public var movePath:Vector3D		= new Vector3D(0,0,0,0);			// Movement Direction
		
		// Weapon
		public var weapon:int 					= 0;							// Weapon number;
		public var weaponRanged:Boolean			= false;						// Mob Uses Ranged Weapon
		public var weaponMelee:Boolean			= false;						// Mob Uses Melee Weapon
		public var weaponExplode:Boolean 		= false;						// Mob Uses Explosive Weapon
		public var weaponExplodeWall:Boolean	= false;						// Mob Uses Explosive Weapon
		public var weaponSpawn:Boolean			= false;						// Mob Uses Spawn Weapon
		public var weaponSpawnMob:String		= '';							// Mob Spawn Type
		public var weaponSpawnOffset:Point		= new Point (0,0);				// Mob Spawn Offset
		public var weaponSpawnAngle:Number		= 0;							// Mob Spawn Angle
		
		public var weaponRange:int		= 0;									// Range of weapon
		public var detonationRange:int	= 0;									// Range of trigger to detonate explosive mob
		public var weaponCoolMax:int	= 0;									// Max time to wait after attack
		public var weaponCooldown:int	= 0;									// Current time left until can attack
		public var weaponDamage:int		= 0;									// Amount of damage attack does
		public var weaponAngles:Point	= new Point(0, 0);						// Min Max angles that allow weapon damage
		public var weaponSplash:Number	= 0;									// Distance for splash damage
		public var weaponSpread:Array	= new Array(true, 0, new Array(0));		// Projectile angles: # shots/fire, current index, angle list, array(0) specifies length
		public var weaponSpeed:int		= 0;									// Speed of projectile
		public var weaponBounce:int		= -1;									// Number of times rounds bounce
		public var weaponHoming:int		= -1;									// If bullets home
		
		// Animation
		public var animNow:AnimImporter  										// Animation to play 
		public var animPast:AnimImporter 										// Animation to blend
		public var blendTimeMax:int 	= 10;									// Max time to blend
		public var blendTime:int 		= 0;									// Current blend time
		public var frameNum:int 		= 0;									// Current frame number
		public var frameNumPast:int 	= 0;									// Blend frame number
		public var removeMe:Boolean 	= false;								// Death anim complete, remove mob from update array
		public var deathVFX:Boolean 	= false;								// Death vfx has been played
		public var animMove:Boolean		= false;								// Mob follow movement path - used for bosses
		public var moveFrame:uint		= 0;									// Frame of movement path anim - used for bosses
		
		
		// Misc.
		public var update:Boolean 		= false;								// Update if on screen or near player
		public var alerted:Boolean 		= false;								// Has seen player
		public var hitFrame:Boolean 	= false;								// Has taken damage
		public var lastSeen:Point		= new Point(0, 0);						// point last seen player
		
		public function MobsTemplate():void
		{
		}
		
		public function init(_mob:MobsTemplate):void
		{
		}
		
		
	}
	
}

Example:

package 
{
	import flash.geom.Point;
		
	public class MobsBoomer extends MobsTemplate
	{
		
		public function MobsBoomer():void
		{
		}		
		
		override public function init(_mob:MobsTemplate):void
		{
			// Basic Info
			_mob.ID 		= 2;							// ID Number
			_mob.HPmax 		= 4;							// Max Hit Points
			_mob.HPcurrent	= _mob.HPmax;					// Current Hit Points			
			_mob.speed		= 16;							// Mob's speed
			_mob.radius 	= 70;							// Radius for bullet hits
			_mob.radiusMove = 10;							// Radius for wall Collision
			_mob.yRotSpeed	= 10;							// Degrees can turn per tic.
			_mob.gravity	= 10;							// Amount to move down per frame
			_mob.yOffset	= -100;							// Amount to move center radius
			
			_mob.dropTest	= true;							// If mob should car about dropping of edges
			_mob.dropAmt	= 50;							// How far to check for drop
			
			// Weapon
			_mob.weaponExplode	 	= true;						// Mob Uses Explosive Weapon
			_mob.weaponRange		= 100;						// Range of weapon
			_mob.detonationRange	= 120;
			_mob.weaponCoolMax		= 60;						// Max time to wait after attack
			_mob.weaponDamage		= 2;						// Amount of damage attack does
			_mob.weaponAngles		= new Point(360, -360);		// Min Max angles that allow weapon damage
		}
		
	}
	
}