hedgewars/uGearsHandlersRope.pas
changeset 7594 5f03595335e6
parent 7593 b966e2d833f2
child 7595 bbac3c0f0c68
equal deleted inserted replaced
7593:b966e2d833f2 7594:5f03595335e6
    73         end
    73         end
    74 end;
    74 end;
    75 
    75 
    76 procedure RopeDeleteMe(Gear, HHGear: PGear);
    76 procedure RopeDeleteMe(Gear, HHGear: PGear);
    77 begin
    77 begin
       
    78     PlaySound(sndRopeRelease);
       
    79     HHGear^.dX.QWordValue:= HHGear^.dX.QWordValue shr 3;
       
    80     HHGear^.dY.QWordValue:= HHGear^.dY.QWordValue shr 3;
    78     with HHGear^ do
    81     with HHGear^ do
    79         begin
    82         begin
    80         Message := Message and (not gmAttack);
    83         Message := Message and (not gmAttack);
    81         State := (State or gstMoving) and (not gstWinner);
    84         State := (State or gstMoving) and (not gstWinner);
    82         end;
    85         end;
    83     DeleteGear(Gear)
    86     DeleteGear(Gear)
    84 end;
    87 end;
    85 
    88 
    86 procedure RopeWaitCollision(Gear, HHGear: PGear);
    89 procedure RopeWaitCollision(Gear, HHGear: PGear);
    87 begin
    90 begin
       
    91     PlaySound(sndRopeRelease);
       
    92     HHGear^.dX.QWordValue:= HHGear^.dX.QWordValue shr 3;
       
    93     HHGear^.dY.QWordValue:= HHGear^.dY.QWordValue shr 3;
    88     with HHGear^ do
    94     with HHGear^ do
    89         begin
    95         begin
    90         Message := Message and (not gmAttack);
    96         Message := Message and (not gmAttack);
    91         State := State or gstMoving;
    97         State := State or gstMoving;
    92         end;
    98         end;
   109     HHGear := Gear^.Hedgehog^.Gear;
   115     HHGear := Gear^.Hedgehog^.Gear;
   110 
   116 
   111     if ((HHGear^.State and gstHHDriven) = 0)
   117     if ((HHGear^.State and gstHHDriven) = 0)
   112        or (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
   118        or (CheckGearDrowning(HHGear)) or (Gear^.PortalCounter <> 0) then
   113         begin
   119         begin
   114         PlaySound(sndRopeRelease);
       
   115         RopeDeleteMe(Gear, HHGear);
   120         RopeDeleteMe(Gear, HHGear);
   116         exit
   121         exit
   117         end;
   122         end;
   118 
   123 
   119     if (Gear^.Message and gmLeft  <> 0) and (not TestCollisionXwithGear(HHGear, -1)) then
   124     if (Gear^.Message and gmLeft  <> 0) and (not TestCollisionXwithGear(HHGear, -1)) then
   321 
   326 
   322     if not haveCollision then
   327     if not haveCollision then
   323         begin
   328         begin
   324         if (Gear^.State and gsttmpFlag) <> 0 then
   329         if (Gear^.State and gsttmpFlag) <> 0 then
   325             begin
   330             begin
   326             HHGear^.dX.QWordValue:= HHGear^.dX.QWordValue shr 3;
       
   327             HHGear^.dY.QWordValue:= HHGear^.dY.QWordValue shr 3;
       
   328             
       
   329             PlaySound(sndRopeRelease);
       
   330             if Gear^.Hedgehog^.CurAmmoType <> amParachute then
   331             if Gear^.Hedgehog^.CurAmmoType <> amParachute then
   331                 RopeWaitCollision(Gear, HHGear)
   332                 RopeWaitCollision(Gear, HHGear)
   332             else
   333             else
   333                 RopeDeleteMe(Gear, HHGear)
   334                 RopeDeleteMe(Gear, HHGear)
   334             end
   335             end