Ah. Like this?
ON MOUSEDOWN
 SPRITE 2 py 0 laser.gif
  SPRITEPATH 2 800 0 100
END MOUSEDOWN
Yet again everything works fine, but the shooting. The bullet always fires from the same place, not where the player is. I cannot understand why.
Oh I see why... I think. all I can see wrong with it is that py is in the x-spot, but that shouldn't affect this.
Then I looked at the top. A line I knew was pointless, but causing no harm, is probably the root of all your problems. I took it out when I demoed it, so I could understand your script better.
The very first line sets py as zero (you do know that all variables start out as 0 anyways... Right?) and that would run overtime before the mouse button hit, but this is assuming that you have loopscript running, though. If loopscript isn't running, then I have no idea.
Although even if you don't have loopscript on, it's useful to get rid of useless code lines, before you get into a bad habit.