hedgewars/GSHandlers.inc
changeset 7829 c1dc7839d7b9
parent 7784 cf6261f7fdb5
child 7864 667b7583c389
equal deleted inserted replaced
7828:63d9ea2c63be 7829:c1dc7839d7b9
    91                     PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack)
    91                     PlaySoundV(sndOops, gi^.Hedgehog^.Team^.voicepack)
    92                     
    92                     
    93                 else
    93                 else
    94                     begin
    94                     begin
    95                     if (gi^.State and gstMoving) = 0 then
    95                     if (gi^.State and gstMoving) = 0 then
       
    96                         begin
       
    97                         gi^.dX.isNegative:= X<gi^.X;
    96                         gi^.State := gi^.State or gstLoser;
    98                         gi^.State := gi^.State or gstLoser;
       
    99                         end;
    97                         
   100                         
    98                     if d > r div 2 then
   101                     if d > r div 2 then
    99                         PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) 
   102                         PlaySoundV(sndNooo, gi^.Hedgehog^.Team^.voicepack) 
   100                     else
   103                     else
   101                         PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack);
   104                         PlaySoundV(sndUhOh, gi^.Hedgehog^.Team^.voicepack);
   193     tdX := Gear^.dX;
   196     tdX := Gear^.dX;
   194     tdY := Gear^.dY;
   197     tdY := Gear^.dY;
   195 
   198 
   196 
   199 
   197 // might need some testing/adjustments - just to avoid projectiles to fly forever (accelerated by wind/skips)
   200 // might need some testing/adjustments - just to avoid projectiles to fly forever (accelerated by wind/skips)
   198     if (hwRound(Gear^.X) < LAND_WIDTH div -2)
   201     if (hwRound(Gear^.X) < min(LAND_WIDTH div -2, -2048))
   199     or (hwRound(Gear^.X) > LAND_WIDTH * 3 div 2) then
   202     or (hwRound(Gear^.X) > max(LAND_WIDTH * 3 div 2, 6144)) then
   200         Gear^.State := Gear^.State or gstCollision;
   203         Gear^.State := Gear^.State or gstCollision;
   201 
   204 
   202     if Gear^.dY.isNegative then
   205     if Gear^.dY.isNegative then
   203         begin
   206         begin
   204         isFalling := true;
   207         isFalling := true;
   984             if (hwRound(Bullet^.X) and LAND_WIDTH_MASK <> 0)
   987             if (hwRound(Bullet^.X) and LAND_WIDTH_MASK <> 0)
   985             or (hwRound(Bullet^.Y) and LAND_HEIGHT_MASK <> 0) then
   988             or (hwRound(Bullet^.Y) and LAND_HEIGHT_MASK <> 0) then
   986                     // only extend if not under water
   989                     // only extend if not under water
   987                     if hwRound(Bullet^.Y) < cWaterLine then
   990                     if hwRound(Bullet^.Y) < cWaterLine then
   988                         begin
   991                         begin
   989                         VGear^.dX := VGear^.dX + LAND_WIDTH * (VGear^.dX - VGear^.X);
   992                         VGear^.dX := VGear^.dX + max(LAND_WIDTH,4096) * (VGear^.dX - VGear^.X);
   990                         VGear^.dY := VGear^.dY + LAND_WIDTH * (VGear^.dY - VGear^.Y);
   993                         VGear^.dY := VGear^.dY + max(LAND_WIDTH,4096) * (VGear^.dY - VGear^.Y);
   991                         end;
   994                         end;
   992 
   995 
   993             VGear^.Timer := 200;
   996             VGear^.Timer := 200;
   994             end;
   997             end;
   995 end;
   998 end;
  2168         end;
  2171         end;
  2169 
  2172 
  2170     if (GameTicks and $3F) = 0 then
  2173     if (GameTicks and $3F) = 0 then
  2171         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  2174         AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
  2172 
  2175 
  2173     if (hwRound(Gear^.X) > (LAND_WIDTH+2048)) or (hwRound(Gear^.X) < -2048) then
  2176     if (hwRound(Gear^.X) > (max(LAND_WIDTH,4096)+2048)) or (hwRound(Gear^.X) < -2048) then
  2174         begin
  2177         begin
  2175         // avoid to play forever (is this necessary?)
  2178         // avoid to play forever (is this necessary?)
  2176         StopSoundChan(Gear^.SoundChannel);
  2179         StopSoundChan(Gear^.SoundChannel);
  2177         DeleteGear(Gear)
  2180         DeleteGear(Gear)
  2178         end;
  2181         end;
  2188         Gear^.X := -_2048;
  2191         Gear^.X := -_2048;
  2189         end
  2192         end
  2190     else
  2193     else
  2191         begin
  2194         begin
  2192         Gear^.Tag := -1;
  2195         Gear^.Tag := -1;
  2193         Gear^.X := int2hwFloat(LAND_WIDTH + 2048);
  2196         Gear^.X := int2hwFloat(max(LAND_WIDTH,4096) + 2048);
  2194         end;
  2197         end;
  2195 
  2198 
  2196     Gear^.Y := int2hwFloat(topY-300);
  2199     Gear^.Y := int2hwFloat(topY-300);
  2197     Gear^.dX := int2hwFloat(Gear^.Target.X - 5 * Gear^.Tag * 15);
  2200     Gear^.dX := int2hwFloat(Gear^.Target.X - 5 * Gear^.Tag * 15);
  2198 
  2201 
  3967         else
  3970         else
  3968             loadNewPortalBall(Gear, true);
  3971             loadNewPortalBall(Gear, true);
  3969     end
  3972     end
  3970     
  3973     
  3971     else if (y > cWaterLine)
  3974     else if (y > cWaterLine)
  3972     or (y < -LAND_WIDTH)
  3975     or (y < -max(LAND_WIDTH,4096))
  3973     or (x > 2*LAND_WIDTH)
  3976     or (x > 2*max(LAND_WIDTH,4096))
  3974     or (x < -LAND_WIDTH) then
  3977     or (x < -max(LAND_WIDTH,4096)) then
  3975         loadNewPortalBall(Gear, true);
  3978         loadNewPortalBall(Gear, true);
  3976 end;
  3979 end;
  3977 
  3980 
  3978 procedure doStepMovingPortal(Gear: PGear);
  3981 procedure doStepMovingPortal(Gear: PGear);
  3979 begin
  3982 begin
  5109                 Target.X:= gX;
  5112                 Target.X:= gX;
  5110                 Target.Y:= gY;
  5113                 Target.Y:= gY;
  5111                 X:= HHGear^.X;
  5114                 X:= HHGear^.X;
  5112                 Y:= HHGear^.Y
  5115                 Y:= HHGear^.Y
  5113                 end;
  5116                 end;
  5114             if (gX > LAND_WIDTH*2) or
  5117             if (gX > max(LAND_WIDTH,4096)*2) or
  5115                     (gX < -LAND_WIDTH) or
  5118                     (gX < -max(LAND_WIDTH,4096)) or
  5116                     (gY < -LAND_HEIGHT) or
  5119                     (gY < -max(LAND_HEIGHT,4096)) or
  5117                     (gY > LAND_HEIGHT+512) then
  5120                     (gY > max(LAND_HEIGHT,4096)+512) then
  5118                 begin
  5121                 begin
  5119                 X:= HHGear^.X;
  5122                 X:= HHGear^.X;
  5120                 Y:= HHGear^.Y
  5123                 Y:= HHGear^.Y
  5121                 end
  5124                 end
  5122         end
  5125         end