hedgewars/GSHandlers.inc
changeset 4299 d23f8a25fc3f
parent 4297 88714b6f3676
child 4301 4866cc130b8d
equal deleted inserted replaced
4297:88714b6f3676 4299:d23f8a25fc3f
   315         Gear^.AdvBounce := 10;
   315         Gear^.AdvBounce := 10;
   316     end;
   316     end;
   317 
   317 
   318     if Gear^.AdvBounce > 1 then dec(Gear^.AdvBounce);
   318     if Gear^.AdvBounce > 1 then dec(Gear^.AdvBounce);
   319 
   319 
   320     if isFalling then Gear^.dY := Gear^.dY + cGravity;
   320     if isFalling then 
   321     if (GameFlags and gfMoreWind) <> 0 then Gear^.dX := Gear^.dX + cWindSpeed * _4 / Gear^.Radius;
   321         begin
       
   322         Gear^.dY := Gear^.dY + cGravity;
       
   323         if (GameFlags and gfMoreWind) <> 0 then Gear^.dX := Gear^.dX + cWindSpeed * _16 / max(12,sqr(Gear^.Radius));
       
   324         end;
   322 
   325 
   323     Gear^.X := Gear^.X + Gear^.dX;
   326     Gear^.X := Gear^.X + Gear^.dX;
   324     Gear^.Y := Gear^.Y + Gear^.dY;
   327     Gear^.Y := Gear^.Y + Gear^.dY;
   325     CheckGearDrowning(Gear);
   328     CheckGearDrowning(Gear);
   326     //if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
   329     //if (hwSqr(Gear^.dX) + hwSqr(Gear^.dY) < _0_0002) and
  3084             dec(Gear^.Health, fuel div 5);
  3087             dec(Gear^.Health, fuel div 5);
  3085             Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3088             Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3086             Gear^.Timer := GameTicks
  3089             Gear^.Timer := GameTicks
  3087             end
  3090             end
  3088         end;
  3091         end;
  3089     if not isUnderwater and ((GameFlags and gfMoreWind) <> 0) then HHGear^.dX := HHGear^.dX + cWindSpeed * _4 / HHGear^.Radius;
  3092     if not isUnderwater and ((GameFlags and gfMoreWind) <> 0) then HHGear^.dX := HHGear^.dX + cWindSpeed * _16 / sqr(cHHRadius);
  3090 
  3093 
  3091     // erases them all at once :-/
  3094     // erases them all at once :-/
  3092     if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then
  3095     if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then
  3093         begin
  3096         begin
  3094         Gear^.Timer := 0;
  3097         Gear^.Timer := 0;
  3216         begin
  3219         begin
  3217         HHGear^.dX := HHGear^.dX + (move * _0_1);
  3220         HHGear^.dX := HHGear^.dX + (move * _0_1);
  3218         dec(Gear^.Health, fuel div 5);
  3221         dec(Gear^.Health, fuel div 5);
  3219         Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3222         Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3220         end;
  3223         end;
  3221     if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _4 / HHGear^.Radius;
  3224     if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _16 / sqr(cHHRadius);
  3222 
  3225 
  3223     if Gear^.Health < 0 then Gear^.Health := 0;
  3226     if Gear^.Health < 0 then Gear^.Health := 0;
  3224     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
  3227     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
  3225         for i:= ((500-Gear^.Health) div 250) downto 0 do
  3228         for i:= ((500-Gear^.Health) div 250) downto 0 do
  3226             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);
  3229             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);