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 |