hedgewars/GSHandlers.inc
changeset 4301 4866cc130b8d
parent 4299 d23f8a25fc3f
child 4312 2610ad7c6d6c
child 4313 0690067bc5ff
equal deleted inserted replaced
4299:d23f8a25fc3f 4301:4866cc130b8d
   318     if Gear^.AdvBounce > 1 then dec(Gear^.AdvBounce);
   318     if Gear^.AdvBounce > 1 then dec(Gear^.AdvBounce);
   319 
   319 
   320     if isFalling then 
   320     if isFalling then 
   321         begin
   321         begin
   322         Gear^.dY := Gear^.dY + cGravity;
   322         Gear^.dY := Gear^.dY + cGravity;
   323         if (GameFlags and gfMoreWind) <> 0 then Gear^.dX := Gear^.dX + cWindSpeed * _16 / max(12,sqr(Gear^.Radius));
   323         if (GameFlags and gfMoreWind) <> 0 then Gear^.dX := Gear^.dX + cWindSpeed * _16 / max(12,sqr(Gear^.Radius))
   324         end;
   324         end;
   325 
   325 
   326     Gear^.X := Gear^.X + Gear^.dX;
   326     Gear^.X := Gear^.X + Gear^.dX;
   327     Gear^.Y := Gear^.Y + Gear^.dY;
   327     Gear^.Y := Gear^.Y + Gear^.dY;
   328     CheckGearDrowning(Gear);
   328     CheckGearDrowning(Gear);
  1108 
  1108 
  1109     if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY := _0;
  1109     if HHGear^.dY.isNegative and TestCollisionYwithGear(HHGear, -1) then HHGear^.dY := _0;
  1110     HHGear^.X := HHGear^.X + HHGear^.dX;
  1110     HHGear^.X := HHGear^.X + HHGear^.dX;
  1111     HHGear^.Y := HHGear^.Y + HHGear^.dY;
  1111     HHGear^.Y := HHGear^.Y + HHGear^.dY;
  1112     HHGear^.dY := HHGear^.dY + cGravity;
  1112     HHGear^.dY := HHGear^.dY + cGravity;
       
  1113     if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _0_2;
  1113 
  1114 
  1114     if (Gear^.Message and gmAttack) <> 0 then
  1115     if (Gear^.Message and gmAttack) <> 0 then
  1115     begin
  1116     begin
  1116         Gear^.X := HHGear^.X;
  1117         Gear^.X := HHGear^.X;
  1117         Gear^.Y := HHGear^.Y;
  1118         Gear^.Y := HHGear^.Y;
  1170 
  1171 
  1171     if (Gear^.Message and gmLeft  <> 0) then HHGear^.dX := HHGear^.dX - _0_0002
  1172     if (Gear^.Message and gmLeft  <> 0) then HHGear^.dX := HHGear^.dX - _0_0002
  1172     else
  1173     else
  1173         if (Gear^.Message and gmRight <> 0) then HHGear^.dX := HHGear^.dX + _0_0002;
  1174         if (Gear^.Message and gmRight <> 0) then HHGear^.dX := HHGear^.dX + _0_0002;
  1174 
  1175 
  1175     if not TestCollisionYwithGear(HHGear, 1) then HHGear^.dY := HHGear^.dY + cGravity;
  1176     if not TestCollisionYwithGear(HHGear, 1) then
       
  1177         begin
       
  1178         HHGear^.dY := HHGear^.dY + cGravity;
       
  1179         if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _0_2
       
  1180         end;
  1176 
  1181 
  1177     ropeDx := HHGear^.X - Gear^.X;
  1182     ropeDx := HHGear^.X - Gear^.X;
  1178     // vector between hedgehog and rope attaching point
  1183     // vector between hedgehog and rope attaching point
  1179     ropeDy := HHGear^.Y - Gear^.Y;
  1184     ropeDy := HHGear^.Y - Gear^.Y;
  1180 
  1185 
  1371             end
  1376             end
  1372         else
  1377         else
  1373             begin
  1378             begin
  1374             HHGear^.Y := HHGear^.Y + HHGear^.dY;
  1379             HHGear^.Y := HHGear^.Y + HHGear^.dY;
  1375             Gear^.Y := Gear^.Y + HHGear^.dY;
  1380             Gear^.Y := Gear^.Y + HHGear^.dY;
  1376             HHGear^.dY := HHGear^.dY + cGravity
  1381             HHGear^.dY := HHGear^.dY + cGravity;
       
  1382             if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _0_2
  1377             end;
  1383             end;
  1378 
  1384 
  1379         tt := Gear^.Elasticity;
  1385         tt := Gear^.Elasticity;
  1380         tx := _0;
  1386         tx := _0;
  1381         ty := _0;
  1387         ty := _0;
  3087             dec(Gear^.Health, fuel div 5);
  3093             dec(Gear^.Health, fuel div 5);
  3088             Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3094             Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3089             Gear^.Timer := GameTicks
  3095             Gear^.Timer := GameTicks
  3090             end
  3096             end
  3091         end;
  3097         end;
  3092     if not isUnderwater and ((GameFlags and gfMoreWind) <> 0) then HHGear^.dX := HHGear^.dX + cWindSpeed * _16 / sqr(cHHRadius);
       
  3093 
  3098 
  3094     // erases them all at once :-/
  3099     // erases them all at once :-/
  3095     if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then
  3100     if (Gear^.Timer <> 0) and (GameTicks - Gear^.Timer > 250) then
  3096         begin
  3101         begin
  3097         Gear^.Timer := 0;
  3102         Gear^.Timer := 0;
  3219         begin
  3224         begin
  3220         HHGear^.dX := HHGear^.dX + (move * _0_1);
  3225         HHGear^.dX := HHGear^.dX + (move * _0_1);
  3221         dec(Gear^.Health, fuel div 5);
  3226         dec(Gear^.Health, fuel div 5);
  3222         Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3227         Gear^.MsgParam := Gear^.MsgParam or (HHGear^.Message and (gmLeft or gmRight));
  3223         end;
  3228         end;
  3224     if (GameFlags and gfMoreWind) <> 0 then HHGear^.dX := HHGear^.dX + cWindSpeed * _16 / sqr(cHHRadius);
       
  3225 
  3229 
  3226     if Gear^.Health < 0 then Gear^.Health := 0;
  3230     if Gear^.Health < 0 then Gear^.Health := 0;
  3227     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
  3231     if ((GameTicks and $FF) = 0) and (Gear^.Health < 500) then
  3228         for i:= ((500-Gear^.Health) div 250) downto 0 do
  3232         for i:= ((500-Gear^.Health) div 250) downto 0 do
  3229             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);
  3233             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtFeather);