hedgewars/uGearsHandlersMess.pas
changeset 12194 ac9cf0cf40ee
parent 12192 de9144250c37
child 12196 d7ccd18ae7bf
equal deleted inserted replaced
12193:71c47122fbc0 12194:ac9cf0cf40ee
  6364 
  6364 
  6365     // Duck falls (Pos = 0)
  6365     // Duck falls (Pos = 0)
  6366     if Gear^.Pos = 0 then
  6366     if Gear^.Pos = 0 then
  6367         begin
  6367         begin
  6368         doStepFallingGear(Gear);
  6368         doStepFallingGear(Gear);
  6369         // Karma is distance from water
  6369         (* Check if duck is near water surface
       
  6370            (Karma is distance from water) *)
  6370         if cWaterLine <= hwRound(Gear^.Y) + Gear^.Karma then
  6371         if cWaterLine <= hwRound(Gear^.Y) + Gear^.Karma then
  6371             begin
  6372             begin
       
  6373             PlaySound(sndDroplet2);
       
  6374             if Gear^.dY > _0_4 then
       
  6375                 PlaySound(sndDuckWater);
  6372             Gear^.Pos:= 1;
  6376             Gear^.Pos:= 1;
  6373             Gear^.Timer:= Gear^.WDTimer;
  6377             Gear^.Timer:= Gear^.WDTimer;
  6374             Gear^.dY:= _0;
  6378             Gear^.dY:= _0;
  6375             Gear^.State:= Gear^.State or gstNoGravity;
  6379             Gear^.State:= Gear^.State or gstNoGravity;
  6376             end;
  6380             end;
  6394     if WorldEdge = weSea then
  6398     if WorldEdge = weSea then
  6395         begin
  6399         begin
  6396         // Left edge
  6400         // Left edge
  6397         if (LeftX >= hwRound(Gear^.X) - Gear^.Karma) and (Gear^.Pos < 3) then
  6401         if (LeftX >= hwRound(Gear^.X) - Gear^.Karma) and (Gear^.Pos < 3) then
  6398             begin
  6402             begin
       
  6403             PlaySound(sndDuckWater);
  6399             Gear^.Pos:= 3;
  6404             Gear^.Pos:= 3;
  6400             if Gear^.Tag = 1 then
  6405             if Gear^.Tag = 1 then
  6401                 Gear^.Angle:= 90 
  6406                 Gear^.Angle:= 90 
  6402             else
  6407             else
  6403                 Gear^.Angle:= 270;
  6408                 Gear^.Angle:= 270;
  6405             Gear^.dX:= _0;
  6410             Gear^.dX:= _0;
  6406             end
  6411             end
  6407         // Right edge
  6412         // Right edge
  6408         else if (RightX <= hwRound(Gear^.X) + Gear^.Karma) and (Gear^.Pos < 3) then
  6413         else if (RightX <= hwRound(Gear^.X) + Gear^.Karma) and (Gear^.Pos < 3) then
  6409             begin
  6414             begin
       
  6415             PlaySound(sndDuckWater);
  6410             Gear^.Pos:= 4;
  6416             Gear^.Pos:= 4;
  6411         if Gear^.Tag = 1 then
  6417             if Gear^.Tag = 1 then
  6412                 Gear^.Angle:= 270
  6418                 Gear^.Angle:= 270
  6413             else
  6419             else
  6414                 Gear^.Angle:= 90;
  6420                 Gear^.Angle:= 90;
  6415             Gear^.dY:= -Gear^.dX;
  6421             Gear^.dY:= -Gear^.dX;
  6416             Gear^.dX:= _0;
  6422             Gear^.dX:= _0;
  6420     // Explode duck
  6426     // Explode duck
  6421     CheckCollision(Gear);
  6427     CheckCollision(Gear);
  6422     if (Gear^.Timer = 0) or ((Gear^.State and gstCollision) <> 0) then
  6428     if (Gear^.Timer = 0) or ((Gear^.State and gstCollision) <> 0) then
  6423         begin
  6429         begin
  6424         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
  6430         doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), Gear^.Boom, Gear^.Hedgehog, EXPLAutoSound);
       
  6431         PlaySound(sndDuckDie);
  6425         DeleteGear(Gear);
  6432         DeleteGear(Gear);
  6426         exit;
  6433         exit;
  6427         end;
  6434         end;
  6428 
  6435 
  6429     dec(Gear^.Timer);
  6436     dec(Gear^.Timer);