Well.. assume you have
0: X
1: Y
2: Z
Then those coordinates are a bit wrong. Also the run calculation is bugging. Here's how i'd fix first function:

Code:
procedure MoveForwards(const Run: Boolean = True);
var Xtra: Single;
begin
  If Run Then Xtra := 2 Else Xtra := 1;
  Player.Position[0] := (Player.Position[0]+Cos(Player.Heading*Pi/180)*Xngine.GlobalTime*Xtra/600);
  Player.Position[2] := (Player.Position[2]+Sin(Player.Heading*Pi/180)*Xngine.GlobalTime*Xtra/600);
  Player.HeadMovAngle := Player.HeadMovAngle+5;
  Player.HeadMovement := 0.025*Sin(Player.HeadMovAngle*Pi/180);
end;