540 //////////////////////////////////////////////////////////////////////////////// |
540 //////////////////////////////////////////////////////////////////////////////// |
541 var BTPrevAngle, BTSteps: LongInt; |
541 var BTPrevAngle, BTSteps: LongInt; |
542 |
542 |
543 procedure doStepBlowTorchWork(Gear: PGear); |
543 procedure doStepBlowTorchWork(Gear: PGear); |
544 var HHGear: PGear; |
544 var HHGear: PGear; |
545 b: boolean; |
545 b: boolean; |
|
546 prevX: LongInt; |
546 begin |
547 begin |
547 AllInactive:= false; |
548 AllInactive:= false; |
548 dec(Gear^.Timer); |
549 dec(Gear^.Timer); |
549 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
550 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
550 |
551 |
551 HedgehogChAngle(HHGear); |
552 HedgehogChAngle(HHGear); |
552 |
553 |
553 b:= false; |
554 b:= false; |
554 |
555 |
555 if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
556 if abs(LongInt(HHGear^.Angle) - BTPrevAngle) > 7 then |
556 begin |
557 begin |
557 Gear^.dX:= SignAs(AngleSin(HHGear^.Angle) * _0_5, HHGear^.dX); |
558 Gear^.dX:= SignAs(AngleSin(HHGear^.Angle) * _0_5, HHGear^.dX); |
558 Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5); |
559 Gear^.dY:= AngleCos(HHGear^.Angle) * ( - _0_5); |
559 BTPrevAngle:= HHGear^.Angle; |
560 BTPrevAngle:= HHGear^.Angle; |
560 b:= true |
561 b:= true |
561 end; |
562 end; |
|
563 |
|
564 if ((HHGear^.State and gstMoving) <> 0) then |
|
565 begin |
|
566 doStepHedgehogMoving(HHGear); |
|
567 if (HHGear^.Damage > 0) then Gear^.Timer:= 0 |
|
568 end; |
562 |
569 |
563 if Gear^.Timer mod cHHStepTicks = 0 then |
570 if Gear^.Timer mod cHHStepTicks = 0 then |
564 begin |
571 begin |
565 b:= true; |
572 b:= true; |
566 if Gear^.dX.isNegative then HHGear^.Message:= (HHGear^.Message or gm_Left) and not gm_Right |
573 if Gear^.dX.isNegative then |
567 else HHGear^.Message:= (HHGear^.Message or gm_Right) and not gm_Left; |
574 HHGear^.Message:= (HHGear^.Message or gm_Left) and not gm_Right |
568 |
575 else |
569 HHGear^.State:= HHGear^.State and not gstAttacking; |
576 HHGear^.Message:= (HHGear^.Message or gm_Right) and not gm_Left; |
570 HedgehogStep(HHGear); |
577 |
571 HHGear^.State:= HHGear^.State or gstAttacking; |
578 if ((HHGear^.State and gstMoving) = 0) then |
572 |
579 begin |
573 inc(BTSteps); |
580 HHGear^.State:= HHGear^.State and not gstAttacking; |
574 if BTSteps = 7 then |
581 prevX:= hwRound(HHGear^.X); |
575 begin |
582 |
576 BTSteps:= 0; |
583 HedgehogStep(HHGear); |
577 Gear^.X:= HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC); |
584 |
578 Gear^.Y:= HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC); |
585 if (prevX = hwRound(HHGear^.X)) then HHGear^.X:= HHGear^.X + SignAs(_1, HHGear^.dX); |
579 HHGear^.State:= HHGear^.State or gstNoDamage; |
586 HHGear^.State:= HHGear^.State or gstAttacking |
580 AmmoShove(Gear, 2, 10); |
587 end; |
581 HHGear^.State:= HHGear^.State and not gstNoDamage |
588 |
582 end; |
589 inc(BTSteps); |
583 |
590 if BTSteps = 7 then |
584 if (HHGear^.State and gstMoving) <> 0 then Gear^.Timer:= 0 |
591 begin |
585 end; |
592 BTSteps:= 0; |
|
593 Gear^.X:= HHGear^.X + Gear^.dX * (cHHRadius + cBlowTorchC); |
|
594 Gear^.Y:= HHGear^.Y + Gear^.dY * (cHHRadius + cBlowTorchC); |
|
595 HHGear^.State:= HHGear^.State or gstNoDamage; |
|
596 AmmoShove(Gear, 2, 10); |
|
597 HHGear^.State:= HHGear^.State and not gstNoDamage |
|
598 end; |
|
599 end; |
586 |
600 |
587 if b then |
601 if b then |
588 DrawTunnel(HHGear^.X - Gear^.dX * cHHRadius, HHGear^.Y - _4 - Gear^.dY * cHHRadius + hwAbs(Gear^.dY) * 7, |
602 DrawTunnel(HHGear^.X - Gear^.dX * cHHRadius, HHGear^.Y - _4 - Gear^.dY * cHHRadius + hwAbs(Gear^.dY) * 7, |
589 Gear^.dX, Gear^.dY, |
603 Gear^.dX, Gear^.dY, |
590 cHHRadius * 5, cHHRadius * 2 + 7); |
604 cHHRadius * 5, cHHRadius * 2 + 7); |
591 |
605 |
592 if (Gear^.Timer = 0) or ((HHGear^.Message and gm_Attack) <> 0) then |
606 if (Gear^.Timer = 0) or ((HHGear^.Message and gm_Attack) <> 0) then |
593 begin |
607 begin |
594 HHGear^.Message:= 0; |
608 HHGear^.Message:= 0; |
595 DeleteGear(Gear); |
609 HHGear^.State:= HHGear^.State and (not gstNotKickable); |
596 AfterAttack |
610 DeleteGear(Gear); |
597 end |
611 AfterAttack |
|
612 end |
598 end; |
613 end; |
599 |
614 |
600 procedure doStepBlowTorch(Gear: PGear); |
615 procedure doStepBlowTorch(Gear: PGear); |
601 var HHGear: PGear; |
616 var HHGear: PGear; |
602 begin |
617 begin |
603 BTPrevAngle:= High(LongInt); |
618 BTPrevAngle:= High(LongInt); |
604 BTSteps:= 0; |
619 BTSteps:= 0; |
605 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
620 HHGear:= PHedgehog(Gear^.Hedgehog)^.Gear; |
606 HHGear^.Message:= 0; |
621 HHGear^.Message:= 0; |
|
622 HHGear^.State:= HHGear^.State or gstNotKickable; |
607 Gear^.doStep:= @doStepBlowTorchWork |
623 Gear^.doStep:= @doStepBlowTorchWork |
608 end; |
624 end; |
609 |
625 |
610 //////////////////////////////////////////////////////////////////////////////// |
626 //////////////////////////////////////////////////////////////////////////////// |
611 |
627 |