Tutorial details:
Written by: Flashjunkie
Difficulty Level: Advanced
Requirements: Flash 4
Download FLA This is what we are aiming for in this tutorial. Move your mouse around the black screen below:

On top of the code that was built in the last tutorial here are some more variables for the main timeline that are needed for the gun:
Set Variable: "/gun:shootchance" = 12
 Set Variable: "shotspeed" = 15
 Comment: ----------------------------------------------
 Start Drag ("/ship", lockcenter)

"shootchance" is a variable that the gun will consult to see what percentage of the time (out of 100) it should be shooting. This depends on how much code is running at any one time in your Flash game. If you have lots and lots of code, it will take the game a while to get around to testing if it should shoot. If this is the case, you may want to set the shootchance higher. If there is nothing else running (like in the tutorial above) EVEN if you set "shootchance" very low... it still shoots almost constantly

I have created a target for the gun to shoot at. The target is called "ship". I start a drag so that the gun will constantly shoot at your mouse for this demo.

Here is the extra code that goes into the gun to make it shoot. (See our tutorial "Detect Mouse Angle" for an explanation of all the code before this point. I used the "Detect Mouse Script" and just made some additions to it to make it a gun.)
Comment: ----------------------------------------------
 Comment: shoot at user?
 Comment: ----------------------------------------------

Comment: the variable "shootchance" represents a percentage of 100. Since I use a random number, there is (in theory) a "shootchance" (pretend shootchance is set to 12) ... a 12 percent chance that the random number will be between 1 and 100. Since Random ACTUALLY returns a value between 0 and 99 I add +1.
Set Variable: "shootnow" = Random(100)+1
If (shootnow<=shootchance
Comment: keep increasing "shotname" so there are no shots with the same name ever.

When duplicating movie clips (there is only one "shot", which is duplicated whenever we need another one to appear...) you must never have more than one item with the same "depth". Only one item can exist at one depth at one time. So I keep increasing the variable "shotname" and use it in naming the new shots so they have unique names. I used "1000" as a maximum because it is unlikely I will ever need to have 1000 shots on the screen at the same time so I can recycle the numbers. The reason I do this, is in a game, you will have many many items that you need to duplicate. Each one needs guaranteed unique "depths" for its own use. I set aside numbers for use by different movie clips in chunks of 500 or 1000 because that is easier to keep track of.

Here, we create ourselves a new "shot".
Set Variable: "shotname" = shotname+1
 If (shotname>=1000)
 Set Variable: "shotname" = 1
 End If
 Duplicate Movie Clip ("../star", "shot"&shotname, shotname)

Now, the gun doesn't want to worry about the shot anymore, because it has other things to worry about. So I made the shot with the ability to move itself. It does, however, need to know a few things in order to do that. It needs to know how far to travel in the (x) direction, and how far to travel in th (y) direction each time it moves itself.
Comment: ----------------------------------------------
 Comment: determine shot travel values
 Comment: ----------------------------------------------
 If (abs_mouse_x>=abs_mouse_y)