hedgewars/GSHandlers.inc
changeset 2994 7ae3067546f2
parent 2989 b49d87499398
child 2995 b90745d87332
equal deleted inserted replaced
2993:d83edb74e92d 2994:7ae3067546f2
    67     else
    67     else
    68         begin
    68         begin
    69         CheckGearDrowning:= true;
    69         CheckGearDrowning:= true;
    70         Gear^.State:= gstDrowning;
    70         Gear^.State:= gstDrowning;
    71         Gear^.RenderTimer:= false;
    71         Gear^.RenderTimer:= false;
    72         Gear^.doStep:= @doStepDrowningGear;
    72         if (Gear^.Kind <> gtSniperRifleShot) and (Gear^.Kind <> gtShotgunShot) and (Gear^.Kind <> gtDEagleShot) then
       
    73           Gear^.doStep:= @doStepDrowningGear;
    73         if Gear^.Kind = gtHedgehog then
    74         if Gear^.Kind = gtHedgehog then
    74             begin
    75             begin
    75             Gear^.State:= Gear^.State and (not gstHHDriven);
    76             Gear^.State:= Gear^.State and (not gstHHDriven);
    76             AddCaption(Format(GetEventString(eidDrowned), PHedgehog(Gear^.Hedgehog)^.Name), cWhiteColor, capgrpMessage);
    77             AddCaption(Format(GetEventString(eidDrowned), PHedgehog(Gear^.Hedgehog)^.Name), cWhiteColor, capgrpMessage);
    77             end
    78             end
    86         for i:= max(maxDrops div 3, min(32, Random(maxDrops))) downto 0 do 
    87         for i:= max(maxDrops div 3, min(32, Random(maxDrops))) downto 0 do 
    87             begin
    88             begin
    88             particle := AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), LAND_HEIGHT, vgtDroplet);
    89             particle := AddVisualGear(hwRound(Gear^.X) - 3 + Random(6), LAND_HEIGHT, vgtDroplet);
    89             if particle <> nil then
    90             if particle <> nil then
    90                 begin
    91                 begin
    91                 particle^.dX := particle^.dX + (Gear^.dX / 5);
    92                 particle^.dX := particle^.dX - (Gear^.dX / 10);
    92                 particle^.dY := particle^.dY - (Gear^.dY / 5)
    93                 particle^.dY := particle^.dY - (Gear^.dY / 5)
    93                 end
    94                 end
    94             end
    95             end
    95         end;
    96         end;
    96     end
    97     end
   534     Gear^.Y:= Gear^.Y + Gear^.dY * 8;
   535     Gear^.Y:= Gear^.Y + Gear^.dY * 8;
   535     ShotgunShot(Gear);
   536     ShotgunShot(Gear);
   536     Gear^.doStep:= @doStepShotIdle;
   537     Gear^.doStep:= @doStepShotIdle;
   537     exit
   538     exit
   538     end;
   539     end;
       
   540 
       
   541 CheckGearDrowning(Gear);
       
   542 if (Gear^.State and gstDrowning) <> 0 then
       
   543     begin
       
   544     Gear^.doStep:= @doStepShotIdle;
       
   545     exit
       
   546     end;
   539 dec(i)
   547 dec(i)
   540 until i = 0;
   548 until i = 0;
   541 if (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
   549 if (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0) or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
   542     Gear^.doStep:= @doStepShotIdle
   550     Gear^.doStep:= @doStepShotIdle
   543 end;
   551 end;
   562   if Gear^.Damage > 5 then
   570   if Gear^.Damage > 5 then
   563       if Gear^.Ammo^.AmmoType = amDEagle then
   571       if Gear^.Ammo^.AmmoType = amDEagle then
   564           AmmoShove(Gear, 7, 20)
   572           AmmoShove(Gear, 7, 20)
   565       else
   573       else
   566           AmmoShove(Gear, Gear^.Timer, 20);
   574           AmmoShove(Gear, Gear^.Timer, 20);
       
   575   CheckGearDrowning(Gear);
   567   dec(i)
   576   dec(i)
   568 until (i = 0) or (Gear^.Damage > Gear^.Health);
   577 until (i = 0) or (Gear^.Damage > Gear^.Health) or ((Gear^.State and gstDrowning) <> 0);
   569 if Gear^.Damage > 0 then
   578 if Gear^.Damage > 0 then
   570    begin
   579    begin
   571    DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1);
   580    DrawTunnel(oX, oY, Gear^.dX, Gear^.dY, 82 - i, 1);
   572    dec(Gear^.Health, Gear^.Damage);
   581    dec(Gear^.Health, Gear^.Damage);
   573    Gear^.Damage:= 0
   582    Gear^.Damage:= 0
   574    end;
   583    end;
       
   584 if ((Gear^.State and gstDrowning) <> 0) and (Gear^.Damage < Gear^.Health) and (cWaterOpacity < $FF) then
       
   585     begin
       
   586     for i:=(Gear^.Health - Gear^.Damage) * 4 downto 0 do
       
   587         begin
       
   588         if Random(6) = 0 then
       
   589             AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtBubble);
       
   590         Gear^.X:= Gear^.X + Gear^.dX;
       
   591         Gear^.Y:= Gear^.Y + Gear^.dY;
       
   592         end;
       
   593     end;
   575 
   594 
   576 if (Gear^.Health <= 0)
   595 if (Gear^.Health <= 0)
   577     or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0)
   596     or (hwRound(Gear^.X) and LAND_WIDTH_MASK <> 0)
   578     or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
   597     or (hwRound(Gear^.Y) and LAND_HEIGHT_MASK <> 0) then
   579     begin
   598     begin