692 end; |
692 end; |
693 |
693 |
694 |
694 |
695 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
695 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
696 var valueResult, a, v1, v2: LongInt; |
696 var valueResult, a, v1, v2: LongInt; |
697 x, y: LongInt; |
697 x, y, trackFall: LongInt; |
698 dx, dy: real; |
698 dx, dy: real; |
699 begin |
699 begin |
|
700 if Me^.Hedgehog^.BotLevel < 3 then trackFall:= afTrackFall |
|
701 else trackFall:= 0; |
700 Level:= Level; // avoid compiler hint |
702 Level:= Level; // avoid compiler hint |
701 ap.ExplR:= 0; |
703 ap.ExplR:= 0; |
702 ap.Time:= 0; |
704 ap.Time:= 0; |
703 ap.Power:= 1; |
705 ap.Power:= 1; |
704 x:= hwRound(Me^.X); |
706 x:= hwRound(Me^.X); |
712 dx:= sin(a / cMaxAngle * pi) * 0.5; |
714 dx:= sin(a / cMaxAngle * pi) * 0.5; |
713 dy:= cos(a / cMaxAngle * pi) * 0.5; |
715 dy:= cos(a / cMaxAngle * pi) * 0.5; |
714 |
716 |
715 v1:= RateShove(Me, x - 10, y |
717 v1:= RateShove(Me, x - 10, y |
716 , 33, 30, 115 |
718 , 33, 30, 115 |
717 , -dx, -dy, afTrackFall); |
719 , -dx, -dy, trackFall); |
718 v2:= RateShove(Me, x + 10, y |
720 v2:= RateShove(Me, x + 10, y |
719 , 33, 30, 115 |
721 , 33, 30, 115 |
720 , dx, -dy, afTrackFall); |
722 , dx, -dy, trackFall); |
721 if (v1 > valueResult) or (v2 > valueResult) then |
723 if (v1 > valueResult) or (v2 > valueResult) then |
722 if (v2 > v1) |
724 if (v2 > v1) |
723 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
725 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
724 begin |
726 begin |
725 ap.Angle:= a; |
727 ap.Angle:= a; |
740 TestBaseballBat:= valueResult; |
742 TestBaseballBat:= valueResult; |
741 end; |
743 end; |
742 |
744 |
743 function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
745 function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
744 var valueResult, v1, v2, i: LongInt; |
746 var valueResult, v1, v2, i: LongInt; |
745 x, y: LongInt; |
747 x, y, trackFall: LongInt; |
746 begin |
748 begin |
|
749 if Me^.Hedgehog^.BotLevel = 1 then trackFall:= afTrackFall |
|
750 else trackFall:= 0; |
747 Level:= Level; // avoid compiler hint |
751 Level:= Level; // avoid compiler hint |
748 ap.ExplR:= 0; |
752 ap.ExplR:= 0; |
749 ap.Time:= 0; |
753 ap.Time:= 0; |
750 ap.Power:= 1; |
754 ap.Power:= 1; |
751 x:= hwRound(Me^.X); |
755 x:= hwRound(Me^.X); |
754 v1:= 0; |
758 v1:= 0; |
755 for i:= 0 to 8 do |
759 for i:= 0 to 8 do |
756 begin |
760 begin |
757 v1:= v1 + RateShove(Me, x - 10, y - 10 * i |
761 v1:= v1 + RateShove(Me, x - 10, y - 10 * i |
758 , 18, 30, 40 |
762 , 18, 30, 40 |
759 , -0.45, -0.9, afTrackFall or afSetSkip); |
763 , -0.45, -0.9, trackFall or afSetSkip); |
760 end; |
764 end; |
761 v1:= v1 + RateShove(Me, x - 10, y - 90 |
765 v1:= v1 + RateShove(Me, x - 10, y - 90 |
762 , 18, 30, 40 |
766 , 18, 30, 40 |
763 , -0.45, -0.9, afTrackFall); |
767 , -0.45, -0.9, trackFall); |
764 |
768 |
765 |
769 |
766 // now try opposite direction |
770 // now try opposite direction |
767 v2:= 0; |
771 v2:= 0; |
768 for i:= 0 to 8 do |
772 for i:= 0 to 8 do |
769 begin |
773 begin |
770 v2:= v2 + RateShove(Me, x + 10, y - 10 * i |
774 v2:= v2 + RateShove(Me, x + 10, y - 10 * i |
771 , 18, 30, 40 |
775 , 18, 30, 40 |
772 , 0.45, -0.9, afTrackFall or afSetSkip); |
776 , 0.45, -0.9, trackFall or afSetSkip); |
773 end; |
777 end; |
774 v2:= v2 + RateShove(Me, x + 10, y - 90 |
778 v2:= v2 + RateShove(Me, x + 10, y - 90 |
775 , 18, 30, 40 |
779 , 18, 30, 40 |
776 , 0.45, -0.9, afTrackFall); |
780 , 0.45, -0.9, trackFall); |
777 |
781 |
778 if (v2 > v1) |
782 if (v2 > v1) |
779 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
783 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
780 begin |
784 begin |
781 ap.Angle:= 1; |
785 ap.Angle:= 1; |
794 end; |
798 end; |
795 |
799 |
796 |
800 |
797 function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
801 function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt; |
798 var valueResult, v1, v2: LongInt; |
802 var valueResult, v1, v2: LongInt; |
799 x, y: LongInt; |
803 x, y, trackFall: LongInt; |
800 begin |
804 begin |
|
805 if Me^.Hedgehog^.BotLevel = 1 then trackFall:= afTrackFall |
|
806 else trackFall:= 0; |
801 Level:= Level; // avoid compiler hint |
807 Level:= Level; // avoid compiler hint |
802 ap.ExplR:= 0; |
808 ap.ExplR:= 0; |
803 ap.Time:= 0; |
809 ap.Time:= 0; |
804 ap.Power:= 1; |
810 ap.Power:= 1; |
805 x:= hwRound(Me^.X); |
811 x:= hwRound(Me^.X); |
809 {first RateShove checks farthermost of two whip's AmmoShove attacks |
815 {first RateShove checks farthermost of two whip's AmmoShove attacks |
810 to encourage distant attacks (damaged hog is excluded from view of second |
816 to encourage distant attacks (damaged hog is excluded from view of second |
811 RateShove call)} |
817 RateShove call)} |
812 v1:= RateShove(Me, x - 15, y |
818 v1:= RateShove(Me, x - 15, y |
813 , 30, 30, 25 |
819 , 30, 30, 25 |
814 , -1, -0.8, afTrackFall or afSetSkip); |
820 , -1, -0.8, trackFall or afSetSkip); |
815 v1:= v1 + |
821 v1:= v1 + |
816 RateShove(Me, x, y |
822 RateShove(Me, x, y |
817 , 30, 30, 25 |
823 , 30, 30, 25 |
818 , -1, -0.8, afTrackFall); |
824 , -1, -0.8, trackFall); |
819 // now try opposite direction |
825 // now try opposite direction |
820 v2:= RateShove(Me, x + 15, y |
826 v2:= RateShove(Me, x + 15, y |
821 , 30, 30, 25 |
827 , 30, 30, 25 |
822 , 1, -0.8, afTrackFall or afSetSkip); |
828 , 1, -0.8, trackFall or afSetSkip); |
823 v2:= v2 + |
829 v2:= v2 + |
824 RateShove(Me, x, y |
830 RateShove(Me, x, y |
825 , 30, 30, 25 |
831 , 30, 30, 25 |
826 , 1, -0.8, afTrackFall); |
832 , 1, -0.8, trackFall); |
827 |
833 |
828 if (v2 > v1) |
834 if (v2 > v1) |
829 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
835 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
830 begin |
836 begin |
831 ap.Angle:= 1; |
837 ap.Angle:= 1; |