author | Wuzzy <Wuzzy2@mail.ru> |
Thu, 25 Jun 2020 18:13:20 +0200 | |
changeset 15659 | fd1a580a35d6 |
parent 15658 | 34c32a11203e |
child 15661 | afeffdb4a712 |
permissions | -rw-r--r-- |
71 | 1 |
(* |
1066 | 2 |
* Hedgewars, a free turn based strategy game |
11046 | 3 |
* Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com> |
71 | 4 |
* |
183 | 5 |
* This program is free software; you can redistribute it and/or modify |
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
71 | 8 |
* |
183 | 9 |
* This program is distributed in the hope that it will be useful, |
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
71 | 13 |
* |
183 | 14 |
* You should have received a copy of the GNU General Public License |
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
10097
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
71 | 17 |
*) |
18 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
4 | 21 |
unit uAIAmmoTests; |
22 |
interface |
|
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
23 |
uses uConsts, uFloat, uTypes, uAIMisc; |
8924 | 24 |
const |
9495
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
25 |
amtest_Rare = $00000001; // check only several positions |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
26 |
amtest_NoTarget = $00000002; // each pos, but no targetting |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
27 |
amtest_MultipleAttacks = $00000004; // test could result in multiple attacks, set AttacksNum |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
28 |
amtest_NoTrackFall = $00000008; // skip fall tracing. |
15658 | 29 |
amtest_LaserSight = $00000010; // supports laser sighting |
15659
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
30 |
amtest_NoVampiric = $00000020; // don't use vampirism with this ammo |
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
31 |
amtest_NoInvulnerable = $00000040; // don't use invulnerable with this with ammo |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
32 |
|
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
33 |
var windSpeed: real; |
15658 | 34 |
aiLaserSighting: boolean; |
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
35 |
|
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
36 |
type TAttackParams = record |
15625 | 37 |
Time, Bounce, AttacksNum: Longword; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
38 |
Angle, Power: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
39 |
ExplX, ExplY, ExplR: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
40 |
AttackPutX, AttackPutY: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
41 |
end; |
433 | 42 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
43 |
function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
44 |
function TestBee(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
45 |
function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
46 |
function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
47 |
function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
48 |
function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
49 |
function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
50 |
function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
51 |
function TestRCPlane(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
52 |
function TestMortar(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
53 |
function TestShotgun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
54 |
function TestDesertEagle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
55 |
function TestSniperRifle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
56 |
function TestBaseballBat(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
57 |
function TestFirePunch(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
58 |
function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
59 |
function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
60 |
function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15626 | 61 |
function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
62 |
function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15641 | 63 |
function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15630 | 64 |
function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
65 |
function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
66 |
function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
67 |
function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15640 | 68 |
function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
69 |
function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
70 |
function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15639 | 71 |
function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15636 | 72 |
function TestAirMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15642
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
73 |
function TestMinigun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
74 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
75 |
type TAmmoTestProc = function (Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
76 |
TAmmoTest = record |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
77 |
proc: TAmmoTestProc; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
78 |
flags: Longword; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
79 |
end; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
80 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
81 |
const AmmoTests: array[TAmmoType] of TAmmoTest = |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
82 |
( |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
83 |
(proc: nil; flags: 0), // amNothing |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
84 |
(proc: @TestGrenade; flags: 0), // amGrenade |
2978 | 85 |
(proc: @TestClusterBomb; flags: 0), // amClusterBomb |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
86 |
(proc: @TestBazooka; flags: 0), // amBazooka |
11474 | 87 |
(proc: @TestBee; flags: amtest_Rare), // amBee |
15658 | 88 |
(proc: @TestShotgun; flags: amtest_LaserSight), // amShotgun |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
89 |
(proc: nil; flags: 0), // amPickHammer |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
90 |
(proc: nil; flags: 0), // amSkip |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
91 |
(proc: nil; flags: 0), // amRope |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
92 |
(proc: @TestMine; flags: amtest_NoTarget), // amMine |
15658 | 93 |
(proc: @TestDesertEagle; flags: amtest_MultipleAttacks or amtest_LaserSight), // amDEagle |
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
94 |
(proc: @TestDynamite; flags: amtest_NoTarget), // amDynamite |
7178
c61cfc9eb29d
Don't make unnecessary calls to TestWhip, TestFirePunch, TestBaseballBat and TestHammer functions as they have no need to take Targ parameter into account and thus may only be called once per position
unc0rr
parents:
7161
diff
changeset
|
95 |
(proc: @TestFirePunch; flags: amtest_NoTarget), // amFirePunch |
15659
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
96 |
(proc: @TestWhip; flags: amtest_NoTarget or amtest_NoInvulnerable), // amWhip |
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
97 |
(proc: @TestBaseballBat; flags: amtest_NoTarget or amtest_NoInvulnerable), // amBaseballBat |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
98 |
(proc: nil; flags: 0), // amParachute |
7789
838d2e06c377
Check cake and air attack again if walked far from initial position (not tested)
unc0rr
parents:
7760
diff
changeset
|
99 |
(proc: @TestAirAttack; flags: amtest_Rare), // amAirAttack |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
100 |
(proc: @TestMineStrike; flags: amtest_Rare), // amMineStrike |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
101 |
(proc: nil; flags: 0), // amBlowTorch |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
102 |
(proc: nil; flags: 0), // amGirder |
3739 | 103 |
(proc: nil; flags: 0), // amTeleport |
104 |
//(proc: @TestTeleport; flags: amtest_OnTurn), // amTeleport |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
105 |
(proc: nil; flags: 0), // amSwitch |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
106 |
(proc: @TestMortar; flags: 0), // amMortar |
15659
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
107 |
(proc: @TestKamikaze; flags: amtest_LaserSight or amtest_NoInvulnerable or amtest_NoVampiric), // amKamikaze |
7789
838d2e06c377
Check cake and air attack again if walked far from initial position (not tested)
unc0rr
parents:
7760
diff
changeset
|
108 |
(proc: @TestCake; flags: amtest_Rare or amtest_NoTarget), // amCake |
15640 | 109 |
(proc: @TestSeduction; flags: amtest_NoTarget), // amSeduction |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
110 |
(proc: @TestWatermelon; flags: 0), // amWatermelon |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
111 |
(proc: nil; flags: 0), // amHellishBomb |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
112 |
(proc: nil; flags: 0), // amNapalm |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
113 |
(proc: @TestDrillRocket; flags: 0), // amDrill |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
114 |
(proc: nil; flags: 0), // amBallgun |
15658 | 115 |
(proc: @TestRCPlane; flags: amtest_LaserSight), // amRCPlane |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
116 |
(proc: nil; flags: 0), // amLowGravity |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
117 |
(proc: nil; flags: 0), // amExtraDamage |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
118 |
(proc: nil; flags: 0), // amInvulnerable |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
119 |
(proc: nil; flags: 0), // amExtraTime |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
120 |
(proc: nil; flags: 0), // amLaserSight |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
121 |
(proc: nil; flags: 0), // amVampiric |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
122 |
(proc: @TestSniperRifle; flags: 0), // amSniperRifle |
3342
b4f01613dcd7
Some initial stubs for portal just so Tiy will quit nagging. Also let folks know what approximation of physics I plan to try, here.
nemo
parents:
3236
diff
changeset
|
123 |
(proc: nil; flags: 0), // amJetpack |
3066
5c0efa437728
Enable birdy. Has egg bombing. Eggs should possibly have a dX component. No poison yet, no egg sprite.
nemo
parents:
3022
diff
changeset
|
124 |
(proc: @TestMolotov; flags: 0), // amMolotov |
3350 | 125 |
(proc: nil; flags: 0), // amBirdy |
126 |
(proc: nil; flags: 0), // amPortalGun |
|
15659
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
127 |
(proc: @TestPiano; flags: amtest_Rare or amtest_NoInvulnerable or amtest_NoVampiric), // amPiano |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
128 |
(proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
3476
1ec68b8d3bd1
Henek adds a flamethrower, updates some translations, and tweaks how fire works.
nemo
parents:
3439
diff
changeset
|
129 |
(proc: @TestShotgun; flags: 0), // amSineGun |
3710 | 130 |
(proc: nil; flags: 0), // amFlamethrower |
15641 | 131 |
(proc: @TestSMine; flags: 0), // amSMine |
15659
fd1a580a35d6
AI: Don't use vamp/invuln for kamikaze, piano and other weapons
Wuzzy <Wuzzy2@mail.ru>
parents:
15658
diff
changeset
|
132 |
(proc: @TestHammer; flags: amtest_NoTarget or amtest_NoInvulnerable), // amHammer |
4246
e5cb885492df
drillstrike! might require the drill patch to improve behavior
koda
parents:
4226
diff
changeset
|
133 |
(proc: nil; flags: 0), // amResurrector |
15626 | 134 |
(proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike |
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
135 |
(proc: nil; flags: 0), // amSnowball |
4883
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4881
diff
changeset
|
136 |
(proc: nil; flags: 0), // amTardis |
7007 | 137 |
(proc: nil; flags: 0), // amLandGun |
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7721
diff
changeset
|
138 |
(proc: nil; flags: 0), // amIceGun |
15639 | 139 |
(proc: @TestKnife; flags: 0), // amKnife |
10789
acbf69e2e5cf
experiment with air mines. thought they could make shoppa... interesting. ToDo: Allow mines to give up, tweak distances, real graphics, toggle for whether they can acquire a new target while they haven't given up.
nemo
parents:
10637
diff
changeset
|
140 |
(proc: nil; flags: 0), // amRubber |
15658 | 141 |
(proc: @TestAirMine; flags: amtest_LaserSight), // amAirMine |
13872
f01798038c2e
Rename amDuck and related symbols to amCreeper, gtCreeper, etc.
Wuzzy <Wuzzy2@mail.ru>
parents:
13671
diff
changeset
|
142 |
(proc: nil; flags: 0), // amCreeper |
15658 | 143 |
(proc: @TestMinigun; flags: amtest_LaserSight) // amMinigun |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
144 |
); |
4 | 145 |
|
146 |
implementation |
|
8959 | 147 |
uses uVariables, uUtils, uGearsHandlers; |
370
c75410fe3133
- Repair bots: they can walk and use bazooka, possible cannot jump (why?)
unc0rr
parents:
369
diff
changeset
|
148 |
|
5150
63ad8a648afd
Allow head of rope to attach to hogs/barrels/crates again. Rope still does not, to avoid the bug.
nemo
parents:
5024
diff
changeset
|
149 |
function Metric(x1, y1, x2, y2: LongInt): LongInt; inline; |
4 | 150 |
begin |
370
c75410fe3133
- Repair bots: they can walk and use bazooka, possible cannot jump (why?)
unc0rr
parents:
369
diff
changeset
|
151 |
Metric:= abs(x1 - x2) + abs(y1 - y2) |
4 | 152 |
end; |
153 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
154 |
function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
14247 | 155 |
const cExtraTime = 300; |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5150
diff
changeset
|
156 |
var Vx, Vy, r, mX, mY: real; |
498 | 157 |
rTime: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
158 |
EX, EY: LongInt; |
2695 | 159 |
valueResult: LongInt; |
13668 | 160 |
targXWrap, x, y, dX, dY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
161 |
t: LongInt; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
162 |
value: LongInt; |
4 | 163 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
164 |
Flags:= Flags; // avoid compiler hint |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5150
diff
changeset
|
165 |
mX:= hwFloat2Float(Me^.X); |
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5150
diff
changeset
|
166 |
mY:= hwFloat2Float(Me^.Y); |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
167 |
ap.Time:= 0; |
375 | 168 |
rTime:= 350; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
169 |
ap.ExplR:= 0; |
13669 | 170 |
if (WorldEdge = weWrap) then |
171 |
if (Targ.Point.X < mX) then |
|
172 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
173 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
2695 | 174 |
valueResult:= BadTurn; |
4 | 175 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
176 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13668 | 177 |
if (WorldEdge = weWrap) and (random(2)=0) then |
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
14217
diff
changeset
|
178 |
Vx:= - windSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - mX) / rTime |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
14217
diff
changeset
|
179 |
else Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) + AIrndOffset(Targ, Level) - mX) / rTime; |
8959 | 180 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime; |
6775 | 181 |
r:= sqr(Vx) + sqr(Vy); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
182 |
if not (r > 1) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
183 |
begin |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
184 |
x:= mX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
185 |
y:= mY; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
186 |
dX:= Vx; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
187 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
188 |
t:= rTime; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
189 |
repeat |
13668 | 190 |
x:= CheckWrap(x); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
191 |
x:= x + dX; |
13668 | 192 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
193 |
y:= y + dY; |
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
194 |
dX:= dX + windSpeed; |
13668 | 195 |
//dX:= CheckBounce(x,dX); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
196 |
dY:= dY + cGravityf; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
197 |
dec(t) |
8924 | 198 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
14247 | 199 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t < -cExtraTime); |
8924 | 200 |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
201 |
EX:= trunc(x); |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
202 |
EY:= trunc(y); |
14247 | 203 |
if t >= -cExtraTime then |
204 |
begin |
|
205 |
if Level = 1 then |
|
206 |
value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand) |
|
207 |
else |
|
208 |
value:= RateExplosion(Me, EX, EY, 101); |
|
209 |
end else |
|
210 |
value:= BadTurn; |
|
211 |
||
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
212 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
11476 | 213 |
if GameFlags and gfSolidLand = 0 then |
214 |
value := 1024 - Metric(Targ.Point.X, Targ.Point.Y, EX, EY) div 64 |
|
215 |
else value := BadTurn; |
|
14247 | 216 |
|
14248 | 217 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
6775 | 218 |
begin |
6894 | 219 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
6775 | 220 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
221 |
ap.ExplR:= 100; |
|
222 |
ap.ExplX:= EX; |
|
223 |
ap.ExplY:= EY; |
|
224 |
valueResult:= value |
|
225 |
end; |
|
226 |
end |
|
8903 | 227 |
until rTime > 5050 - Level * 800; |
2695 | 228 |
TestBazooka:= valueResult |
39 | 229 |
end; |
374 | 230 |
|
11474 | 231 |
function calcBeeFlight(Me: PGear; x, y, dx, dy, tX, tY: real; var eX, eY: LongInt): LongInt; |
232 |
var t: Longword; |
|
233 |
f: boolean; |
|
234 |
speed, d: real; |
|
235 |
begin |
|
236 |
// parabola flight before activation |
|
237 |
t:= 500; |
|
238 |
repeat |
|
239 |
x:= x + dx; |
|
240 |
y:= y + dy; |
|
241 |
dy:= dy + cGravityf; |
|
242 |
f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
|
243 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5)); |
|
244 |
dec(t) |
|
245 |
until (t = 0) or (y >= cWaterLine) or f; |
|
246 |
||
247 |
if f then |
|
248 |
begin |
|
249 |
eX:= trunc(x); |
|
250 |
eY:= trunc(y); |
|
251 |
exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand)); |
|
252 |
end; |
|
11475 | 253 |
|
254 |
||
11474 | 255 |
// activated |
256 |
t:= 5000; |
|
11475 | 257 |
speed:= sqrt(sqr(dx) + sqr(dy)); |
258 |
||
11474 | 259 |
repeat |
260 |
if (t and $F) = 0 then |
|
261 |
begin |
|
11475 | 262 |
dx:= dx + 0.000064 * (tX - x); |
263 |
dy:= dy + 0.000064 * (tY - y); |
|
11474 | 264 |
d := speed / sqrt(sqr(dx) + sqr(dy)); |
265 |
dx:= dx * d; |
|
266 |
dy:= dy * d; |
|
11475 | 267 |
end; |
11474 | 268 |
|
269 |
x:= x + dx; |
|
270 |
y:= y + dy; |
|
271 |
f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
|
272 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5)); |
|
273 |
dec(t) |
|
274 |
until (t = 0) or f; |
|
275 |
||
276 |
if f then |
|
277 |
begin |
|
278 |
eX:= trunc(x); |
|
279 |
eY:= trunc(y); |
|
280 |
exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand)); |
|
281 |
end |
|
282 |
else |
|
283 |
calcBeeFlight:= BadTurn |
|
284 |
end; |
|
285 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
286 |
function TestBee(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
11474 | 287 |
var i, j: LongInt; |
11475 | 288 |
valueResult, v, a, p: LongInt; |
12621 | 289 |
mX, mY: real; |
11474 | 290 |
eX, eY: LongInt; |
291 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
292 |
Flags:= Flags; // avoid compiler hint |
11475 | 293 |
if Level > 1 then |
11474 | 294 |
exit(BadTurn); |
11475 | 295 |
|
11474 | 296 |
eX:= 0; |
297 |
eY:= 0; |
|
298 |
mX:= hwFloat2Float(Me^.X); |
|
299 |
mY:= hwFloat2Float(Me^.Y); |
|
300 |
valueResult:= BadTurn; |
|
301 |
for i:= 0 to 8 do |
|
302 |
for j:= 0 to 1 do |
|
303 |
begin |
|
11475 | 304 |
a:= i * 120; |
305 |
p:= random(cMaxPower - 200) + 180; |
|
306 |
||
307 |
if j = 0 then |
|
308 |
a:= -a; |
|
309 |
||
11474 | 310 |
v:= calcBeeFlight(Me |
311 |
, mX |
|
312 |
, mY |
|
11475 | 313 |
, sin(a * pi / 2048) * p / cPowerDivisor |
314 |
, -cos(a * pi / 2048) * p / cPowerDivisor |
|
11474 | 315 |
, Targ.Point.X |
316 |
, Targ.Point.Y |
|
317 |
, eX |
|
318 |
, eY); |
|
11475 | 319 |
|
11474 | 320 |
if v > valueResult then |
321 |
begin |
|
322 |
ap.ExplR:= 100; |
|
323 |
ap.ExplX:= eX; |
|
324 |
ap.ExplY:= eY; |
|
11475 | 325 |
ap.Angle:= a; |
326 |
ap.Power:= p; |
|
11474 | 327 |
valueResult:= v |
328 |
end |
|
329 |
end; |
|
330 |
||
331 |
ap.AttackPutX:= Targ.Point.X; |
|
332 |
ap.AttackPutY:= Targ.Point.Y; |
|
333 |
||
11475 | 334 |
if valueResult > 0 then |
335 |
TestBee:= valueResult - 5000 |
|
336 |
else |
|
337 |
TestBee:= BadTurn // no digging |
|
11474 | 338 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
339 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
340 |
function TestDrillRocket(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
341 |
var Vx, Vy, r, mX, mY: real; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
342 |
rTime: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
343 |
EX, EY: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
344 |
valueResult: LongInt; |
13669 | 345 |
targXWrap, x, y, dX, dY: real; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
346 |
t: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
347 |
value: LongInt; |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
348 |
t2: real; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
349 |
timer: Longint; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
350 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
351 |
Flags:= Flags; // avoid compiler hint |
8822
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8777
diff
changeset
|
352 |
if (Level > 3) then exit(BadTurn); |
fc9877ff7f1a
Don't reward digging close w/ drill rocket. Doesn't offer much benefit. Reduce final bonus slightly to avoid using drill like bazooka. Better would be AI doing this for all weps based on count. Make main drill loop a little more efficient.
nemo
parents:
8777
diff
changeset
|
353 |
|
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
354 |
mX:= hwFloat2Float(Me^.X); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
355 |
mY:= hwFloat2Float(Me^.Y); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
356 |
ap.Time:= 0; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
357 |
rTime:= 350; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
358 |
ap.ExplR:= 0; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
359 |
valueResult:= BadTurn; |
13669 | 360 |
if (WorldEdge = weWrap) then |
361 |
if (Targ.Point.X < mX) then |
|
362 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
363 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
10637 | 364 |
timer:= 0; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
365 |
repeat |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
366 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13669 | 367 |
if (WorldEdge = weWrap) and (random(2)=0) then |
368 |
Vx:= - windSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) - mX) / rTime |
|
369 |
else Vx:= - windSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime; |
|
8959 | 370 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y - 35 - mY) / rTime; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
371 |
r:= sqr(Vx) + sqr(Vy); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
372 |
if not (r > 1) then |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
373 |
begin |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
374 |
x:= mX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
375 |
y:= mY; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
376 |
dX:= Vx; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
377 |
dY:= -Vy; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
378 |
t:= rTime; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
379 |
repeat |
13669 | 380 |
x:= CheckWrap(x); |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
381 |
x:= x + dX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
382 |
y:= y + dY; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
383 |
dX:= dX + windSpeed; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
384 |
dY:= dY + cGravityf; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
385 |
dec(t) |
8924 | 386 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 387 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (y > cWaterLine); |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
388 |
|
8959 | 389 |
if TestCollExcludingObjects(trunc(x), trunc(y), 5) and (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) > 21) then |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
390 |
begin |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
391 |
timer := 500; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
392 |
t2 := 0.5 / sqrt(sqr(dX) + sqr(dY)); |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
393 |
dX := dX * t2; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
394 |
dY := dY * t2; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
395 |
repeat |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
396 |
x:= x + dX; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
397 |
y:= y + dY; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
398 |
dec(timer); |
8959 | 399 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 22) |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
400 |
or (x < 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
401 |
or (y < 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
402 |
or (trunc(x) > LAND_WIDTH) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
403 |
or (trunc(y) > LAND_HEIGHT) |
9136 | 404 |
or (not TestCollExcludingObjects(trunc(x), trunc(y), 5)) |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
405 |
or (timer = 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
406 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
407 |
EX:= trunc(x); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
408 |
EY:= trunc(y); |
8862 | 409 |
// Try to prevent AI from thinking firing into water will cause a drowning |
10637 | 410 |
if (EY < cWaterLine-5) and (timer > 0) and (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) > 21) then exit(BadTurn); |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
411 |
if Level = 1 then |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
412 |
value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand) |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
413 |
else value:= RateExplosion(Me, EX, EY, 101); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
414 |
if valueResult <= value then |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
415 |
begin |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
416 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
417 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
418 |
ap.ExplR:= 100; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
419 |
ap.ExplX:= EX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
420 |
ap.ExplY:= EY; |
8824
fe9eacd390f2
Unbreak lua localisation, fix untranslated login prompt, update translations.
nemo
parents:
8822
diff
changeset
|
421 |
valueResult:= value-2500 // trying to make it slightly less attractive than a bazooka, to prevent waste. AI could use awareness of weapon count |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
422 |
end; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
423 |
end |
8903 | 424 |
until rTime > 5050 - Level * 800; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
425 |
TestDrillRocket:= valueResult |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
426 |
end; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
427 |
|
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
428 |
function TestRCPlane(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
429 |
const |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
430 |
MIN_RANGE = 200; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
431 |
var Vx, Vy, meX, meY, x, y: real; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
432 |
rx, ry, valueResult: LongInt; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
433 |
range, maxRange: integer; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
434 |
begin |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
435 |
// This is a very simple test to let a RC plane fly in a straight line, without dropping any bombs |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
436 |
// TODO: Teach AI how to steer |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
437 |
// TODO: Teach AI how to drop bombs |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
438 |
// TODO: Teach AI how to predict fire behavior |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
439 |
Flags:= Flags; // avoid compiler hint |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
440 |
if Level = 5 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
441 |
exit(BadTurn) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
442 |
else if Level = 4 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
443 |
maxRange:= 2200 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
444 |
else if Level = 3 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
445 |
maxRange:= 2900 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
446 |
else if Level = 2 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
447 |
maxRange:= 3500 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
448 |
else |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
449 |
maxRange:= 3900; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
450 |
TestRCPlane:= BadTurn; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
451 |
ap.ExplR:= 0; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
452 |
ap.Time:= 0; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
453 |
ap.Power:= 1; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
454 |
meX:= hwFloat2Float(Me^.X); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
455 |
meY:= hwFloat2Float(Me^.Y); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
456 |
x:= meX; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
457 |
y:= meY; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
458 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
459 |
if ( range < MIN_RANGE ) or ( range > maxRange) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
460 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
461 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
462 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
463 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
464 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
465 |
repeat |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
466 |
x:= x + vX; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
467 |
y:= y + vY; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
468 |
rx:= trunc(x); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
469 |
ry:= trunc(y); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
470 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 8)) or |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
471 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 8)) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
472 |
begin |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
473 |
x:= x + vX * 8; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
474 |
y:= y + vY * 8; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
475 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
476 |
// Intentionally low rating to discourage use |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
477 |
if Level = 1 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
478 |
valueResult:= RateExplosion(Me, rx, ry, 26, afTrackFall or afErasesLand) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
479 |
else |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
480 |
valueResult:= RateExplosion(Me, rx, ry, 26); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
481 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
482 |
// Check range again in case the plane collided before target |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
483 |
range:= Metric(trunc(meX), trunc(meY), rx, ry); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
484 |
if ( range < MIN_RANGE ) or ( range > maxRange) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
485 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
486 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
487 |
// If impact location is close, above us and wind blows in our direction, |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
488 |
// there's a risk of fire flying towards us, so fail in this case. |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
489 |
if (Level < 3) and (range <= 600) and (meY >= ry) and |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
490 |
(((ap.Angle < 0) and (windSpeed > 0)) or ((ap.Angle > 0) and (windSpeed < 0))) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
491 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
492 |
|
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
493 |
// Apply inaccuracy |
15658 | 494 |
if (not aiLaserSighting) then |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
495 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 9))); |
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
496 |
|
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
497 |
if (valueResult <= 0) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
498 |
valueResult:= BadTurn; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
499 |
exit(valueResult) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
500 |
end |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
501 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
502 |
or (x < 0) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
503 |
or (y < 0) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
504 |
or (trunc(x) > LAND_WIDTH) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
505 |
or (trunc(y) > LAND_HEIGHT); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
506 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
507 |
TestRCPlane:= BadTurn |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
508 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
509 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
510 |
function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
6775 | 511 |
var Vx, Vy, r: real; |
4580 | 512 |
rTime: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
513 |
EX, EY: LongInt; |
4580 | 514 |
valueResult: LongInt; |
13669 | 515 |
targXWrap, x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
516 |
t: LongInt; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
517 |
value: LongInt; |
4580 | 518 |
|
519 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
520 |
Flags:= Flags; // avoid compiler hint |
6775 | 521 |
meX:= hwFloat2Float(Me^.X); |
522 |
meY:= hwFloat2Float(Me^.Y); |
|
4580 | 523 |
ap.Time:= 0; |
524 |
rTime:= 350; |
|
525 |
ap.ExplR:= 0; |
|
526 |
valueResult:= BadTurn; |
|
13669 | 527 |
if (WorldEdge = weWrap) then |
528 |
if (Targ.Point.X < meX) then |
|
529 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
530 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
4580 | 531 |
repeat |
6775 | 532 |
rTime:= rTime + 300 + Level * 50 + random(1000); |
13669 | 533 |
if (WorldEdge = weWrap) and (random(2)=0) then |
534 |
Vx:= - windSpeed * rTime * 0.5 + ((targXWrap + AIrndSign(2)) - meX) / rTime |
|
535 |
else Vx:= - windSpeed * rTime * 0.5 + ((Targ.Point.X + AIrndSign(2)) - meX) / rTime; |
|
8959 | 536 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y - meY) / rTime; |
6775 | 537 |
r:= sqr(Vx) + sqr(Vy); |
538 |
if not (r > 1) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
539 |
begin |
6775 | 540 |
x:= meX; |
541 |
y:= meY; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
542 |
dX:= Vx; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
543 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
544 |
t:= rTime; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
545 |
repeat |
13669 | 546 |
x:= CheckWrap(x); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
547 |
x:= x + dX; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
548 |
y:= y + dY; |
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
549 |
dX:= dX + windSpeed; |
6775 | 550 |
dY:= dY + cGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
551 |
dec(t) |
8924 | 552 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 553 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t <= 0); |
6775 | 554 |
EX:= trunc(x); |
555 |
EY:= trunc(y); |
|
556 |
||
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
557 |
value:= RateShove(Me, trunc(x), trunc(y), 5, 1, trunc((abs(dX)+abs(dY))*20), -dX, -dY, afTrackFall); |
8013 | 558 |
// LOL copypasta: this is score for digging with... snowball |
559 |
//if value = 0 then |
|
8959 | 560 |
// value:= - Metric(Targ.Point.X, Targ.Point.Y, EX, EY) div 64; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
561 |
|
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
562 |
if valueResult <= value then |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
563 |
begin |
6894 | 564 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
6775 | 565 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
566 |
ap.ExplR:= 0; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
567 |
ap.ExplX:= EX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
568 |
ap.ExplY:= EY; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
569 |
valueResult:= value |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
570 |
end; |
4580 | 571 |
end |
8903 | 572 |
until (rTime > 5050 - Level * 800); |
4580 | 573 |
TestSnowball:= valueResult |
574 |
end; |
|
575 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
576 |
function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15635 | 577 |
const timeLimit = 50; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
578 |
Density : real = 2.0; |
15635 | 579 |
var Vx, Vy, r, meX, meY: real; |
580 |
rTime: LongInt; |
|
581 |
EX, EY: LongInt; |
|
582 |
valueResult: LongInt; |
|
583 |
targXWrap, x, y, dX, dY: real; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
584 |
t: LongInt; |
15635 | 585 |
value, range: LongInt; |
3018
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
586 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
587 |
Flags:= Flags; // avoid compiler hint |
6775 | 588 |
meX:= hwFloat2Float(Me^.X); |
589 |
meY:= hwFloat2Float(Me^.Y); |
|
15635 | 590 |
ap.Time:= 0; |
591 |
rTime:= 350; |
|
3018
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
592 |
ap.ExplR:= 0; |
13669 | 593 |
if (WorldEdge = weWrap) then |
594 |
if (Targ.Point.X < meX) then |
|
595 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
596 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
15635 | 597 |
valueResult:= BadTurn; |
3018
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
598 |
repeat |
15635 | 599 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13669 | 600 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15635 | 601 |
Vx:= (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime |
602 |
else |
|
603 |
Vx:= (Targ.Point.X + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
604 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
605 |
Vx:= -(windSpeed / Density) * rTime * 0.5 + Vx; |
15635 | 606 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
6775 | 607 |
r:= sqr(Vx) + sqr(Vy); |
15635 | 608 |
|
6775 | 609 |
if not (r > 1) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
610 |
begin |
6775 | 611 |
x:= meX; |
612 |
y:= meY; |
|
15635 | 613 |
dX:= Vx; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
614 |
dY:= -Vy; |
15635 | 615 |
t:= rTime; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
616 |
repeat |
13669 | 617 |
x:= CheckWrap(x); |
15635 | 618 |
x:= x + dX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
619 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
620 |
dX:= dX + windSpeed / Density; |
15635 | 621 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
622 |
y:= y + dY; |
6775 | 623 |
dY:= dY + cGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
624 |
dec(t) |
15635 | 625 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
626 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t < -timeLimit); |
|
627 |
||
6775 | 628 |
EX:= trunc(x); |
629 |
EY:= trunc(y); |
|
15635 | 630 |
|
631 |
// Sanity check 1: Make sure we're not too close to impact location |
|
632 |
range:= Metric(trunc(meX), trunc(meY), EX, EY); |
|
633 |
if (range < 150) and (Level < 5) then |
|
634 |
exit(BadTurn); |
|
635 |
||
636 |
// Sanity check 2: If impact location is close, above us and wind blows |
|
637 |
// towards us, there's a risk of fire flying towards us, so fail in this case. |
|
638 |
if (Level < 3) and (range <= 600) and (trunc(meY) >= EX) and |
|
639 |
(((ap.Angle < 0) and (windSpeed > 0)) or ((ap.Angle > 0) and (windSpeed < 0))) then |
|
640 |
exit(BadTurn); |
|
8924 | 641 |
|
15635 | 642 |
if t >= -timeLimit then |
643 |
value:= RateExplosion(Me, EX, EY, 97) // average of 17 attempts, most good, but some failing spectacularly |
|
644 |
else |
|
645 |
value:= BadTurn; |
|
646 |
||
647 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
648 |
value := BadTurn; |
|
649 |
||
650 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
651 |
begin |
15635 | 652 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
653 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
654 |
ap.ExplR:= 100; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
655 |
ap.ExplX:= EX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
656 |
ap.ExplY:= EY; |
15635 | 657 |
valueResult:= value |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
658 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
659 |
end |
15635 | 660 |
until rTime > 5050 - Level * 800; |
3018
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
661 |
TestMolotov:= valueResult |
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
662 |
end; |
13ceaad4767e
Adjust tests for cluster and watermelon, add molotov, assign FP test to whip, try to keep AI from attempting fire walking.
nemo
parents:
2978
diff
changeset
|
663 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
664 |
function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
70 | 665 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
666 |
Density : real = 1.5; |
6775 | 667 |
var Vx, Vy, r: real; |
2695 | 668 |
Score, EX, EY, valueResult: LongInt; |
9145 | 669 |
TestTime: LongInt; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
670 |
targXWrap, x, y, meX, meY, dX, dY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
671 |
t: LongInt; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
672 |
begin |
2695 | 673 |
valueResult:= BadTurn; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
674 |
TestTime:= 0; |
15625 | 675 |
ap.Bounce:= 0; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
676 |
ap.ExplR:= 0; |
6775 | 677 |
meX:= hwFloat2Float(Me^.X); |
678 |
meY:= hwFloat2Float(Me^.Y); |
|
13669 | 679 |
if (WorldEdge = weWrap) then |
680 |
if (Targ.Point.X < meX) then |
|
681 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
682 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
683 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
684 |
inc(TestTime, 1000); |
13669 | 685 |
if (WorldEdge = weWrap) and (random(2)=0) then |
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
14217
diff
changeset
|
686 |
Vx:= (targXWrap + AIrndOffset(Targ, Level) - meX) / (TestTime + tDelta) |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
687 |
else |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
688 |
Vx:= (Targ.Point.X + AIrndOffset(Targ, Level) - meX) / (TestTime + tDelta); |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
689 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
690 |
Vx:= -(windSpeed / Density) * (TestTime + tDelta) * 0.5 + Vx; |
8959 | 691 |
Vy:= cGravityf * ((TestTime + tDelta) div 2) - (Targ.Point.Y - meY) / (TestTime + tDelta); |
6775 | 692 |
r:= sqr(Vx) + sqr(Vy); |
693 |
if not (r > 1) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
694 |
begin |
6775 | 695 |
x:= meX; |
8924 | 696 |
y:= meY; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
697 |
dX:= Vx; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
698 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
699 |
t:= TestTime; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
700 |
repeat |
13669 | 701 |
x:= CheckWrap(x); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
702 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
703 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
704 |
dX:= dX + windSpeed / Density; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
705 |
y:= y + dY; |
6775 | 706 |
dY:= dY + cGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
707 |
dec(t) |
8924 | 708 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 709 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0); |
6775 | 710 |
EX:= trunc(x); |
711 |
EY:= trunc(y); |
|
8924 | 712 |
if t < 50 then |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
713 |
if (Level = 1) and (Flags and amtest_NoTrackFall = 0) then |
7161
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
714 |
Score:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand) |
6769
44ad49a3a126
Add drowning to grenade too, try some little optimisations
nemo
parents:
6767
diff
changeset
|
715 |
else Score:= RateExplosion(Me, EX, EY, 101) |
8924 | 716 |
else |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
717 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
718 |
|
8013 | 719 |
if (valueResult < Score) and (Score > 0) then |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
720 |
begin |
8903 | 721 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 3)); |
722 |
ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 20); |
|
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
723 |
ap.Time:= TestTime; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
724 |
ap.ExplR:= 100; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
725 |
ap.ExplX:= EX; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
726 |
ap.ExplY:= EY; |
2695 | 727 |
valueResult:= Score |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
728 |
end; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
729 |
end |
6772 | 730 |
//until (Score > 204800) or (TestTime > 4000); |
8903 | 731 |
until TestTime > 4500 - Level * 512; |
2695 | 732 |
TestGrenade:= valueResult |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
733 |
end; |
375 | 734 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
735 |
function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2978 | 736 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
737 |
Density : real = 1.5; |
6775 | 738 |
var Vx, Vy, r: real; |
2978 | 739 |
Score, EX, EY, valueResult: LongInt; |
740 |
TestTime: Longword; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
741 |
x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
742 |
t: LongInt; |
2978 | 743 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
744 |
Flags:= Flags; // avoid compiler hint |
2978 | 745 |
valueResult:= BadTurn; |
7441 | 746 |
TestTime:= 500; |
15625 | 747 |
ap.Bounce:= 0; |
2978 | 748 |
ap.ExplR:= 0; |
6775 | 749 |
meX:= hwFloat2Float(Me^.X); |
750 |
meY:= hwFloat2Float(Me^.Y); |
|
2978 | 751 |
repeat |
7441 | 752 |
inc(TestTime, 900); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
753 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
754 |
Vx:= (-(windSpeed / Density) * (TestTime + tDelta) * 0.5) + ((Targ.Point.X - meX) / (TestTime + tDelta)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
755 |
// Try to overshoot slightly, seems to pay slightly better dividends in terms of hitting cluster |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
756 |
else if meX<Targ.Point.X then |
8959 | 757 |
Vx:= ((Targ.Point.X+10) - meX) / (TestTime + tDelta) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
758 |
else |
8959 | 759 |
Vx:= ((Targ.Point.X-10) - meX) / (TestTime + tDelta); |
760 |
Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta); |
|
6775 | 761 |
r:= sqr(Vx)+sqr(Vy); |
762 |
if not (r > 1) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
763 |
begin |
6775 | 764 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
765 |
dX:= Vx; |
6775 | 766 |
y:= meY; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
767 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
768 |
t:= TestTime; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
769 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
770 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
771 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
772 |
dX:= dX + windSpeed / Density; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
773 |
y:= y + dY; |
6775 | 774 |
dY:= dY + cGravityf; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
775 |
dec(t) |
8924 | 776 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 777 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0); |
6775 | 778 |
EX:= trunc(x); |
779 |
EY:= trunc(y); |
|
8924 | 780 |
if t < 50 then |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
781 |
Score:= RateExplosion(Me, EX, EY, 41) |
8924 | 782 |
else |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
783 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
784 |
|
8974
d360e97ce842
I don't see how rating these against others is useful, given the limited radius, and the cluster bomb thing just seems counterproductive. Anyway, this prevents AI from picking on barrels.
nemo
parents:
8971
diff
changeset
|
785 |
if Score > 0 then |
2978 | 786 |
begin |
8903 | 787 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 2)); |
7132 | 788 |
ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15); |
7441 | 789 |
ap.Time:= TestTime div 1000 * 1000; |
2978 | 790 |
ap.ExplR:= 90; |
791 |
ap.ExplX:= EX; |
|
792 |
ap.ExplY:= EY; |
|
793 |
valueResult:= Score |
|
794 |
end; |
|
795 |
end |
|
7441 | 796 |
until (TestTime = 4100); |
2978 | 797 |
TestClusterBomb:= valueResult |
798 |
end; |
|
799 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
800 |
function TestWatermelon(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
801 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
802 |
Density : real = 2.0; |
6775 | 803 |
var Vx, Vy, r: real; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
804 |
Score, EX, EY, valueResult: LongInt; |
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
805 |
TestTime: Longword; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
806 |
targXWrap, x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
807 |
t: LongInt; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
808 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
809 |
Flags:= Flags; // avoid compiler hint |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
810 |
valueResult:= BadTurn; |
7441 | 811 |
TestTime:= 500; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
812 |
ap.ExplR:= 0; |
6775 | 813 |
meX:= hwFloat2Float(Me^.X); |
814 |
meY:= hwFloat2Float(Me^.Y); |
|
13671 | 815 |
if (WorldEdge = weWrap) then |
816 |
if (Targ.Point.X < meX) then |
|
817 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
818 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
819 |
repeat |
7441 | 820 |
inc(TestTime, 900); |
13671 | 821 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
822 |
Vx:= (targXWrap - meX) / (TestTime + tDelta) |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
823 |
else |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
824 |
Vx:= (Targ.Point.X - meX) / (TestTime + tDelta); |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
825 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
826 |
Vx:= -(windSpeed / Density) * (TestTime + tDelta) * 0.5 + Vx; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
827 |
|
8959 | 828 |
Vy:= cGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta); |
6775 | 829 |
r:= sqr(Vx)+sqr(Vy); |
830 |
if not (r > 1) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
831 |
begin |
6775 | 832 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
833 |
dX:= Vx; |
6775 | 834 |
y:= meY; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
835 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
836 |
t:= TestTime; |
7132 | 837 |
repeat |
13671 | 838 |
x:= CheckWrap(x); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
839 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
840 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
841 |
dX:= dX + windSpeed / Density; |
7132 | 842 |
y:= y + dY; |
843 |
dY:= dY + cGravityf; |
|
844 |
dec(t) |
|
8924 | 845 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or |
8895 | 846 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 6))) or (t = 0); |
8924 | 847 |
|
7132 | 848 |
EX:= trunc(x); |
849 |
EY:= trunc(y); |
|
8924 | 850 |
if t < 50 then |
7132 | 851 |
Score:= RateExplosion(Me, EX, EY, 200) + RateExplosion(Me, EX, EY + 120, 200) |
8924 | 852 |
else |
7132 | 853 |
Score:= BadTurn; |
8924 | 854 |
|
7132 | 855 |
if valueResult < Score then |
856 |
begin |
|
857 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level)); |
|
858 |
ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15); |
|
7441 | 859 |
ap.Time:= TestTime div 1000 * 1000; |
7132 | 860 |
ap.ExplR:= 300; |
861 |
ap.ExplX:= EX; |
|
862 |
ap.ExplY:= EY; |
|
863 |
valueResult:= Score |
|
864 |
end; |
|
865 |
end |
|
7441 | 866 |
until (TestTime = 4100); |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
867 |
TestWatermelon:= valueResult |
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
868 |
end; |
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
869 |
|
994 | 870 |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
871 |
function Solve(TX, TY, MX, MY: LongInt): LongWord; |
6775 | 872 |
var A, B, D, T: real; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
873 |
C: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
874 |
begin |
7132 | 875 |
A:= sqr(cGravityf); |
6775 | 876 |
B:= - cGravityf * (TY - MY) - 1; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
877 |
C:= sqr(TY - MY) + sqr(TX - MX); |
7132 | 878 |
D:= sqr(B) - A * C; |
6775 | 879 |
if D >= 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
880 |
begin |
7132 | 881 |
D:= sqrt(D) - B; |
6775 | 882 |
if D >= 0 then |
7132 | 883 |
T:= sqrt(D * 2 / A) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
884 |
else |
6775 | 885 |
T:= 0; |
886 |
Solve:= trunc(T) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
887 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
888 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
889 |
Solve:= 0 |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
890 |
end; |
8924 | 891 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
892 |
function TestMortar(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
893 |
const Density : real = 1.0; |
6775 | 894 |
var Vx, Vy: real; |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
895 |
Score, EX, EY: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
896 |
TestTime: Longword; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
897 |
x, y, dX, dY, meX, meY: real; |
994 | 898 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
899 |
Flags:= Flags; // avoid compiler hint |
7041 | 900 |
TestMortar:= BadTurn; |
901 |
ap.ExplR:= 0; |
|
7790 | 902 |
|
7041 | 903 |
meX:= hwFloat2Float(Me^.X); |
904 |
meY:= hwFloat2Float(Me^.Y); |
|
994 | 905 |
|
7041 | 906 |
if (Level > 2) then |
907 |
exit(BadTurn); |
|
994 | 908 |
|
8959 | 909 |
TestTime:= Solve(Targ.Point.X, Targ.Point.Y, trunc(meX), trunc(meY)); |
994 | 910 |
|
7041 | 911 |
if TestTime = 0 then |
912 |
exit(BadTurn); |
|
994 | 913 |
|
8959 | 914 |
Vx:= (Targ.Point.X - meX) / TestTime; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
915 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
916 |
Vx:= -(windSpeed / Density) * TestTime * 0.5 + Vx; |
8959 | 917 |
Vy:= cGravityf * (TestTime div 2) - (Targ.Point.Y - meY) / TestTime; |
994 | 918 |
|
6775 | 919 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
920 |
dX:= Vx; |
6775 | 921 |
y:= meY; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
922 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
923 |
|
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
924 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
925 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
926 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
927 |
dX:= dX + windSpeed / Density; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
928 |
y:= y + dY; |
6775 | 929 |
dY:= dY + cGravityf; |
930 |
EX:= trunc(x); |
|
931 |
EY:= trunc(y); |
|
8924 | 932 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(EX, EY, 4)) or |
8895 | 933 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, EX, EY, 4))) or (EY > cWaterLine); |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
934 |
|
6775 | 935 |
if (EY < cWaterLine) and (dY >= 0) then |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
936 |
begin |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
937 |
Score:= RateExplosion(Me, EX, EY, 91); |
9005 | 938 |
if (Score = 0) then |
939 |
if (dY > 0.15) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
8959 | 940 |
Score:= - abs(Targ.Point.Y - EY) div 32 |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
941 |
else |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
942 |
Score:= BadTurn |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
943 |
else if (Score < 0) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
944 |
Score:= BadTurn |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
945 |
end |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
946 |
else |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
947 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
948 |
|
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
949 |
if Score > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
950 |
begin |
6894 | 951 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
952 |
ap.Power:= 1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
953 |
ap.ExplR:= 100; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
954 |
ap.ExplX:= EX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
955 |
ap.ExplY:= EY; |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
956 |
TestMortar:= Score |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
957 |
end; |
994 | 958 |
end; |
959 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
960 |
function TestShotgun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1941 | 961 |
const |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
962 |
MIN_RANGE = 80; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
963 |
MAX_RANGE = 400; |
6775 | 964 |
var Vx, Vy, x, y: real; |
2695 | 965 |
rx, ry, valueResult: LongInt; |
1941 | 966 |
range: integer; |
375 | 967 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
968 |
Flags:= Flags; // avoid compiler hint |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
969 |
TestShotgun:= BadTurn; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
970 |
ap.ExplR:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
971 |
ap.Time:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
972 |
ap.Power:= 1; |
6775 | 973 |
x:= hwFloat2Float(Me^.X); |
974 |
y:= hwFloat2Float(Me^.Y); |
|
8959 | 975 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
976 |
if ( range < MIN_RANGE ) or ( range > MAX_RANGE ) then |
7041 | 977 |
exit(BadTurn); |
978 |
||
8959 | 979 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
980 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
|
6894 | 981 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
982 |
// Apply inaccuracy |
15658 | 983 |
if (not aiLaserSighting) then |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
984 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 10))); |
70 | 985 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
986 |
x:= x + vX; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
987 |
y:= y + vY; |
6775 | 988 |
rx:= trunc(x); |
989 |
ry:= trunc(y); |
|
8924 | 990 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 2)) or |
8895 | 991 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 2)) then |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
992 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
993 |
x:= x + vX * 8; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
994 |
y:= y + vY * 8; |
6775 | 995 |
valueResult:= RateShotgun(Me, vX, vY, rx, ry); |
8924 | 996 |
|
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
997 |
if (valueResult = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
11476 | 998 |
begin |
999 |
if GameFlags and gfSolidLand = 0 then |
|
1000 |
valueResult:= 1024 - Metric(Targ.Point.X, Targ.Point.Y, rx, ry) div 64 |
|
1001 |
else valueResult := BadTurn |
|
1002 |
end |
|
8924 | 1003 |
else |
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
1004 |
dec(valueResult, Level * 4000); |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6894
diff
changeset
|
1005 |
// 27/20 is reuse bonus |
7041 | 1006 |
exit(valueResult * 27 div 20) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1007 |
end |
8959 | 1008 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
6775 | 1009 |
or (x < 0) |
1010 |
or (y < 0) |
|
1011 |
or (trunc(x) > LAND_WIDTH) |
|
1012 |
or (trunc(y) > LAND_HEIGHT); |
|
4157 | 1013 |
|
375 | 1014 |
TestShotgun:= BadTurn |
70 | 1015 |
end; |
438 | 1016 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1017 |
function TestDesertEagle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8959
diff
changeset
|
1018 |
var Vx, Vy, x, y, t: real; |
75 | 1019 |
d: Longword; |
10097 | 1020 |
ix, iy, valueResult: LongInt; |
75 | 1021 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1022 |
Flags:= Flags; // avoid compiler hint |
8974
d360e97ce842
I don't see how rating these against others is useful, given the limited radius, and the cluster bomb thing just seems counterproductive. Anyway, this prevents AI from picking on barrels.
nemo
parents:
8971
diff
changeset
|
1023 |
if (Level > 4) or (Targ.Score < 0) or (Targ.Kind <> gtHedgehog) then exit(BadTurn); |
3407 | 1024 |
Level:= Level; // avoid compiler hint |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8950
diff
changeset
|
1025 |
ap.ExplR:= 1; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1026 |
ap.Time:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1027 |
ap.Power:= 1; |
7471 | 1028 |
|
6775 | 1029 |
x:= hwFloat2Float(Me^.X); |
1030 |
y:= hwFloat2Float(Me^.Y); |
|
7471 | 1031 |
|
8959 | 1032 |
if Abs(trunc(x) - Targ.Point.X) + Abs(trunc(y) - Targ.Point.Y) < 20 then |
7041 | 1033 |
exit(BadTurn); |
7471 | 1034 |
|
8959 | 1035 |
t:= 2 / sqrt(sqr(Targ.Point.X - x)+sqr(Targ.Point.Y-y)); |
1036 |
Vx:= (Targ.Point.X - x) * t; |
|
1037 |
Vy:= (Targ.Point.Y - y) * t; |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1038 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1039 |
// Apply inaccuracy |
15658 | 1040 |
if (not aiLaserSighting) then |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1041 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 10))); |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1042 |
d:= 0; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1043 |
|
10097 | 1044 |
ix:= trunc(x); |
1045 |
iy:= trunc(y); |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1046 |
|
10097 | 1047 |
if ((ix and LAND_WIDTH_MASK) = 0) and ((iy and LAND_HEIGHT_MASK) = 0) then |
1048 |
repeat |
|
1049 |
if Land[iy, ix] <> 0 then |
|
1050 |
inc(d); |
|
1051 |
x:= x + vX; |
|
1052 |
y:= y + vY; |
|
1053 |
ix:= trunc(x); |
|
1054 |
iy:= trunc(y); |
|
1055 |
until (Abs(Targ.Point.X - ix) + Abs(Targ.Point.Y - iy) < 5) |
|
1056 |
or (x < 0) |
|
1057 |
or (y < 0) |
|
1058 |
or (ix >= LAND_WIDTH) |
|
1059 |
or (iy >= LAND_HEIGHT) |
|
1060 |
or (d > 48); |
|
1061 |
||
1062 |
if Abs(Targ.Point.X - ix) + Abs(Targ.Point.Y - iy) < 5 then |
|
9495
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1063 |
begin |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1064 |
ap.AttacksNum:= 1 + (d + 8) div 12; |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1065 |
valueResult:= RateShove(Me, Targ.Point.X, Targ.Point.Y, 1, 7, 20, vX*0.125, vY*0.125, afTrackFall) - ap.AttacksNum |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1066 |
end |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1067 |
else |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1068 |
valueResult:= BadTurn; |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1069 |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1070 |
TestDesertEagle:= valueResult |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1071 |
end; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1072 |
|
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1073 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1074 |
function TestSniperRifle(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
8971
fcb29a13b1b1
Adjust barrel damage so AI can actually bat to explode them. Fix state flag check. Remove unneeded dmgMod var. Cancel dX for low dX barrel tracing.
nemo
parents:
8959
diff
changeset
|
1075 |
var Vx, Vy, x, y, t, dmg: real; |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1076 |
d: Longword; |
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
1077 |
//fallDmg: LongInt; |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1078 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1079 |
Flags:= Flags; // avoid compiler hint |
8974
d360e97ce842
I don't see how rating these against others is useful, given the limited radius, and the cluster bomb thing just seems counterproductive. Anyway, this prevents AI from picking on barrels.
nemo
parents:
8971
diff
changeset
|
1080 |
if (Level > 3) or (Targ.Score < 0) or (Targ.Kind <> gtHedgehog) then exit(BadTurn); |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1081 |
Level:= Level; // avoid compiler hint |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1082 |
ap.ExplR:= 0; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1083 |
ap.Time:= 0; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1084 |
ap.Power:= 1; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1085 |
x:= hwFloat2Float(Me^.X); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1086 |
y:= hwFloat2Float(Me^.Y); |
8959 | 1087 |
if Abs(trunc(x) - Targ.Point.X) + Abs(trunc(y) - Targ.Point.Y) < 40 then |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1088 |
exit(BadTurn); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1089 |
|
8959 | 1090 |
dmg:= sqrt(sqr(Targ.Point.X - x)+sqr(Targ.Point.Y-y)); |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1091 |
t:= 1.5 / dmg; |
7208
62e36dc45098
Ignore all objects for fall tracing with shove to avoid considering checkins as obstacles. many objects will get knocked by the kick anyway, so end result should be pretty good. Oh, and ditch the sniper rifle doubling.
nemo
parents:
7206
diff
changeset
|
1092 |
dmg:= dmg * 0.025; // div 40 |
8959 | 1093 |
Vx:= (Targ.Point.X - x) * t; |
1094 |
Vy:= (Targ.Point.Y - y) * t; |
|
6894 | 1095 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1096 |
// Apply inaccuracy |
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1097 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 5))); |
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1098 |
|
75 | 1099 |
d:= 0; |
1941 | 1100 |
|
75 | 1101 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1102 |
x:= x + vX; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1103 |
y:= y + vY; |
6775 | 1104 |
if ((trunc(x) and LAND_WIDTH_MASK) = 0)and((trunc(y) and LAND_HEIGHT_MASK) = 0) |
1105 |
and (Land[trunc(y), trunc(x)] <> 0) then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1106 |
inc(d); |
8959 | 1107 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
6775 | 1108 |
or (x < 0) |
1109 |
or (y < 0) |
|
1110 |
or (trunc(x) > LAND_WIDTH) |
|
1111 |
or (trunc(y) > LAND_HEIGHT) |
|
7873 | 1112 |
or (d > 22); |
1941 | 1113 |
|
8959 | 1114 |
if Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4 then |
1115 |
TestSniperRifle:= RateShove(Me, Targ.Point.X, Targ.Point.Y, 1, trunc(dmg), 20, vX*0.166, vY*0.166, afTrackFall) |
|
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8950
diff
changeset
|
1116 |
else TestSniperRifle:= BadTurn; |
75 | 1117 |
end; |
438 | 1118 |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1119 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1120 |
function TestBaseballBat(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7212 | 1121 |
var valueResult, a, v1, v2: LongInt; |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1122 |
x, y, trackFall: LongInt; |
7212 | 1123 |
dx, dy: real; |
79 | 1124 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1125 |
Flags:= Flags; // avoid compiler hint |
7716 | 1126 |
Targ:= Targ; // avoid compiler hint |
1127 |
||
7471 | 1128 |
if Level < 3 then trackFall:= afTrackFall |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
1129 |
else trackFall:= 0; |
7471 | 1130 |
|
7212 | 1131 |
ap.ExplR:= 0; |
1132 |
ap.Time:= 0; |
|
1133 |
ap.Power:= 1; |
|
1134 |
x:= hwRound(Me^.X); |
|
1135 |
y:= hwRound(Me^.Y); |
|
1136 |
||
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1137 |
a:= cMaxAngle div 2; |
7212 | 1138 |
valueResult:= 0; |
1139 |
||
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1140 |
while a >= 0 do |
7212 | 1141 |
begin |
1142 |
dx:= sin(a / cMaxAngle * pi) * 0.5; |
|
1143 |
dy:= cos(a / cMaxAngle * pi) * 0.5; |
|
433 | 1144 |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1145 |
v1:= RateShove(Me, x - 10, y + 2 |
7427 | 1146 |
, 32, 30, 115 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1147 |
, -dx, -dy, trackFall); |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1148 |
v2:= RateShove(Me, x + 10, y + 2 |
7427 | 1149 |
, 32, 30, 115 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1150 |
, dx, -dy, trackFall); |
7212 | 1151 |
if (v1 > valueResult) or (v2 > valueResult) then |
8924 | 1152 |
if (v2 > v1) |
7212 | 1153 |
or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
1154 |
begin |
|
1155 |
ap.Angle:= a; |
|
1156 |
valueResult:= v2 |
|
1157 |
end |
|
8924 | 1158 |
else |
7212 | 1159 |
begin |
1160 |
ap.Angle:= -a; |
|
1161 |
valueResult:= v1 |
|
1162 |
end; |
|
6770
7d2c6cdb816a
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat.
nemo
parents:
6769
diff
changeset
|
1163 |
|
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1164 |
a:= a - 15 - random(cMaxAngle div 16) |
7212 | 1165 |
end; |
8924 | 1166 |
|
7212 | 1167 |
if valueResult <= 0 then |
1168 |
valueResult:= BadTurn; |
|
1169 |
||
1170 |
TestBaseballBat:= valueResult; |
|
79 | 1171 |
end; |
1172 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1173 |
function TestFirePunch(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1174 |
var valueResult, v1, v2, i: LongInt; |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1175 |
x, y, trackFall: LongInt; |
82 | 1176 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1177 |
Flags:= Flags; // avoid compiler hint |
7716 | 1178 |
Targ:= Targ; // avoid compiler hint |
1179 |
||
7471 | 1180 |
if Level = 1 then trackFall:= afTrackFall |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1181 |
else trackFall:= 0; |
7471 | 1182 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1183 |
ap.ExplR:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1184 |
ap.Time:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1185 |
ap.Power:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1186 |
x:= hwRound(Me^.X); |
7427 | 1187 |
y:= hwRound(Me^.Y) + 4; |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1188 |
|
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1189 |
v1:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1190 |
for i:= 0 to 8 do |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1191 |
begin |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1192 |
v1:= v1 + RateShove(Me, x - 5, y - 10 * i |
7427 | 1193 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1194 |
, -0.45, -0.9, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1195 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1196 |
v1:= v1 + RateShove(Me, x - 5, y - 90 |
7427 | 1197 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1198 |
, -0.45, -0.9, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1199 |
|
433 | 1200 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1201 |
// now try opposite direction |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1202 |
v2:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1203 |
for i:= 0 to 8 do |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1204 |
begin |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1205 |
v2:= v2 + RateShove(Me, x + 5, y - 10 * i |
7427 | 1206 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1207 |
, 0.45, -0.9, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1208 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1209 |
v2:= v2 + RateShove(Me, x + 5, y - 90 |
7427 | 1210 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1211 |
, 0.45, -0.9, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1212 |
|
8924 | 1213 |
if (v2 > v1) |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1214 |
or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1215 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1216 |
ap.Angle:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1217 |
valueResult:= v2 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1218 |
end |
8924 | 1219 |
else |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1220 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1221 |
ap.Angle:= -1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1222 |
valueResult:= v1 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1223 |
end; |
8924 | 1224 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1225 |
if valueResult <= 0 then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1226 |
valueResult:= BadTurn; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1227 |
|
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1228 |
TestFirePunch:= valueResult; |
82 | 1229 |
end; |
433 | 1230 |
|
7178
c61cfc9eb29d
Don't make unnecessary calls to TestWhip, TestFirePunch, TestBaseballBat and TestHammer functions as they have no need to take Targ parameter into account and thus may only be called once per position
unc0rr
parents:
7161
diff
changeset
|
1231 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1232 |
function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7154 | 1233 |
var valueResult, v1, v2: LongInt; |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1234 |
x, y, trackFall: LongInt; |
6770
7d2c6cdb816a
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat.
nemo
parents:
6769
diff
changeset
|
1235 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1236 |
Flags:= Flags; // avoid compiler hint |
7716 | 1237 |
Targ:= Targ; // avoid compiler hint |
1238 |
||
7471 | 1239 |
if Level = 1 then trackFall:= afTrackFall |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1240 |
else trackFall:= 0; |
7471 | 1241 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1242 |
ap.ExplR:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1243 |
ap.Time:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1244 |
ap.Power:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1245 |
x:= hwRound(Me^.X); |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1246 |
y:= hwRound(Me^.Y); |
7154 | 1247 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1248 |
// check left direction |
8924 | 1249 |
{first RateShove checks farthermost of two whip's AmmoShove attacks |
1250 |
to encourage distant attacks (damaged hog is excluded from view of second |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1251 |
RateShove call)} |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1252 |
v1:= RateShove(Me, x - 13, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1253 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1254 |
, -1, -0.8, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1255 |
v1:= v1 + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1256 |
RateShove(Me, x - 2, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1257 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1258 |
, -1, -0.8, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1259 |
// now try opposite direction |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1260 |
v2:= RateShove(Me, x + 13, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1261 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1262 |
, 1, -0.8, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1263 |
v2:= v2 + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1264 |
RateShove(Me, x + 2, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1265 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1266 |
, 1, -0.8, trackFall); |
7154 | 1267 |
|
8924 | 1268 |
if (v2 > v1) |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1269 |
or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1270 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1271 |
ap.Angle:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1272 |
valueResult:= v2 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1273 |
end |
8924 | 1274 |
else |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1275 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1276 |
ap.Angle:= -1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1277 |
valueResult:= v1 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1278 |
end; |
8924 | 1279 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1280 |
if valueResult <= 0 then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1281 |
valueResult:= BadTurn |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1282 |
else |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1283 |
inc(valueResult); |
6770
7d2c6cdb816a
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat.
nemo
parents:
6769
diff
changeset
|
1284 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1285 |
TestWhip:= valueResult; |
6770
7d2c6cdb816a
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat.
nemo
parents:
6769
diff
changeset
|
1286 |
end; |
7d2c6cdb816a
Start on adding drowning bonus to bat/firepunch/whip. AI still is not smart enough to change direction when firepunching to face the water, or change the angle of the bat.
nemo
parents:
6769
diff
changeset
|
1287 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1288 |
function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7471 | 1289 |
const step = 8; |
7474 | 1290 |
var valueResult, i, v, tx: LongInt; |
7471 | 1291 |
trackFall: LongInt; |
1292 |
t, d, x, y, dx, dy, cx: real; |
|
1293 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1294 |
Flags:= Flags; // avoid compiler hint |
7471 | 1295 |
ap.ExplR:= 0; |
1296 |
ap.Time:= 0; |
|
1297 |
ap.Power:= 1; |
|
1298 |
||
8924 | 1299 |
if Level = 1 then |
7471 | 1300 |
trackFall:= afTrackFall |
1301 |
else if Level = 2 then |
|
1302 |
trackFall:= 0 |
|
1303 |
else |
|
1304 |
exit(BadTurn); |
|
8924 | 1305 |
|
7471 | 1306 |
valueResult:= 0; |
7486 | 1307 |
v:= 0; |
7471 | 1308 |
|
1309 |
x:= hwFloat2Float(Me^.X); |
|
1310 |
y:= hwFloat2Float(Me^.Y); |
|
8959 | 1311 |
d:= sqrt(sqr(Targ.Point.X - x) + sqr(Targ.Point.Y - y)); |
7486 | 1312 |
if d < 10 then |
7474 | 1313 |
begin |
1314 |
dx:= 0; |
|
14568 | 1315 |
dy:= step; |
7474 | 1316 |
ap.Angle:= 2048 |
1317 |
end |
|
1318 |
else |
|
1319 |
begin |
|
1320 |
t:= step / d; |
|
8959 | 1321 |
dx:= (Targ.Point.X - x) * t; |
1322 |
dy:= (Targ.Point.Y - y) * t; |
|
7471 | 1323 |
|
15638 | 1324 |
ap.Angle:= DxDy2AttackAnglef(dx, -dy); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1325 |
// Apply inaccuracy |
15658 | 1326 |
if (not aiLaserSighting) then |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1327 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 10))); |
7474 | 1328 |
end; |
8924 | 1329 |
|
7471 | 1330 |
if dx >= 0 then cx:= 0.45 else cx:= -0.45; |
1331 |
||
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1332 |
for i:= 1 to 512 div step - 2 do |
7471 | 1333 |
begin |
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1334 |
x:= x + dx; |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1335 |
y:= y + dy; |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1336 |
|
8924 | 1337 |
valueResult:= valueResult + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1338 |
RateShove(Me, trunc(x), trunc(y) |
7471 | 1339 |
, 30, 30, 25 |
15631
308930fe5f4a
AI: Remove own gear from explosion/shove checks in kami/piano test
Wuzzy <Wuzzy2@mail.ru>
parents:
15630
diff
changeset
|
1340 |
, cx, -0.9, trackFall or afSetSkip or afIgnoreMe); |
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1341 |
end; |
8924 | 1342 |
|
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1343 |
if (d < 10) and (dx = 0) then |
7474 | 1344 |
begin |
1345 |
x:= hwFloat2Float(Me^.X); |
|
1346 |
y:= hwFloat2Float(Me^.Y); |
|
1347 |
tx:= trunc(x); |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1348 |
v:= RateShove(Me, tx, trunc(y) |
7486 | 1349 |
, 30, 30, 25 |
15631
308930fe5f4a
AI: Remove own gear from explosion/shove checks in kami/piano test
Wuzzy <Wuzzy2@mail.ru>
parents:
15630
diff
changeset
|
1350 |
, -cx, -0.9, trackFall or afIgnoreMe); |
7474 | 1351 |
for i:= 1 to 512 div step - 2 do |
1352 |
begin |
|
1353 |
y:= y + dy; |
|
8924 | 1354 |
v:= v + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1355 |
RateShove(Me, tx, trunc(y) |
7474 | 1356 |
, 30, 30, 25 |
15631
308930fe5f4a
AI: Remove own gear from explosion/shove checks in kami/piano test
Wuzzy <Wuzzy2@mail.ru>
parents:
15630
diff
changeset
|
1357 |
, -cx, -0.9, trackFall or afSetSkip or afIgnoreMe); |
7474 | 1358 |
end |
1359 |
end; |
|
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1360 |
|
7474 | 1361 |
if v > valueResult then |
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1362 |
begin |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1363 |
cx:= -cx; |
7474 | 1364 |
ap.Angle:= -2048; |
1365 |
valueResult:= v |
|
1366 |
end; |
|
7716 | 1367 |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1368 |
v:= RateShove(Me, trunc(x), trunc(y) |
7471 | 1369 |
, 30, 30, 25 |
15631
308930fe5f4a
AI: Remove own gear from explosion/shove checks in kami/piano test
Wuzzy <Wuzzy2@mail.ru>
parents:
15630
diff
changeset
|
1370 |
, cx, -0.9, trackFall or afIgnoreMe); |
7471 | 1371 |
valueResult:= valueResult + v - KillScore * friendlyfactor div 100 * 1024; |
7716 | 1372 |
|
7471 | 1373 |
if v < 65536 then |
15631
308930fe5f4a
AI: Remove own gear from explosion/shove checks in kami/piano test
Wuzzy <Wuzzy2@mail.ru>
parents:
15630
diff
changeset
|
1374 |
inc(valueResult, RateExplosion(Me, trunc(x), trunc(y), 30, afIgnoreMe)); |
7471 | 1375 |
|
1376 |
TestKamikaze:= valueResult; |
|
1377 |
end; |
|
1378 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1379 |
function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
5645 | 1380 |
var rate: LongInt; |
1381 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1382 |
Flags:= Flags; // avoid compiler hint |
5645 | 1383 |
Level:= Level; // avoid compiler hint |
7716 | 1384 |
Targ:= Targ; |
1385 |
||
5645 | 1386 |
ap.ExplR:= 0; |
1387 |
ap.Time:= 0; |
|
1388 |
ap.Power:= 1; |
|
1389 |
ap.Angle:= 0; |
|
8924 | 1390 |
|
7178
c61cfc9eb29d
Don't make unnecessary calls to TestWhip, TestFirePunch, TestBaseballBat and TestHammer functions as they have no need to take Targ parameter into account and thus may only be called once per position
unc0rr
parents:
7161
diff
changeset
|
1391 |
rate:= RateHammer(Me); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1392 |
if rate = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1393 |
rate:= BadTurn; |
5645 | 1394 |
TestHammer:= rate; |
1395 |
end; |
|
1396 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1397 |
function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
556
49675457d76e
Bots aims not directly at the center of enemy hedgehog
unc0rr
parents:
554
diff
changeset
|
1398 |
const cShift = 4; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1399 |
Density : real = 2.0; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1400 |
var bombsSpeed, X, Y, dX, dY: real; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1401 |
b: array[0..9] of boolean; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1402 |
dmg: array[0..9] of LongInt; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1403 |
fexit: boolean; |
2695 | 1404 |
i, t, valueResult: LongInt; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1405 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1406 |
Flags:= Flags; // avoid compiler hint |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1407 |
ap.ExplR:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1408 |
ap.Time:= 0; |
9844 | 1409 |
if (Level > 3) or (cGravityf = 0) then |
7041 | 1410 |
exit(BadTurn); |
554 | 1411 |
|
7132 | 1412 |
ap.Angle:= 0; |
8959 | 1413 |
ap.AttackPutX:= Targ.Point.X; |
1414 |
ap.AttackPutY:= Targ.Point.Y; |
|
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1415 |
|
6775 | 1416 |
bombsSpeed:= hwFloat2Float(cBombsSpeed); |
8959 | 1417 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
1418 |
X:= X - bombsSpeed * sqrt(((Targ.Point.Y + 128) * 2) / cGravityf); |
|
6775 | 1419 |
Y:= -128; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1420 |
dX:= bombsSpeed; |
6775 | 1421 |
dY:= 0; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1422 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1423 |
for i:= 0 to 9 do |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1424 |
begin |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1425 |
b[i]:= true; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1426 |
dmg[i]:= 0 |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1427 |
end; |
2695 | 1428 |
valueResult:= 0; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1429 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1430 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1431 |
X:= X + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1432 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1433 |
dX:= dX + windSpeed / Density; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1434 |
Y:= Y + dY; |
6775 | 1435 |
dY:= dY + cGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1436 |
fexit:= true; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1437 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1438 |
for i:= 0 to 9 do |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1439 |
if b[i] then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1440 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1441 |
fexit:= false; |
6992 | 1442 |
if TestColl(trunc(X) + LongWord(i * 30), trunc(Y), 4) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1443 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1444 |
b[i]:= false; |
6992 | 1445 |
dmg[i]:= RateExplosion(Me, trunc(X) + LongWord(i * 30), trunc(Y), 58) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1446 |
// 58 (instead of 60) for better prediction (hh moves after explosion of one of the rockets) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1447 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1448 |
end; |
6775 | 1449 |
until fexit or (Y > cWaterLine); |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1450 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1451 |
for i:= 0 to 5 do |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1452 |
if dmg[i] <> BadTurn then |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1453 |
inc(valueResult, dmg[i]); |
2695 | 1454 |
t:= valueResult; |
8959 | 1455 |
ap.AttackPutX:= Targ.Point.X - 60; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1456 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1457 |
for i:= 0 to 3 do |
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1458 |
if dmg[i] <> BadTurn then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1459 |
begin |
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1460 |
dec(t, dmg[i]); |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1461 |
inc(t, dmg[i + 6]); |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1462 |
if t > valueResult then |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1463 |
begin |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1464 |
valueResult:= t; |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1465 |
ap.AttackPutX:= Targ.Point.X - 30 - cShift + i * 30 |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1466 |
end |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1467 |
end; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1468 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1469 |
if valueResult <= 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1470 |
valueResult:= BadTurn; |
2695 | 1471 |
TestAirAttack:= valueResult; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1472 |
end; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1473 |
|
15626 | 1474 |
function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1475 |
const cShift = 4; |
|
1476 |
var bombsSpeed, X, Y, dX, dY, drillX, drillY: real; |
|
1477 |
t2: real; |
|
1478 |
b: array[0..9] of boolean; |
|
1479 |
dmg: array[0..9] of LongInt; |
|
1480 |
fexit, collided: boolean; |
|
1481 |
i, t, value, valueResult, attackTime, drillTimer, targetX: LongInt; |
|
1482 |
begin |
|
1483 |
Flags:= Flags; // avoid compiler hint |
|
1484 |
ap.ExplR:= 0; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1485 |
// TODO: Add support for More Wind |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1486 |
if (Level > 3) or (cGravityf = 0) or ((GameFlags and gfMoreWind) <> 0) then |
15626 | 1487 |
exit(BadTurn); |
1488 |
||
1489 |
ap.Angle:= 0; |
|
1490 |
targetX:= Targ.Point.X; |
|
1491 |
ap.AttackPutY:= Targ.Point.Y; |
|
1492 |
||
1493 |
bombsSpeed:= hwFloat2Float(cBombsSpeed); |
|
1494 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
|
1495 |
X:= X - bombsSpeed * sqrt(((Targ.Point.Y + 128) * 2) / cGravityf); |
|
1496 |
Y:= -128; |
|
1497 |
dX:= bombsSpeed; |
|
1498 |
dY:= 0; |
|
1499 |
||
1500 |
valueResult:= 0; |
|
1501 |
||
1502 |
attackTime:= 0; |
|
1503 |
while attackTime <= 4000 do |
|
1504 |
begin |
|
1505 |
inc(attackTime, 1000); |
|
1506 |
value:= 0; |
|
1507 |
for i:= 0 to 9 do |
|
1508 |
begin |
|
1509 |
b[i]:= true; |
|
1510 |
dmg[i]:= 0 |
|
1511 |
end; |
|
1512 |
||
1513 |
repeat |
|
1514 |
X:= X + dX; |
|
1515 |
Y:= Y + dY; |
|
1516 |
dY:= dY + cGravityf; |
|
1517 |
fexit:= true; |
|
1518 |
||
1519 |
for i:= 0 to 9 do |
|
1520 |
if b[i] then |
|
1521 |
begin |
|
1522 |
fexit:= false; |
|
1523 |
collided:= false; |
|
1524 |
drillX:= trunc(X) + LongWord(i * 30); |
|
1525 |
drillY:= trunc(Y); |
|
1526 |
// Collided with land ... simulate drilling |
|
1527 |
if TestCollExcludingObjects(trunc(drillX), trunc(drillY), 4) and |
|
1528 |
(Abs(Targ.Point.X - trunc(X)) + Abs(Targ.Point.Y - trunc(Y)) > 21) then |
|
1529 |
begin |
|
1530 |
drillTimer := attackTime; |
|
1531 |
t2 := 0.5 / sqrt(sqr(dX) + sqr(dY)); |
|
1532 |
dX := dX * t2; |
|
1533 |
dY := dY * t2; |
|
1534 |
repeat |
|
1535 |
drillX:= drillX + dX; |
|
1536 |
drillY:= drillY + dY; |
|
1537 |
dec(drillTimer, 10); |
|
1538 |
until (Abs(Targ.Point.X - drillX) + Abs(Targ.Point.Y - drillY) < 22) |
|
1539 |
or (drillX < 0) |
|
1540 |
or (drillY < 0) |
|
1541 |
or (trunc(drillX) > LAND_WIDTH) |
|
1542 |
or (trunc(drillY) > LAND_HEIGHT) |
|
1543 |
// TODO: Simulate falling again when rocket has left terrain again |
|
1544 |
or (drillTimer <= 0); |
|
1545 |
collided:= true; |
|
1546 |
end |
|
1547 |
// Collided with something else ... record collision |
|
1548 |
else if TestColl(trunc(drillX), trunc(drillY), 4) then |
|
1549 |
collided:= true; |
|
1550 |
||
1551 |
// Simulate explosion |
|
1552 |
if collided then |
|
1553 |
begin |
|
1554 |
b[i]:= false; |
|
1555 |
dmg[i]:= RateExplosion(Me, trunc(drillX), trunc(drillY), 58); |
|
1556 |
// 58 (instead of 60) for better prediction (hh moves after explosion of one of the rockets) |
|
1557 |
end; |
|
1558 |
end; |
|
1559 |
until fexit or (Y > cWaterLine); |
|
1560 |
||
1561 |
for i:= 0 to 5 do |
|
1562 |
if dmg[i] <> BadTurn then |
|
1563 |
inc(value, dmg[i]); |
|
1564 |
t:= value; |
|
1565 |
targetX:= Targ.Point.X - 60; |
|
1566 |
||
1567 |
for i:= 0 to 3 do |
|
1568 |
if dmg[i] <> BadTurn then |
|
1569 |
begin |
|
1570 |
dec(t, dmg[i]); |
|
1571 |
inc(t, dmg[i + 6]); |
|
1572 |
if t > value then |
|
1573 |
begin |
|
1574 |
value:= t; |
|
1575 |
targetX:= Targ.Point.X - 30 - cShift + i * 30 |
|
1576 |
end |
|
1577 |
end; |
|
1578 |
||
1579 |
if value > valueResult then |
|
1580 |
begin |
|
1581 |
valueResult:= value; |
|
1582 |
ap.AttackPutX:= targetX; |
|
1583 |
ap.Time:= attackTime; |
|
1584 |
end; |
|
1585 |
end; |
|
1586 |
||
1587 |
if valueResult <= 0 then |
|
1588 |
valueResult:= BadTurn |
|
1589 |
else |
|
1590 |
begin |
|
1591 |
// Weaker AI has chance to get the time wrong by 1-3 seconds |
|
1592 |
if Level = 5 then |
|
1593 |
// +/- 3 seconds |
|
1594 |
ap.Time:= ap.Time + (3 - random(7)) * 1000 |
|
1595 |
else if Level = 4 then |
|
1596 |
// +/- 2 seconds |
|
1597 |
ap.Time:= ap.Time + (2 - random(5)) * 1000 |
|
1598 |
else if Level = 3 then |
|
1599 |
// +/- 1 second |
|
1600 |
if (random(2) = 0) then |
|
1601 |
ap.Time:= ap.Time + (1 - random(3)) * 1000 |
|
1602 |
else if Level = 2 then |
|
1603 |
// 50% chance for +/- 1 second |
|
1604 |
if (random(2) = 0) then |
|
1605 |
ap.Time:= ap.Time + (1 - random(3)) * 1000; |
|
1606 |
ap.Time:= Min(5000, Max(1000, ap.Time)); |
|
1607 |
end; |
|
1608 |
||
1609 |
TestDrillStrike:= valueResult; |
|
1610 |
end; |
|
3370 | 1611 |
|
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1612 |
function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1613 |
const cShift = 4; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1614 |
Density : real = 1.0; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1615 |
var minesSpeed, X, Y, dX, dY: real; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1616 |
b: array[0..9] of boolean; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1617 |
dmg: array[0..9] of LongInt; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1618 |
fexit: boolean; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1619 |
i, t, valueResult: LongInt; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1620 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1621 |
Flags:= Flags; // avoid compiler hint |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1622 |
ap.ExplR:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1623 |
ap.Time:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1624 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1625 |
// AI currently only supports cMinesTime = 0 because it's the most |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1626 |
// predictable. |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1627 |
// Other cMinesTime values are risky because of bouncy mines; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1628 |
// so they are unsupported. |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1629 |
// TODO: Implement mine strike for other values of MineTime |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1630 |
// TODO: Teach AI to avoid hitting their own with mines |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1631 |
if (Level > 3) or (cGravityf = 0) or (cMinesTime <> 0) then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1632 |
exit(BadTurn); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1633 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1634 |
ap.Angle:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1635 |
ap.AttackPutX:= Targ.Point.X; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1636 |
ap.AttackPutY:= Targ.Point.Y; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1637 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1638 |
minesSpeed:= hwFloat2Float(cBombsSpeed); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1639 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1640 |
X:= X - minesSpeed * sqrt(((Targ.Point.Y + 128) * 2) / cGravityf); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1641 |
Y:= -128; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1642 |
dX:= minesSpeed; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1643 |
dY:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1644 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1645 |
for i:= 0 to 9 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1646 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1647 |
b[i]:= true; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1648 |
dmg[i]:= 0 |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1649 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1650 |
valueResult:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1651 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1652 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1653 |
X:= X + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1654 |
if (GameFlags and (gfMoreWind or gfInfAttack)) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1655 |
dX:= dX + windSpeed / Density; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1656 |
Y:= Y + dY; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1657 |
dY:= dY + cGravityf; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1658 |
fexit:= true; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1659 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1660 |
for i:= 0 to 9 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1661 |
if b[i] then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1662 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1663 |
fexit:= false; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1664 |
if TestColl(trunc(X) + LongWord(i * 30), trunc(Y), 4) then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1665 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1666 |
b[i]:= false; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1667 |
dmg[i]:= RateExplosion(Me, trunc(X) + LongWord(i * 30), trunc(Y), 96) |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1668 |
end |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1669 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1670 |
until fexit or (Y > cWaterLine); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1671 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1672 |
for i:= 0 to 5 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1673 |
if dmg[i] <> BadTurn then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1674 |
inc(valueResult, dmg[i]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1675 |
t:= valueResult; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1676 |
ap.AttackPutX:= Targ.Point.X - 60; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1677 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1678 |
for i:= 0 to 3 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1679 |
if dmg[i] <> BadTurn then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1680 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1681 |
dec(t, dmg[i]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1682 |
inc(t, dmg[i + 6]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1683 |
if t > valueResult then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1684 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1685 |
valueResult:= t; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1686 |
ap.AttackPutX:= Targ.Point.X - 30 - cShift + i * 30 |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1687 |
end |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1688 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1689 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1690 |
if valueResult <= 0 then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1691 |
valueResult:= BadTurn; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1692 |
TestMineStrike:= valueResult; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1693 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1694 |
|
15641 | 1695 |
function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1696 |
const timeLimit = 50; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1697 |
Density : real = 1.6; |
15641 | 1698 |
var Vx, Vy, r, meX, meY: real; |
1699 |
rTime: LongInt; |
|
1700 |
EX, EY: LongInt; |
|
1701 |
valueResult: LongInt; |
|
1702 |
targXWrap, x, y, dX, dY: real; |
|
1703 |
t: LongInt; |
|
1704 |
value: LongInt; |
|
1705 |
begin |
|
1706 |
Flags:= Flags; // avoid compiler hint |
|
1707 |
meX:= hwFloat2Float(Me^.X); |
|
1708 |
meY:= hwFloat2Float(Me^.Y); |
|
1709 |
ap.Time:= 0; |
|
1710 |
rTime:= 350; |
|
1711 |
ap.ExplR:= 0; |
|
1712 |
if (WorldEdge = weWrap) then |
|
1713 |
if (Targ.Point.X < meX) then |
|
1714 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
1715 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
1716 |
valueResult:= BadTurn; |
|
1717 |
repeat |
|
1718 |
rTime:= rTime + 300 + Level * 50 + random(300); |
|
1719 |
if (WorldEdge = weWrap) and (random(2)=0) then |
|
1720 |
Vx:= (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime |
|
1721 |
else |
|
1722 |
Vx:= (Targ.Point.X + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1723 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1724 |
Vx:= -(windSpeed / Density) * rTime * 0.5 + Vx; |
15641 | 1725 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
1726 |
r:= sqr(Vx) + sqr(Vy); |
|
1727 |
||
1728 |
if not (r > 1) then |
|
1729 |
begin |
|
1730 |
x:= meX; |
|
1731 |
y:= meY; |
|
1732 |
dX:= Vx; |
|
1733 |
dY:= -Vy; |
|
1734 |
t:= rTime; |
|
1735 |
repeat |
|
1736 |
x:= CheckWrap(x); |
|
1737 |
x:= x + dX; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1738 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1739 |
dX:= dX + windSpeed / Density; |
15641 | 1740 |
|
1741 |
y:= y + dY; |
|
1742 |
dY:= dY + cGravityf; |
|
1743 |
dec(t) |
|
1744 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 2)) or |
|
1745 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 2))) or (t < -timeLimit); |
|
1746 |
||
1747 |
EX:= trunc(x); |
|
1748 |
EY:= trunc(y); |
|
1749 |
||
1750 |
if t >= -timeLimit then |
|
1751 |
if (Level = 1) and (Flags and amtest_NoTrackFall = 0) then |
|
1752 |
value:= RateExplosion(Me, EX, EY, 61, afTrackFall) |
|
1753 |
else |
|
1754 |
value:= RateExplosion(Me, EX, EY, 61); |
|
1755 |
||
1756 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
1757 |
value := BadTurn; |
|
1758 |
||
1759 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
|
1760 |
begin |
|
1761 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
|
1762 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
|
1763 |
ap.ExplR:= 60; |
|
1764 |
ap.ExplX:= EX; |
|
1765 |
ap.ExplY:= EY; |
|
1766 |
valueResult:= value |
|
1767 |
end; |
|
1768 |
end |
|
1769 |
until rTime > 5050 - Level * 800; |
|
1770 |
TestSMine:= valueResult |
|
1771 |
end; |
|
1772 |
||
15630 | 1773 |
function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1774 |
const BOUNCES = 5; |
|
1775 |
var X, Y: real; |
|
1776 |
dmg: array[0..BOUNCES-1] of LongInt; |
|
15632 | 1777 |
i, e, rate, valueResult: LongInt; |
15630 | 1778 |
begin |
1779 |
Flags:= Flags; // avoid compiler hint |
|
1780 |
ap.ExplR:= 0; |
|
1781 |
ap.Time:= 0; |
|
1782 |
if (cGravityf <= 0) then |
|
1783 |
exit(BadTurn); |
|
1784 |
||
1785 |
if (Level > 2) then |
|
1786 |
exit(BadTurn); |
|
1787 |
||
1788 |
ap.Angle:= 0; |
|
1789 |
ap.AttackPutX:= Targ.Point.X; |
|
1790 |
ap.AttackPutY:= Targ.Point.Y; |
|
1791 |
||
1792 |
X:= Targ.Point.X; |
|
1793 |
Y:= -128; |
|
1794 |
||
1795 |
for i:= 0 to BOUNCES-1 do |
|
1796 |
dmg[i]:= 0; |
|
1797 |
||
1798 |
i:= 1; |
|
1799 |
repeat |
|
15632 | 1800 |
// Piano goes down |
1801 |
Y:= Y + 11; |
|
15630 | 1802 |
if TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(X), trunc(Y), 32) then |
1803 |
begin |
|
15632 | 1804 |
for e:= -1 to 1 do |
1805 |
begin |
|
1806 |
rate:= RateExplosion(Me, trunc(X) + 30*e, trunc(Y)+40, 161, afIgnoreMe); |
|
1807 |
if rate <> BadTurn then |
|
1808 |
dmg[i]:= dmg[i] + rate; |
|
1809 |
end; |
|
1810 |
||
1811 |
if (i > 1) and (dmg[i] > 0) then |
|
1812 |
dmg[i]:= dmg[i] div 2; |
|
15630 | 1813 |
inc(i); |
15632 | 1814 |
// Skip past the blast hole |
1815 |
Y:= Y + 41 |
|
15630 | 1816 |
end; |
15632 | 1817 |
until (i > BOUNCES) or (Y > cWaterLine); |
15630 | 1818 |
|
1819 |
if (i = 0) and (Y > cWaterLine) then |
|
1820 |
exit(BadTurn); |
|
1821 |
||
1822 |
valueResult:= 0; |
|
1823 |
for i:= 0 to BOUNCES do |
|
15632 | 1824 |
if dmg[i] <= BadTurn then |
1825 |
begin |
|
1826 |
valueResult:= BadTurn; |
|
1827 |
break; |
|
1828 |
end |
|
1829 |
else |
|
15630 | 1830 |
inc(valueResult, dmg[i]); |
1831 |
ap.AttackPutX:= Targ.Point.X; |
|
1832 |
||
1833 |
valueResult:= valueResult - KillScore * friendlyfactor div 100 * 1024; |
|
1834 |
||
1835 |
if valueResult <= 0 then |
|
1836 |
valueResult:= BadTurn; |
|
1837 |
TestPiano:= valueResult; |
|
1838 |
end; |
|
1839 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1840 |
function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
3370 | 1841 |
var |
3439 | 1842 |
i, failNum: longword; |
1843 |
maxTop: longword; |
|
3370 | 1844 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1845 |
Flags:= Flags; // avoid compiler hint |
3439 | 1846 |
TestTeleport := BadTurn; |
7041 | 1847 |
exit(BadTurn); |
3439 | 1848 |
Level:= Level; // avoid compiler hint |
6888 | 1849 |
//FillBonuses(true, [gtCase]); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1850 |
if bonuses.Count = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1851 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1852 |
if Me^.Health <= 100 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1853 |
begin |
8959 | 1854 |
maxTop := Targ.Point.Y - cHHRadius * 2; |
8924 | 1855 |
|
8959 | 1856 |
while not TestColl(Targ.Point.X, maxTop, cHHRadius) and (maxTop > topY + cHHRadius * 2 + 1) do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1857 |
dec(maxTop, cHHRadius*2); |
8959 | 1858 |
if not TestColl(Targ.Point.X, maxTop + cHHRadius, cHHRadius) then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1859 |
begin |
8959 | 1860 |
ap.AttackPutX := Targ.Point.X; |
3439 | 1861 |
ap.AttackPutY := maxTop + cHHRadius; |
8959 | 1862 |
TestTeleport := Targ.Point.Y - maxTop; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1863 |
end; |
3439 | 1864 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1865 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1866 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1867 |
begin |
3439 | 1868 |
failNum := 0; |
3697 | 1869 |
repeat |
3439 | 1870 |
i := random(bonuses.Count); |
1871 |
inc(failNum); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1872 |
until not TestColl(bonuses.ar[i].X, bonuses.ar[i].Y - cHHRadius - bonuses.ar[i].Radius, cHHRadius) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1873 |
or (failNum = bonuses.Count*2); |
8924 | 1874 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1875 |
if failNum < bonuses.Count*2 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1876 |
begin |
3439 | 1877 |
ap.AttackPutX := bonuses.ar[i].X; |
1878 |
ap.AttackPutY := bonuses.ar[i].Y - cHHRadius - bonuses.ar[i].Radius; |
|
1879 |
TestTeleport := 0; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1880 |
end; |
3439 | 1881 |
end; |
3370 | 1882 |
end; |
1883 |
||
7398 | 1884 |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1885 |
procedure checkCakeWalk(Me, Gear: PGear; var ap: TAttackParams); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1886 |
var i: Longword; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1887 |
v: LongInt; |
7398 | 1888 |
begin |
8370 | 1889 |
while (not TestColl(hwRound(Gear^.X), hwRound(Gear^.Y), 6)) and (Gear^.Y.Round < LongWord(LAND_HEIGHT)) do |
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1890 |
Gear^.Y:= Gear^.Y + _1; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1891 |
|
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1892 |
for i:= 0 to 2040 do |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1893 |
begin |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1894 |
cakeStep(Gear); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1895 |
v:= RateExplosion(Me, hwRound(Gear^.X), hwRound(Gear^.Y), cakeDmg * 2, afTrackFall); |
8924 | 1896 |
if v > ap.Power then |
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1897 |
begin |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1898 |
ap.ExplX:= hwRound(Gear^.X); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1899 |
ap.ExplY:= hwRound(Gear^.Y); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1900 |
ap.Power:= v |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1901 |
end |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1902 |
end; |
7398 | 1903 |
end; |
1904 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1905 |
function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7398 | 1906 |
var valueResult, v1, v2: LongInt; |
1907 |
cake: TGear; |
|
1908 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1909 |
Flags:= Flags; // avoid compiler hint |
7716 | 1910 |
Targ:= Targ; // avoid compiler hint |
1911 |
||
7501 | 1912 |
if (Level > 2) then |
1913 |
exit(BadTurn); |
|
7716 | 1914 |
|
7398 | 1915 |
ap.ExplR:= 0; |
1916 |
ap.Time:= 0; |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1917 |
ap.Power:= BadTurn; // use it as max score value in checkCakeWalk |
7398 | 1918 |
|
7721 | 1919 |
//FillChar(cake, sizeof(cake), 0); |
7398 | 1920 |
cake.Radius:= 7; |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
12898
diff
changeset
|
1921 |
cake.CollisionMask:= lfNotCurHogCrate; |
7752 | 1922 |
cake.Hedgehog:= Me^.Hedgehog; |
15387 | 1923 |
cake.Kind:= gtCake; |
7398 | 1924 |
|
1925 |
// check left direction |
|
1926 |
cake.Angle:= 3; |
|
1927 |
cake.dX.isNegative:= true; |
|
15387 | 1928 |
cake.dX.QWordValue:= 0; |
1929 |
cake.dY:= _0; |
|
7398 | 1930 |
cake.X:= Me^.X - _3; |
1931 |
cake.Y:= Me^.Y; |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1932 |
checkCakeWalk(Me, @cake, ap); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1933 |
v1:= ap.Power; |
7398 | 1934 |
|
1935 |
// now try opposite direction |
|
1936 |
cake.Angle:= 1; |
|
1937 |
cake.dX.isNegative:= false; |
|
1938 |
cake.X:= Me^.X + _3; |
|
1939 |
cake.Y:= Me^.Y; |
|
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1940 |
checkCakeWalk(Me, @cake, ap); |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1941 |
v2:= ap.Power; |
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1942 |
|
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7398
diff
changeset
|
1943 |
ap.Power:= 1; |
7398 | 1944 |
|
1945 |
if (v2 > v1) then |
|
1946 |
begin |
|
1947 |
ap.Angle:= 1; |
|
1948 |
valueResult:= v2 |
|
1949 |
end |
|
1950 |
else |
|
1951 |
begin |
|
1952 |
ap.Angle:= -1; |
|
1953 |
valueResult:= v1 |
|
1954 |
end; |
|
1955 |
||
1956 |
if valueResult <= 0 then |
|
1957 |
valueResult:= BadTurn; |
|
1958 |
||
1959 |
TestCake:= valueResult; |
|
1960 |
end; |
|
1961 |
||
15640 | 1962 |
function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1963 |
var rate: LongInt; |
|
1964 |
begin |
|
1965 |
Flags:= Flags; // avoid compiler hint |
|
1966 |
Level:= Level; // avoid compiler hint |
|
1967 |
Targ:= Targ; |
|
1968 |
||
1969 |
if (Level = 5) then |
|
1970 |
exit(BadTurn); |
|
1971 |
||
1972 |
ap.ExplR:= 0; |
|
1973 |
ap.Time:= 0; |
|
1974 |
ap.Power:= 1; |
|
1975 |
ap.Angle:= 0; |
|
1976 |
||
1977 |
rate:= RateSeduction(Me); |
|
1978 |
if rate <= 0 then |
|
1979 |
rate:= BadTurn; |
|
1980 |
TestSeduction:= rate; |
|
1981 |
end; |
|
1982 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1983 |
function TestDynamite(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1984 |
const Density : real = 2.0; |
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1985 |
var valueResult: LongInt; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1986 |
x, y, dx, dy: real; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1987 |
EX, EY, t: LongInt; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1988 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1989 |
Flags:= Flags; // avoid compiler hint |
9790 | 1990 |
Targ:= Targ; // avoid compiler hint |
1991 |
||
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1992 |
x:= hwFloat2Float(Me^.X) + hwSign(Me^.dX) * 7; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1993 |
y:= hwFloat2Float(Me^.Y); |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1994 |
dx:= hwSign(Me^.dX) * 0.03; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1995 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1996 |
dx:= -(windSpeed / Density) + dx; |
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1997 |
dy:= 0; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1998 |
t:= 5000; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
1999 |
repeat |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2000 |
dec(t); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2001 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2002 |
dx:= dx + windSpeed / Density; |
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2003 |
x:= x + dx; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2004 |
dy:= dy + cGravityf; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2005 |
y:= y + dy; |
10015 | 2006 |
|
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2007 |
if TestColl(trunc(x), trunc(y), 3) then |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2008 |
t:= 0; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2009 |
until t = 0; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2010 |
|
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2011 |
EX:= trunc(x); |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2012 |
EY:= trunc(y); |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2013 |
|
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2014 |
if Level = 1 then |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2015 |
valueResult:= RateExplosion(Me, EX, EY, 76, afTrackFall or afErasesLand) |
10015 | 2016 |
else |
9722
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2017 |
valueResult:= RateExplosion(Me, EX, EY, 76); |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2018 |
|
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2019 |
if (valueResult > 0) then |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2020 |
begin |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2021 |
ap.Angle:= 0; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2022 |
ap.Power:= 1; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2023 |
ap.Time:= 0; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2024 |
ap.ExplR:= 150; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2025 |
ap.ExplX:= EX; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2026 |
ap.ExplY:= EY |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2027 |
end else |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2028 |
valueResult:= BadTurn; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2029 |
|
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2030 |
TestDynamite:= valueResult |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2031 |
end; |
22dba2d8de93
Quick and simple dynamite AI without precalculated retreat and without accurate dynamite physics model (no bounce). Still does pretty well, using it mostly off cliffs.
unc0rr
parents:
9495
diff
changeset
|
2032 |
|
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2033 |
function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2034 |
const Density : real = 1.0; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2035 |
var valueResult: LongInt; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2036 |
x, y, dx, dy: real; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2037 |
EX, EY, t: LongInt; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2038 |
begin |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2039 |
Flags:= Flags; // avoid compiler hint |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2040 |
Targ:= Targ; // avoid compiler hint |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2041 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2042 |
x:= hwFloat2Float(Me^.X) + hwSign(Me^.dX) * 7; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2043 |
y:= hwFloat2Float(Me^.Y); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2044 |
dx:= hwSign(Me^.dX) * 0.02; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2045 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2046 |
dx:= -(windSpeed / Density) + dx; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2047 |
dy:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2048 |
t:= 10000; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2049 |
repeat |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2050 |
dec(t); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2051 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2052 |
dx:= dx + windSpeed / Density; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2053 |
x:= x + dx; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2054 |
dy:= dy + cGravityf; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2055 |
y:= y + dy; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2056 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 2)) or |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2057 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 2)) then |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2058 |
t:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2059 |
until t = 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2060 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2061 |
EX:= trunc(x); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2062 |
EY:= trunc(y); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2063 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2064 |
if Level = 1 then |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2065 |
valueResult:= RateExplosion(Me, EX, EY, 51, afTrackFall or afErasesLand) |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2066 |
else |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2067 |
valueResult:= RateExplosion(Me, EX, EY, 51); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2068 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2069 |
if (valueResult > 0) then |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2070 |
begin |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2071 |
ap.Angle:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2072 |
ap.Power:= 1; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2073 |
ap.Time:= 0; |
15625 | 2074 |
if (Level < 5) then |
2075 |
// Set minimum mine bounciness for improved aim |
|
2076 |
ap.Bounce:= 1 |
|
2077 |
else |
|
2078 |
ap.Bounce:= 0; |
|
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2079 |
ap.ExplR:= 100; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2080 |
ap.ExplX:= EX; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2081 |
ap.ExplY:= EY |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2082 |
end else |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2083 |
valueResult:= BadTurn; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2084 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2085 |
TestMine:= valueResult |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2086 |
end; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2087 |
|
15639 | 2088 |
function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2089 |
const timeLimit = 300; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2090 |
Density : real = 4.0; |
15639 | 2091 |
var Vx, Vy, r, meX, meY: real; |
2092 |
rTime: LongInt; |
|
2093 |
EX, EY: LongInt; |
|
2094 |
valueResult: LongInt; |
|
2095 |
targXWrap, x, y, dX, dY: real; |
|
2096 |
t: LongInt; |
|
2097 |
value, range: LongInt; |
|
2098 |
begin |
|
2099 |
Flags:= Flags; // avoid compiler hint |
|
2100 |
meX:= hwFloat2Float(Me^.X); |
|
2101 |
meY:= hwFloat2Float(Me^.Y); |
|
2102 |
ap.Time:= 0; |
|
2103 |
rTime:= 350; |
|
2104 |
ap.ExplR:= 0; |
|
2105 |
if (WorldEdge = weWrap) then |
|
2106 |
if (Targ.Point.X < meX) then |
|
2107 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
2108 |
else |
|
2109 |
targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
2110 |
valueResult:= BadTurn; |
|
2111 |
repeat |
|
2112 |
rTime:= rTime + 300 + Level * 50 + random(300); |
|
2113 |
if (WorldEdge = weWrap) and (random(2)=0) then |
|
2114 |
Vx:= (targXWrap - meX) / rTime |
|
2115 |
else |
|
2116 |
Vx:= (Targ.Point.X - meX) / rTime; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2117 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2118 |
Vx:= -(windSpeed / Density) * rTime * 0.5 + Vx; |
15639 | 2119 |
Vy:= cGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
2120 |
r:= sqr(Vx) + sqr(Vy); |
|
2121 |
||
2122 |
if not (r > 1) then |
|
2123 |
begin |
|
2124 |
x:= meX; |
|
2125 |
y:= meY; |
|
2126 |
dX:= Vx; |
|
2127 |
dY:= -Vy; |
|
2128 |
t:= rTime; |
|
2129 |
repeat |
|
2130 |
x:= CheckWrap(x); |
|
2131 |
x:= x + dX; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2132 |
if (GameFlags and gfMoreWind) <> 0 then |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2133 |
dX:= dX + windSpeed / Density; |
15639 | 2134 |
|
2135 |
y:= y + dY; |
|
2136 |
dY:= dY + cGravityf; |
|
2137 |
dec(t) |
|
2138 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 7)) or |
|
2139 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 7))) or (t < -timeLimit); |
|
2140 |
||
2141 |
EX:= trunc(x); |
|
2142 |
EY:= trunc(y); |
|
2143 |
||
2144 |
// Sanity check: Make sure we're not too close to impact location |
|
2145 |
range:= Metric(trunc(meX), trunc(meY), EX, EY); |
|
2146 |
if (range <= 40) then |
|
2147 |
exit(BadTurn); |
|
2148 |
||
2149 |
if t >= -timeLimit then |
|
2150 |
value:= RateShove(Me, EX, EY, 16, trunc(sqr((abs(dY)+abs(dX))*40000/10000)), 0, dX, dY, 0) |
|
2151 |
else |
|
2152 |
value:= BadTurn; |
|
2153 |
||
2154 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
2155 |
value := BadTurn; |
|
2156 |
||
2157 |
if (valueResult < value) or ((valueResult = value) and (Level = 1)) then |
|
2158 |
begin |
|
2159 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 12)); |
|
2160 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 22 + 1); |
|
2161 |
valueResult:= value |
|
2162 |
end; |
|
2163 |
end |
|
2164 |
until rTime > 5050 - Level * 800; |
|
2165 |
TestKnife:= valueResult |
|
2166 |
end; |
|
2167 |
||
15636 | 2168 |
function TestAirMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2169 |
const |
|
2170 |
MIN_RANGE = 160; |
|
2171 |
MAX_RANGE = 2612; |
|
2172 |
var Vx, Vy, meX, meY, x, y, r: real; |
|
2173 |
rx, ry, valueResult: LongInt; |
|
2174 |
range, maxRange: integer; |
|
2175 |
begin |
|
2176 |
Flags:= Flags; // avoid compiler hint |
|
2177 |
maxRange:= MAX_RANGE - ((Level - 1) * 300); |
|
2178 |
TestAirMine:= BadTurn; |
|
2179 |
ap.ExplR:= 60; |
|
2180 |
ap.Time:= 0; |
|
2181 |
meX:= hwFloat2Float(Me^.X); |
|
2182 |
meY:= hwFloat2Float(Me^.Y); |
|
2183 |
x:= meX; |
|
2184 |
y:= meY; |
|
2185 |
||
2186 |
// Rough first range check |
|
2187 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
|
2188 |
if ( range < MIN_RANGE ) or ( range > maxRange ) then |
|
2189 |
exit(BadTurn); |
|
2190 |
||
2191 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
|
2192 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
|
2193 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
|
2194 |
repeat |
|
2195 |
x:= x + vX; |
|
2196 |
y:= y + vY; |
|
2197 |
rx:= trunc(x); |
|
2198 |
ry:= trunc(y); |
|
2199 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 8)) or |
|
2200 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 8)) then |
|
2201 |
begin |
|
2202 |
x:= x + vX * 8; |
|
2203 |
y:= y + vY * 8; |
|
2204 |
||
2205 |
if Level = 1 then |
|
2206 |
valueResult:= RateExplosion(Me, rx, ry, 61, afTrackFall) |
|
2207 |
else |
|
2208 |
valueResult:= RateExplosion(Me, rx, ry, 61); |
|
2209 |
||
2210 |
// Precise range calculation required to calculate power; |
|
2211 |
// The air mine is very sensitive to small changes in power. |
|
2212 |
r:= sqr(meX - rx) + sqr(meY - ry); |
|
2213 |
range:= trunc(sqrt(r)); |
|
2214 |
||
2215 |
if ( range < MIN_RANGE ) or ( range > maxRange ) then |
|
2216 |
exit(BadTurn); |
|
2217 |
ap.Power:= ((range + cHHRadius*2) * cMaxPower) div MAX_RANGE; |
|
2218 |
||
2219 |
// Apply inaccuracy |
|
2220 |
inc(ap.Power, (random(93*(Level-1)) - 31*(Level-1))); // Level 1 spread: -124 .. 248 |
|
15658 | 2221 |
if (not aiLaserSighting) then |
15636 | 2222 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 10))); |
2223 |
||
2224 |
if (valueResult <= 0) then |
|
2225 |
valueResult:= BadTurn; |
|
2226 |
exit(valueResult) |
|
2227 |
end |
|
2228 |
until (abs(Targ.Point.X - trunc(x)) + abs(Targ.Point.Y - trunc(y)) < 4) |
|
2229 |
or (x < 0) |
|
2230 |
or (y < 0) |
|
2231 |
or (trunc(x) > LAND_WIDTH) |
|
2232 |
or (trunc(y) > LAND_HEIGHT); |
|
2233 |
||
2234 |
TestAirMine := BadTurn |
|
2235 |
end; |
|
2236 |
||
15642
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2237 |
function TestMinigun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2238 |
const |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2239 |
MAX_RANGE = 400; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2240 |
var Vx, Vy, x, y: real; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2241 |
rx, ry, valueResult: LongInt; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2242 |
range: integer; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2243 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2244 |
// This code is still very similar to TestShotgun, |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2245 |
// but it's a good simple estimate. |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2246 |
// TODO: Simulate random bullets |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2247 |
// TODO: Replace RateShotgun with something else |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2248 |
// TODO: Teach AI to move aim during shooting |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2249 |
Flags:= Flags; // avoid compiler hint |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2250 |
TestMinigun:= BadTurn; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2251 |
ap.ExplR:= 0; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2252 |
ap.Time:= 0; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2253 |
ap.Power:= 1; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2254 |
x:= hwFloat2Float(Me^.X); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2255 |
y:= hwFloat2Float(Me^.Y); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2256 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2257 |
if ( range > MAX_RANGE ) then |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2258 |
exit(BadTurn); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2259 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2260 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2261 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2262 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2263 |
// Minigun angle is limited |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2264 |
if (ap.Angle < Ammoz[amMinigun].minAngle) or (ap.Angle > Ammoz[amMinigun].maxAngle) then |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2265 |
exit(BadTurn); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2266 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2267 |
// Apply inaccuracy |
15658 | 2268 |
if (not aiLaserSighting) then |
15642
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2269 |
inc(ap.Angle, + AIrndSign(random((Level - 1) * 10))); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2270 |
repeat |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2271 |
x:= x + vX; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2272 |
y:= y + vY; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2273 |
rx:= trunc(x); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2274 |
ry:= trunc(y); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2275 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 1)) or |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2276 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 1)) then |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2277 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2278 |
x:= x + vX * 8; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2279 |
y:= y + vY * 8; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2280 |
// TODO: Use different rating function |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2281 |
valueResult:= RateShotgun(Me, vX, vY, rx, ry); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2282 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2283 |
if (valueResult = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2284 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2285 |
if GameFlags and gfSolidLand = 0 then |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2286 |
valueResult:= 1024 - Metric(Targ.Point.X, Targ.Point.Y, rx, ry) div 64 |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2287 |
else valueResult := BadTurn |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2288 |
end |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2289 |
else |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2290 |
dec(valueResult, Level * 4000); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2291 |
exit(valueResult) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2292 |
end |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2293 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2294 |
or (x < 0) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2295 |
or (y < 0) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2296 |
or (trunc(x) > LAND_WIDTH) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2297 |
or (trunc(y) > LAND_HEIGHT); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2298 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2299 |
TestMinigun:= BadTurn |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2300 |
end; |
15636 | 2301 |
|
4 | 2302 |
end. |