1376 Gear^.State := Gear^.State and (not gsttmpflag); |
1376 Gear^.State := Gear^.State and (not gsttmpflag); |
1377 Gear^.doStep := @doStepRope; |
1377 Gear^.doStep := @doStepRope; |
1378 end |
1378 end |
1379 end; |
1379 end; |
1380 |
1380 |
|
1381 procedure RopeDeleteMe(Gear, HHGear: PGear); |
|
1382 begin |
|
1383 with HHGear^ do |
|
1384 begin |
|
1385 Message := Message and (not gmAttack); |
|
1386 State := (State or gstMoving) and (not gstWinner); |
|
1387 end; |
|
1388 DeleteGear(Gear) |
|
1389 end; |
|
1390 |
|
1391 procedure RopeWaitCollision(Gear, HHGear: PGear); |
|
1392 begin |
|
1393 with HHGear^ do |
|
1394 begin |
|
1395 Message := Message and (not gmAttack); |
|
1396 State := State or gstMoving; |
|
1397 end; |
|
1398 RopePoints.Count := 0; |
|
1399 Gear^.Elasticity := _0; |
|
1400 Gear^.doStep := @doStepRopeAfterAttack |
|
1401 end; |
|
1402 |
1381 procedure doStepRopeWork(Gear: PGear); |
1403 procedure doStepRopeWork(Gear: PGear); |
1382 var |
1404 var |
1383 HHGear: PGear; |
1405 HHGear: PGear; |
1384 len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat; |
1406 len, tx, ty, nx, ny, ropeDx, ropeDy, mdX, mdY: hwFloat; |
1385 lx, ly, cd: LongInt; |
1407 lx, ly, cd: LongInt; |
1386 haveCollision, |
1408 haveCollision, |
1387 haveDivided: boolean; |
1409 haveDivided: boolean; |
1388 |
1410 |
1389 procedure DeleteMe; |
|
1390 begin |
|
1391 with HHGear^ do |
|
1392 begin |
|
1393 Message := Message and (not gmAttack); |
|
1394 State := (State or gstMoving) and (not gstWinner); |
|
1395 end; |
|
1396 DeleteGear(Gear) |
|
1397 end; |
|
1398 |
|
1399 procedure WaitCollision; |
|
1400 begin |
|
1401 with HHGear^ do |
|
1402 begin |
|
1403 Message := Message and (not gmAttack); |
|
1404 State := State or gstMoving; |
|
1405 end; |
|
1406 RopePoints.Count := 0; |
|
1407 Gear^.Elasticity := _0; |
|
1408 Gear^.doStep := @doStepRopeAfterAttack |
|
1409 end; |
|
1410 |
|
1411 begin |
1411 begin |
1412 HHGear := Gear^.Hedgehog^.Gear; |
1412 HHGear := Gear^.Hedgehog^.Gear; |
1413 |
1413 |
1414 if ((HHGear^.State and gstHHDriven) = 0) |
1414 if ((HHGear^.State and gstHHDriven) = 0) |
1415 or (CheckGearDrowning(HHGear)) then |
1415 or (CheckGearDrowning(HHGear)) then |
1416 begin |
1416 begin |
1417 PlaySound(sndRopeRelease); |
1417 PlaySound(sndRopeRelease); |
1418 DeleteMe; |
1418 RopeDeleteMe(Gear, HHGear); |
1419 exit |
1419 exit |
1420 end; |
1420 end; |
1421 |
1421 |
1422 if (Gear^.Message and gmLeft <> 0) and (not TestCollisionXwithGear(HHGear, -1)) then |
1422 if (Gear^.Message and gmLeft <> 0) and (not TestCollisionXwithGear(HHGear, -1)) then |
1423 HHGear^.dX := HHGear^.dX - _0_0002; |
1423 HHGear^.dX := HHGear^.dX - _0_0002; |
1627 if (Gear^.State and gsttmpFlag) <> 0 then |
1627 if (Gear^.State and gsttmpFlag) <> 0 then |
1628 with Gear^.Hedgehog^ do |
1628 with Gear^.Hedgehog^ do |
1629 begin |
1629 begin |
1630 PlaySound(sndRopeRelease); |
1630 PlaySound(sndRopeRelease); |
1631 if CurAmmoType <> amParachute then |
1631 if CurAmmoType <> amParachute then |
1632 WaitCollision |
1632 RopeWaitCollision(Gear, HHGear) |
1633 else |
1633 else |
1634 DeleteMe |
1634 RopeDeleteMe(Gear, HHGear) |
1635 end |
1635 end |
1636 end |
1636 end |
1637 else |
1637 else |
1638 if (Gear^.State and gsttmpFlag) = 0 then |
1638 if (Gear^.State and gsttmpFlag) = 0 then |
1639 Gear^.State := Gear^.State or gsttmpFlag; |
1639 Gear^.State := Gear^.State or gsttmpFlag; |
1640 end; |
1640 end; |
1641 |
1641 |
|
1642 procedure RopeRemoveFromAmmo(Gear, HHGear: PGear); |
|
1643 begin |
|
1644 if (Gear^.State and gstAttacked) = 0 then |
|
1645 begin |
|
1646 OnUsedAmmo(HHGear^.Hedgehog^); |
|
1647 Gear^.State := Gear^.State or gstAttacked |
|
1648 end; |
|
1649 ApplyAmmoChanges(HHGear^.Hedgehog^) |
|
1650 end; |
|
1651 |
1642 procedure doStepRopeAttach(Gear: PGear); |
1652 procedure doStepRopeAttach(Gear: PGear); |
1643 var |
1653 var |
1644 HHGear: PGear; |
1654 HHGear: PGear; |
1645 tx, ty, tt: hwFloat; |
1655 tx, ty, tt: hwFloat; |
1646 |
|
1647 procedure RemoveFromAmmo; |
|
1648 begin |
|
1649 if (Gear^.State and gstAttacked) = 0 then |
|
1650 begin |
|
1651 OnUsedAmmo(HHGear^.Hedgehog^); |
|
1652 Gear^.State := Gear^.State or gstAttacked |
|
1653 end; |
|
1654 ApplyAmmoChanges(HHGear^.Hedgehog^) |
|
1655 end; |
|
1656 |
|
1657 begin |
1656 begin |
1658 Gear^.X := Gear^.X - Gear^.dX; |
1657 Gear^.X := Gear^.X - Gear^.dX; |
1659 Gear^.Y := Gear^.Y - Gear^.dY; |
1658 Gear^.Y := Gear^.Y - Gear^.dY; |
1660 Gear^.Elasticity := Gear^.Elasticity + _1; |
1659 Gear^.Elasticity := Gear^.Elasticity + _1; |
1661 |
1660 |