author | unC0Rr |
Sun, 12 Feb 2023 15:10:10 +0100 | |
branch | transitional_engine |
changeset 15949 | 659c92124c26 |
parent 15929 | 128ace913837 |
child 16051 | 2003b466b279 |
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 |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15862
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 |
15713 | 32 |
amtest_NoLowGravity = $00000080; // don't use low gravity with this with ammo |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
33 |
|
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
34 |
var aiWindSpeed: real; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
35 |
aiGravity: hwFloat; |
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
36 |
aiGravityf: real; |
15658 | 37 |
aiLaserSighting: boolean; |
15762
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
38 |
aiHogsInTeam: LongInt; |
7078
a3408d9ba5ad
AI can't use cWindSpeedf since it now does a smooth transition
nemo
parents:
7041
diff
changeset
|
39 |
|
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
40 |
type TAttackParams = record |
15625 | 41 |
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
|
42 |
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
|
43 |
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
|
44 |
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
|
45 |
end; |
433 | 46 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
47 |
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
|
48 |
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
|
49 |
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
|
50 |
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
|
51 |
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
|
52 |
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
|
53 |
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
|
54 |
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
|
55 |
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
|
56 |
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
|
57 |
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
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
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
|
62 |
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
|
63 |
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
|
64 |
function TestAirAttack(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15626 | 65 |
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
|
66 |
function TestMineStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15752
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
67 |
function TestSineGun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15641 | 68 |
function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15630 | 69 |
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
|
70 |
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
|
71 |
function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15707 | 72 |
function TestResurrector(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
|
73 |
function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15640 | 74 |
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
|
75 |
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
|
76 |
function TestMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15639 | 77 |
function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15636 | 78 |
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
|
79 |
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
|
80 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
81 |
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
|
82 |
TAmmoTest = record |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
83 |
proc: TAmmoTestProc; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
84 |
flags: Longword; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
85 |
end; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
86 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
87 |
const AmmoTests: array[TAmmoType] of TAmmoTest = |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
88 |
( |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
89 |
(proc: nil; flags: 0), // amNothing |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
90 |
(proc: @TestGrenade; flags: 0), // amGrenade |
2978 | 91 |
(proc: @TestClusterBomb; flags: 0), // amClusterBomb |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
92 |
(proc: @TestBazooka; flags: 0), // amBazooka |
11474 | 93 |
(proc: @TestBee; flags: amtest_Rare), // amBee |
15658 | 94 |
(proc: @TestShotgun; flags: amtest_LaserSight), // amShotgun |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
95 |
(proc: nil; flags: 0), // amPickHammer |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
96 |
(proc: nil; flags: 0), // amSkip |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
97 |
(proc: nil; flags: 0), // amRope |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
98 |
(proc: @TestMine; flags: amtest_NoTarget), // amMine |
15658 | 99 |
(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
|
100 |
(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
|
101 |
(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
|
102 |
(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
|
103 |
(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
|
104 |
(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
|
105 |
(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
|
106 |
(proc: @TestMineStrike; flags: amtest_Rare), // amMineStrike |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
107 |
(proc: nil; flags: 0), // amBlowTorch |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
108 |
(proc: nil; flags: 0), // amGirder |
3739 | 109 |
(proc: nil; flags: 0), // amTeleport |
110 |
//(proc: @TestTeleport; flags: amtest_OnTurn), // amTeleport |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
111 |
(proc: nil; flags: 0), // amSwitch |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
112 |
(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
|
113 |
(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
|
114 |
(proc: @TestCake; flags: amtest_Rare or amtest_NoTarget), // amCake |
15640 | 115 |
(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
|
116 |
(proc: @TestWatermelon; flags: 0), // amWatermelon |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
117 |
(proc: nil; flags: 0), // amHellishBomb |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
118 |
(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
|
119 |
(proc: @TestDrillRocket; flags: 0), // amDrill |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
120 |
(proc: nil; flags: 0), // amBallgun |
15658 | 121 |
(proc: @TestRCPlane; flags: amtest_LaserSight), // amRCPlane |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
122 |
(proc: nil; flags: 0), // amLowGravity |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
123 |
(proc: nil; flags: 0), // amExtraDamage |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
124 |
(proc: nil; flags: 0), // amInvulnerable |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
125 |
(proc: nil; flags: 0), // amExtraTime |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
126 |
(proc: nil; flags: 0), // amLaserSight |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
127 |
(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
|
128 |
(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
|
129 |
(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
|
130 |
(proc: @TestMolotov; flags: 0), // amMolotov |
3350 | 131 |
(proc: nil; flags: 0), // amBirdy |
132 |
(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
|
133 |
(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
|
134 |
(proc: @TestGrenade; flags: amtest_NoTrackFall), // amGasBomb |
15752
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
135 |
(proc: @TestSineGun; flags: amtest_NoVampiric), // amSineGun |
3710 | 136 |
(proc: nil; flags: 0), // amFlamethrower |
15641 | 137 |
(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
|
138 |
(proc: @TestHammer; flags: amtest_NoTarget or amtest_NoInvulnerable), // amHammer |
15713 | 139 |
(proc: @TestResurrector; flags: amtest_NoTarget or amtest_NoInvulnerable or amtest_NoVampiric or amtest_NoLowGravity), // amResurrector |
15626 | 140 |
(proc: @TestDrillStrike; flags: amtest_Rare), // amDrillStrike |
15723 | 141 |
(proc: @TestSnowball; flags: amtest_NoInvulnerable or amtest_NoVampiric), // amSnowball |
4883
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4881
diff
changeset
|
142 |
(proc: nil; flags: 0), // amTardis |
7007 | 143 |
(proc: nil; flags: 0), // amLandGun |
7730
2013733f9ca9
A bit more on the knife. Also add missing files to CMakeLists
nemo
parents:
7721
diff
changeset
|
144 |
(proc: nil; flags: 0), // amIceGun |
15639 | 145 |
(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
|
146 |
(proc: nil; flags: 0), // amRubber |
15658 | 147 |
(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
|
148 |
(proc: nil; flags: 0), // amCreeper |
15661 | 149 |
(proc: @TestMinigun; flags: amtest_LaserSight), // amMinigun |
150 |
(proc: nil; flags: 0) // amSentry |
|
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
151 |
); |
4 | 152 |
|
153 |
implementation |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15862
diff
changeset
|
154 |
uses uVariables, uUtils, uGearsHandlers, uLandUtils; |
370
c75410fe3133
- Repair bots: they can walk and use bazooka, possible cannot jump (why?)
unc0rr
parents:
369
diff
changeset
|
155 |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15862
diff
changeset
|
156 |
function Metric(x1, y1, x2, y2: LongInt): LongInt; |
4 | 157 |
begin |
370
c75410fe3133
- Repair bots: they can walk and use bazooka, possible cannot jump (why?)
unc0rr
parents:
369
diff
changeset
|
158 |
Metric:= abs(x1 - x2) + abs(y1 - y2) |
4 | 159 |
end; |
160 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
161 |
function TestBazooka(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
14247 | 162 |
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
|
163 |
var Vx, Vy, r, mX, mY: real; |
498 | 164 |
rTime: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
165 |
EX, EY: LongInt; |
2695 | 166 |
valueResult: LongInt; |
13668 | 167 |
targXWrap, x, y, dX, dY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
168 |
t: LongInt; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
169 |
value: LongInt; |
4 | 170 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
171 |
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
|
172 |
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
|
173 |
mY:= hwFloat2Float(Me^.Y); |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
174 |
ap.Time:= 0; |
375 | 175 |
rTime:= 350; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
176 |
ap.ExplR:= 0; |
13669 | 177 |
if (WorldEdge = weWrap) then |
178 |
if (Targ.Point.X < mX) then |
|
179 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
180 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
2695 | 181 |
valueResult:= BadTurn; |
4 | 182 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
183 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13668 | 184 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
185 |
Vx:= - aiWindSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - mX) / rTime |
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
186 |
else Vx:= - aiWindSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) + AIrndOffset(Targ, Level) - mX) / rTime; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
187 |
Vy:= aiGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - mY) / rTime; |
6775 | 188 |
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
|
189 |
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
|
190 |
begin |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
191 |
x:= mX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
192 |
y:= mY; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
193 |
dX:= Vx; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
194 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
195 |
t:= rTime; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
196 |
repeat |
13668 | 197 |
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
|
198 |
x:= x + dX; |
13668 | 199 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
200 |
y:= y + dY; |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
201 |
dX:= dX + aiWindSpeed; |
13668 | 202 |
//dX:= CheckBounce(x,dX); |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
203 |
dY:= dY + aiGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
204 |
dec(t) |
8924 | 205 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
14247 | 206 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t < -cExtraTime); |
8924 | 207 |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
208 |
EX:= trunc(x); |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
209 |
EY:= trunc(y); |
14247 | 210 |
if t >= -cExtraTime then |
211 |
begin |
|
212 |
if Level = 1 then |
|
213 |
value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand) |
|
214 |
else |
|
215 |
value:= RateExplosion(Me, EX, EY, 101); |
|
216 |
end else |
|
217 |
value:= BadTurn; |
|
218 |
||
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
219 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
11476 | 220 |
if GameFlags and gfSolidLand = 0 then |
221 |
value := 1024 - Metric(Targ.Point.X, Targ.Point.Y, EX, EY) div 64 |
|
222 |
else value := BadTurn; |
|
14247 | 223 |
|
14248 | 224 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
6775 | 225 |
begin |
6894 | 226 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
6775 | 227 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
228 |
ap.ExplR:= 100; |
|
229 |
ap.ExplX:= EX; |
|
230 |
ap.ExplY:= EY; |
|
231 |
valueResult:= value |
|
232 |
end; |
|
233 |
end |
|
8903 | 234 |
until rTime > 5050 - Level * 800; |
2695 | 235 |
TestBazooka:= valueResult |
39 | 236 |
end; |
374 | 237 |
|
11474 | 238 |
function calcBeeFlight(Me: PGear; x, y, dx, dy, tX, tY: real; var eX, eY: LongInt): LongInt; |
239 |
var t: Longword; |
|
240 |
f: boolean; |
|
241 |
speed, d: real; |
|
242 |
begin |
|
243 |
// parabola flight before activation |
|
244 |
t:= 500; |
|
245 |
repeat |
|
246 |
x:= x + dx; |
|
247 |
y:= y + dy; |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
248 |
dy:= dy + aiGravityf; |
11474 | 249 |
f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
250 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5)); |
|
251 |
dec(t) |
|
252 |
until (t = 0) or (y >= cWaterLine) or f; |
|
253 |
||
254 |
if f then |
|
255 |
begin |
|
256 |
eX:= trunc(x); |
|
257 |
eY:= trunc(y); |
|
258 |
exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand)); |
|
259 |
end; |
|
11475 | 260 |
|
261 |
||
11474 | 262 |
// activated |
263 |
t:= 5000; |
|
11475 | 264 |
speed:= sqrt(sqr(dx) + sqr(dy)); |
265 |
||
11474 | 266 |
repeat |
267 |
if (t and $F) = 0 then |
|
268 |
begin |
|
11475 | 269 |
dx:= dx + 0.000064 * (tX - x); |
270 |
dy:= dy + 0.000064 * (tY - y); |
|
11474 | 271 |
d := speed / sqrt(sqr(dx) + sqr(dy)); |
272 |
dx:= dx * d; |
|
273 |
dy:= dy * d; |
|
11475 | 274 |
end; |
11474 | 275 |
|
276 |
x:= x + dx; |
|
277 |
y:= y + dy; |
|
278 |
f:= ((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
|
279 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5)); |
|
280 |
dec(t) |
|
281 |
until (t = 0) or f; |
|
282 |
||
283 |
if f then |
|
284 |
begin |
|
285 |
eX:= trunc(x); |
|
286 |
eY:= trunc(y); |
|
287 |
exit(RateExplosion(Me, eX, eY, 101, afTrackFall or afErasesLand)); |
|
288 |
end |
|
289 |
else |
|
290 |
calcBeeFlight:= BadTurn |
|
291 |
end; |
|
292 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
293 |
function TestBee(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
11474 | 294 |
var i, j: LongInt; |
11475 | 295 |
valueResult, v, a, p: LongInt; |
12621 | 296 |
mX, mY: real; |
11474 | 297 |
eX, eY: LongInt; |
298 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
299 |
Flags:= Flags; // avoid compiler hint |
11475 | 300 |
if Level > 1 then |
11474 | 301 |
exit(BadTurn); |
11475 | 302 |
|
11474 | 303 |
eX:= 0; |
304 |
eY:= 0; |
|
305 |
mX:= hwFloat2Float(Me^.X); |
|
306 |
mY:= hwFloat2Float(Me^.Y); |
|
307 |
valueResult:= BadTurn; |
|
308 |
for i:= 0 to 8 do |
|
309 |
for j:= 0 to 1 do |
|
310 |
begin |
|
11475 | 311 |
a:= i * 120; |
312 |
p:= random(cMaxPower - 200) + 180; |
|
313 |
||
314 |
if j = 0 then |
|
315 |
a:= -a; |
|
316 |
||
11474 | 317 |
v:= calcBeeFlight(Me |
318 |
, mX |
|
319 |
, mY |
|
11475 | 320 |
, sin(a * pi / 2048) * p / cPowerDivisor |
321 |
, -cos(a * pi / 2048) * p / cPowerDivisor |
|
11474 | 322 |
, Targ.Point.X |
323 |
, Targ.Point.Y |
|
324 |
, eX |
|
325 |
, eY); |
|
11475 | 326 |
|
11474 | 327 |
if v > valueResult then |
328 |
begin |
|
329 |
ap.ExplR:= 100; |
|
330 |
ap.ExplX:= eX; |
|
331 |
ap.ExplY:= eY; |
|
11475 | 332 |
ap.Angle:= a; |
333 |
ap.Power:= p; |
|
11474 | 334 |
valueResult:= v |
335 |
end |
|
336 |
end; |
|
337 |
||
338 |
ap.AttackPutX:= Targ.Point.X; |
|
339 |
ap.AttackPutY:= Targ.Point.Y; |
|
340 |
||
11475 | 341 |
if valueResult > 0 then |
342 |
TestBee:= valueResult - 5000 |
|
343 |
else |
|
344 |
TestBee:= BadTurn // no digging |
|
11474 | 345 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
346 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
347 |
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
|
348 |
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
|
349 |
rTime: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
350 |
EX, EY: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
351 |
valueResult: LongInt; |
13669 | 352 |
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
|
353 |
t: LongInt; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
354 |
value: LongInt; |
8777
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
355 |
t2: real; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
356 |
timer: Longint; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
357 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
358 |
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
|
359 |
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
|
360 |
|
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
361 |
mX:= hwFloat2Float(Me^.X); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
362 |
mY:= hwFloat2Float(Me^.Y); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
363 |
ap.Time:= 0; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
364 |
rTime:= 350; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
365 |
ap.ExplR:= 0; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
366 |
valueResult:= BadTurn; |
13669 | 367 |
if (WorldEdge = weWrap) then |
368 |
if (Targ.Point.X < mX) then |
|
369 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
370 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
10637 | 371 |
timer:= 0; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
372 |
repeat |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
373 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13669 | 374 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
375 |
Vx:= - aiWindSpeed * rTime * 0.5 + (targXWrap + AIrndSign(2) - mX) / rTime |
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
376 |
else Vx:= - aiWindSpeed * rTime * 0.5 + (Targ.Point.X + AIrndSign(2) - mX) / rTime; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
377 |
Vy:= aiGravityf * 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
|
378 |
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
|
379 |
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
|
380 |
begin |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
381 |
x:= mX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
382 |
y:= mY; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
383 |
dX:= Vx; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
384 |
dY:= -Vy; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
385 |
t:= rTime; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
386 |
repeat |
13669 | 387 |
x:= CheckWrap(x); |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
388 |
x:= x + dX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
389 |
y:= y + dY; |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
390 |
dX:= dX + aiWindSpeed; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
391 |
dY:= dY + aiGravityf; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
392 |
dec(t) |
8924 | 393 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 394 |
((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
|
395 |
|
8959 | 396 |
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
|
397 |
begin |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
398 |
timer := 500; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
399 |
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
|
400 |
dX := dX * t2; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
401 |
dY := dY * t2; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
402 |
repeat |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
403 |
x:= x + dX; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
404 |
y:= y + dY; |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
405 |
dec(timer); |
8959 | 406 |
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
|
407 |
or (x < 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
408 |
or (y < 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
409 |
or (trunc(x) > LAND_WIDTH) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
410 |
or (trunc(y) > LAND_HEIGHT) |
9136 | 411 |
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
|
412 |
or (timer = 0) |
cce79a042cfc
merge. hate the fact that "unsynced remote changes" is just a "note" now.
nemo
parents:
8751
diff
changeset
|
413 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
414 |
EX:= trunc(x); |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
415 |
EY:= trunc(y); |
8862 | 416 |
// Try to prevent AI from thinking firing into water will cause a drowning |
15751
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
417 |
if (EY < cWaterLine-5) and (timer > 0) and (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) > 21) then |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
418 |
value:= BadTurn |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
419 |
else if Level = 1 then |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
420 |
value:= RateExplosion(Me, EX, EY, 101, afTrackFall or afErasesLand) |
15751
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
421 |
else |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
422 |
value:= RateExplosion(Me, EX, EY, 101); |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
423 |
if valueResult <= value then |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
424 |
begin |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
425 |
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
|
426 |
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
|
427 |
ap.ExplR:= 100; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
428 |
ap.ExplX:= EX; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
429 |
ap.ExplY:= EY; |
8824
fe9eacd390f2
Unbreak lua localisation, fix untranslated login prompt, update translations.
nemo
parents:
8822
diff
changeset
|
430 |
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
|
431 |
end; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
432 |
end |
8903 | 433 |
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
|
434 |
TestDrillRocket:= valueResult |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
435 |
end; |
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
436 |
|
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
437 |
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
|
438 |
const |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
439 |
MIN_RANGE = 200; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
440 |
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
|
441 |
rx, ry, valueResult: LongInt; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
442 |
range, maxRange: integer; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
443 |
begin |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
444 |
// 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
|
445 |
// 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
|
446 |
// 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
|
447 |
// 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
|
448 |
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
|
449 |
if Level = 5 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
450 |
exit(BadTurn) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
451 |
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
|
452 |
maxRange:= 2200 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
453 |
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
|
454 |
maxRange:= 2900 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
455 |
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
|
456 |
maxRange:= 3500 |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
457 |
else |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
458 |
maxRange:= 3900; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
459 |
TestRCPlane:= BadTurn; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
460 |
ap.ExplR:= 0; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
461 |
ap.Time:= 0; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
462 |
ap.Power:= 1; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
463 |
meX:= hwFloat2Float(Me^.X); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
464 |
meY:= hwFloat2Float(Me^.Y); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
465 |
x:= meX; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
466 |
y:= meY; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
467 |
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
|
468 |
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
|
469 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
470 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
471 |
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
|
472 |
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
|
473 |
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
|
474 |
repeat |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
475 |
x:= x + vX; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
476 |
y:= y + vY; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
477 |
rx:= trunc(x); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
478 |
ry:= trunc(y); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
479 |
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
|
480 |
((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
|
481 |
begin |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
482 |
x:= x + vX * 8; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
483 |
y:= y + vY * 8; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
484 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
485 |
// 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
|
486 |
if Level = 1 then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
487 |
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
|
488 |
else |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
489 |
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
|
490 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
491 |
// 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
|
492 |
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
|
493 |
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
|
494 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
495 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
496 |
// 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
|
497 |
// 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
|
498 |
if (Level < 3) and (range <= 600) and (meY >= ry) and |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
499 |
(((ap.Angle < 0) and (aiWindSpeed > 0)) or ((ap.Angle > 0) and (aiWindSpeed < 0))) then |
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
500 |
exit(BadTurn); |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
501 |
|
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
502 |
// Apply inaccuracy |
15658 | 503 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
504 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 9))); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
505 |
|
15634
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
506 |
if (valueResult <= 0) then |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
507 |
valueResult:= BadTurn; |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
508 |
exit(valueResult) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
509 |
end |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
510 |
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
|
511 |
or (x < 0) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
512 |
or (y < 0) |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
513 |
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
|
514 |
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
|
515 |
|
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
516 |
TestRCPlane:= BadTurn |
be8fe5e0789e
Teach AI to use RC plane (straight line only, no bombs)
Wuzzy <Wuzzy2@mail.ru>
parents:
15632
diff
changeset
|
517 |
end; |
8033
4e40503e2b2c
Pretend AI knows how to use drill rocket (actually has no idea of drilling)
unc0rr
parents:
8013
diff
changeset
|
518 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
519 |
function TestSnowball(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15723 | 520 |
const timeLimit = 5000; |
521 |
Density : real = 0.5; |
|
6775 | 522 |
var Vx, Vy, r: real; |
4580 | 523 |
rTime: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
524 |
EX, EY: LongInt; |
4580 | 525 |
valueResult: LongInt; |
13669 | 526 |
targXWrap, x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
527 |
t: LongInt; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
528 |
value: LongInt; |
4580 | 529 |
|
530 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
531 |
Flags:= Flags; // avoid compiler hint |
6775 | 532 |
meX:= hwFloat2Float(Me^.X); |
533 |
meY:= hwFloat2Float(Me^.Y); |
|
4580 | 534 |
ap.Time:= 0; |
535 |
rTime:= 350; |
|
536 |
ap.ExplR:= 0; |
|
537 |
valueResult:= BadTurn; |
|
13669 | 538 |
if (WorldEdge = weWrap) then |
539 |
if (Targ.Point.X < meX) then |
|
540 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
15723 | 541 |
else |
542 |
targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
4580 | 543 |
repeat |
15723 | 544 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13669 | 545 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15723 | 546 |
Vx:= (targXWrap - meX) / rTime |
547 |
else |
|
548 |
Vx:= (Targ.Point.X - meX) / rTime; |
|
549 |
if (GameFlags and gfMoreWind) <> 0 then |
|
550 |
Vx:= -(aiWindSpeed / Density) * rTime * 0.5 + Vx |
|
551 |
else |
|
552 |
Vx:= -aiWindSpeed * rTime * 0.5 + Vx; |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
553 |
Vy:= aiGravityf * rTime * 0.5 - (Targ.Point.Y - meY) / rTime; |
6775 | 554 |
r:= sqr(Vx) + sqr(Vy); |
15723 | 555 |
|
6775 | 556 |
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
|
557 |
begin |
6775 | 558 |
x:= meX; |
559 |
y:= meY; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
560 |
dX:= Vx; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
561 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
562 |
t:= rTime; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
563 |
repeat |
13669 | 564 |
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
|
565 |
x:= x + dX; |
15723 | 566 |
if (GameFlags and gfMoreWind) <> 0 then |
567 |
dX:= dX + aiWindSpeed / Density |
|
568 |
else |
|
569 |
dX:= dX + aiWindSpeed; |
|
570 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
571 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
572 |
dY:= dY + aiGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
573 |
dec(t) |
15723 | 574 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 4)) or |
575 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 4))) or (trunc(y) > cWaterLine) or (t < -timeLimit); |
|
576 |
||
6775 | 577 |
EX:= trunc(x); |
578 |
EY:= trunc(y); |
|
579 |
||
15723 | 580 |
// Sanity check: Make sure we're not too close to impact location |
581 |
if (Metric(trunc(meX), trunc(meY), EX, EY) <= 40) then |
|
582 |
value:= BadTurn |
|
583 |
// Rate attack |
|
584 |
else if (t >= -timeLimit) and (EY <= cWaterLine) then |
|
585 |
// radius intentionally set to 16 for shove because lower values don't work reliably |
|
586 |
value:= RateShove(Me, EX, EY, 16, 0, trunc((abs(dX)+abs(dY))*20), dX, dY, afTrackFall) |
|
587 |
else |
|
588 |
value:= BadTurn; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
589 |
|
15723 | 590 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
591 |
value := BadTurn; |
|
592 |
||
593 |
if (valueResult < value) or ((valueResult = value) and (Level = 1)) then |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
594 |
begin |
15723 | 595 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 12)); |
596 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 22 + 1); |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
597 |
ap.ExplX:= EX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
598 |
ap.ExplY:= EY; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
599 |
valueResult:= value |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
600 |
end; |
15723 | 601 |
end |
602 |
until rTime > 5050 - Level * 800; |
|
4580 | 603 |
TestSnowball:= valueResult |
604 |
end; |
|
605 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
606 |
function TestMolotov(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15635 | 607 |
const timeLimit = 50; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
608 |
Density : real = 2.0; |
15635 | 609 |
var Vx, Vy, r, meX, meY: real; |
610 |
rTime: LongInt; |
|
611 |
EX, EY: LongInt; |
|
612 |
valueResult: LongInt; |
|
613 |
targXWrap, x, y, dX, dY: real; |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
614 |
t: LongInt; |
15635 | 615 |
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
|
616 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
617 |
Flags:= Flags; // avoid compiler hint |
6775 | 618 |
meX:= hwFloat2Float(Me^.X); |
619 |
meY:= hwFloat2Float(Me^.Y); |
|
15635 | 620 |
ap.Time:= 0; |
621 |
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
|
622 |
ap.ExplR:= 0; |
13669 | 623 |
if (WorldEdge = weWrap) then |
624 |
if (Targ.Point.X < meX) then |
|
625 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
626 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
15635 | 627 |
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
|
628 |
repeat |
15635 | 629 |
rTime:= rTime + 300 + Level * 50 + random(300); |
13669 | 630 |
if (WorldEdge = weWrap) and (random(2)=0) then |
15635 | 631 |
Vx:= (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime |
632 |
else |
|
633 |
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
|
634 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
635 |
Vx:= -(aiWindSpeed / Density) * rTime * 0.5 + Vx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
636 |
Vy:= aiGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
6775 | 637 |
r:= sqr(Vx) + sqr(Vy); |
15635 | 638 |
|
6775 | 639 |
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
|
640 |
begin |
6775 | 641 |
x:= meX; |
642 |
y:= meY; |
|
15635 | 643 |
dX:= Vx; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
644 |
dY:= -Vy; |
15635 | 645 |
t:= rTime; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
646 |
repeat |
13669 | 647 |
x:= CheckWrap(x); |
15635 | 648 |
x:= x + dX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
649 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
650 |
dX:= dX + aiWindSpeed / Density; |
15635 | 651 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
652 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
653 |
dY:= dY + aiGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
654 |
dec(t) |
15635 | 655 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
656 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t < -timeLimit); |
|
657 |
||
6775 | 658 |
EX:= trunc(x); |
659 |
EY:= trunc(y); |
|
15750 | 660 |
range:= Metric(trunc(meX), trunc(meY), EX, EY); |
15635 | 661 |
|
15750 | 662 |
// Sanity check 1: Make sure we've hit a hedgehog or object |
663 |
if not TestCollHogsOrObjects(EX, EY, 5) then |
|
664 |
value:= BadTurn |
|
665 |
// Sanity check 2: Make sure we're not too close to impact location |
|
666 |
else if (range < 150) and (Level < 5) then |
|
667 |
value:= BadTurn |
|
668 |
// Sanity check 3: If impact location is close, above us and wind blows |
|
15635 | 669 |
// towards us, there's a risk of fire flying towards us, so fail in this case. |
15862 | 670 |
else if (Level < 3) and (range <= 1000) and (trunc(meY) >= EY) and |
671 |
((ap.Angle < 0) <> (aiWindSpeed < 0)) then |
|
15750 | 672 |
value:= BadTurn |
673 |
// Timeout |
|
674 |
else if t < -timeLimit then |
|
675 |
value:= BadTurn |
|
15635 | 676 |
else |
15750 | 677 |
// Valid hit! |
678 |
// Weapon does not actually explode, so this rating is an approximation |
|
679 |
value:= RateExplosion(Me, EX, EY, 97); // average of 17 attempts, most good, but some failing spectacularly |
|
15635 | 680 |
|
681 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
682 |
value := BadTurn; |
|
683 |
||
684 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
685 |
begin |
15635 | 686 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
687 |
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
|
688 |
ap.ExplR:= 100; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
689 |
ap.ExplX:= EX; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
690 |
ap.ExplY:= EY; |
15635 | 691 |
valueResult:= value |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
692 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
693 |
end |
15635 | 694 |
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
|
695 |
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
|
696 |
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
|
697 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
698 |
function TestGrenade(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
70 | 699 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
700 |
Density : real = 1.5; |
6775 | 701 |
var Vx, Vy, r: real; |
2695 | 702 |
Score, EX, EY, valueResult: LongInt; |
9145 | 703 |
TestTime: LongInt; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
704 |
targXWrap, x, y, meX, meY, dX, dY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
705 |
t: LongInt; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
706 |
begin |
2695 | 707 |
valueResult:= BadTurn; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
708 |
TestTime:= 0; |
15625 | 709 |
ap.Bounce:= 0; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
710 |
ap.ExplR:= 0; |
6775 | 711 |
meX:= hwFloat2Float(Me^.X); |
712 |
meY:= hwFloat2Float(Me^.Y); |
|
13669 | 713 |
if (WorldEdge = weWrap) then |
714 |
if (Targ.Point.X < meX) then |
|
715 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
716 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
717 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
718 |
inc(TestTime, 1000); |
13669 | 719 |
if (WorldEdge = weWrap) and (random(2)=0) then |
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
14217
diff
changeset
|
720 |
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
|
721 |
else |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
722 |
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
|
723 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
724 |
Vx:= -(aiWindSpeed / Density) * (TestTime + tDelta) * 0.5 + Vx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
725 |
Vy:= aiGravityf * ((TestTime + tDelta) div 2) - (Targ.Point.Y - meY) / (TestTime + tDelta); |
6775 | 726 |
r:= sqr(Vx) + sqr(Vy); |
727 |
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
|
728 |
begin |
6775 | 729 |
x:= meX; |
8924 | 730 |
y:= meY; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
731 |
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
|
732 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
733 |
t:= TestTime; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
734 |
repeat |
13669 | 735 |
x:= CheckWrap(x); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
736 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
737 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
738 |
dX:= dX + aiWindSpeed / Density; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
739 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
740 |
dY:= dY + aiGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
741 |
dec(t) |
8924 | 742 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 743 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0); |
6775 | 744 |
EX:= trunc(x); |
745 |
EY:= trunc(y); |
|
8924 | 746 |
if t < 50 then |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
747 |
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
|
748 |
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
|
749 |
else Score:= RateExplosion(Me, EX, EY, 101) |
8924 | 750 |
else |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
751 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
752 |
|
8013 | 753 |
if (valueResult < Score) and (Score > 0) then |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
754 |
begin |
8903 | 755 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 3)); |
756 |
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
|
757 |
ap.Time:= TestTime; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
758 |
ap.ExplR:= 100; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
759 |
ap.ExplX:= EX; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
760 |
ap.ExplY:= EY; |
2695 | 761 |
valueResult:= Score |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
762 |
end; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
763 |
end |
6772 | 764 |
//until (Score > 204800) or (TestTime > 4000); |
8903 | 765 |
until TestTime > 4500 - Level * 512; |
2695 | 766 |
TestGrenade:= valueResult |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
767 |
end; |
375 | 768 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
769 |
function TestClusterBomb(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2978 | 770 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
771 |
Density : real = 1.5; |
6775 | 772 |
var Vx, Vy, r: real; |
2978 | 773 |
Score, EX, EY, valueResult: LongInt; |
774 |
TestTime: Longword; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
775 |
x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
776 |
t: LongInt; |
2978 | 777 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
778 |
Flags:= Flags; // avoid compiler hint |
2978 | 779 |
valueResult:= BadTurn; |
7441 | 780 |
TestTime:= 500; |
15625 | 781 |
ap.Bounce:= 0; |
2978 | 782 |
ap.ExplR:= 0; |
6775 | 783 |
meX:= hwFloat2Float(Me^.X); |
784 |
meY:= hwFloat2Float(Me^.Y); |
|
2978 | 785 |
repeat |
7441 | 786 |
inc(TestTime, 900); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
787 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
788 |
Vx:= (-(aiWindSpeed / 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
|
789 |
// 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
|
790 |
else if meX<Targ.Point.X then |
8959 | 791 |
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
|
792 |
else |
8959 | 793 |
Vx:= ((Targ.Point.X-10) - meX) / (TestTime + tDelta); |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
794 |
Vy:= aiGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta); |
6775 | 795 |
r:= sqr(Vx)+sqr(Vy); |
796 |
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
|
797 |
begin |
6775 | 798 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
799 |
dX:= Vx; |
6775 | 800 |
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
|
801 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
802 |
t:= TestTime; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
803 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
804 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
805 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
806 |
dX:= dX + aiWindSpeed / Density; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
807 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
808 |
dY:= dY + aiGravityf; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
809 |
dec(t) |
8924 | 810 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 5)) or |
8895 | 811 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 5))) or (t = 0); |
6775 | 812 |
EX:= trunc(x); |
813 |
EY:= trunc(y); |
|
8924 | 814 |
if t < 50 then |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
815 |
Score:= RateExplosion(Me, EX, EY, 41) |
8924 | 816 |
else |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
817 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
818 |
|
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
|
819 |
if Score > 0 then |
2978 | 820 |
begin |
8903 | 821 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level * 2)); |
7132 | 822 |
ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15); |
7441 | 823 |
ap.Time:= TestTime div 1000 * 1000; |
2978 | 824 |
ap.ExplR:= 90; |
825 |
ap.ExplX:= EX; |
|
826 |
ap.ExplY:= EY; |
|
827 |
valueResult:= Score |
|
828 |
end; |
|
829 |
end |
|
7441 | 830 |
until (TestTime = 4100); |
2978 | 831 |
TestClusterBomb:= valueResult |
832 |
end; |
|
833 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
834 |
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
|
835 |
const tDelta = 24; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
836 |
Density : real = 2.0; |
6775 | 837 |
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
|
838 |
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
|
839 |
TestTime: Longword; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
840 |
targXWrap, x, y, dX, dY, meX, meY: real; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
841 |
t: LongInt; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
842 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
843 |
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
|
844 |
valueResult:= BadTurn; |
7441 | 845 |
TestTime:= 500; |
2973
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
846 |
ap.ExplR:= 0; |
6775 | 847 |
meX:= hwFloat2Float(Me^.X); |
848 |
meY:= hwFloat2Float(Me^.Y); |
|
13671 | 849 |
if (WorldEdge = weWrap) then |
850 |
if (Targ.Point.X < meX) then |
|
851 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
852 |
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
|
853 |
repeat |
7441 | 854 |
inc(TestTime, 900); |
13671 | 855 |
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
|
856 |
Vx:= (targXWrap - meX) / (TestTime + tDelta) |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
857 |
else |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
858 |
Vx:= (Targ.Point.X - meX) / (TestTime + tDelta); |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
859 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
860 |
Vx:= -(aiWindSpeed / Density) * (TestTime + tDelta) * 0.5 + Vx; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
861 |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
862 |
Vy:= aiGravityf * ((TestTime + tDelta) div 2) - ((Targ.Point.Y-50) - meY) / (TestTime + tDelta); |
6775 | 863 |
r:= sqr(Vx)+sqr(Vy); |
864 |
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
|
865 |
begin |
6775 | 866 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
867 |
dX:= Vx; |
6775 | 868 |
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
|
869 |
dY:= -Vy; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
870 |
t:= TestTime; |
7132 | 871 |
repeat |
13671 | 872 |
x:= CheckWrap(x); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
873 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
874 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
875 |
dX:= dX + aiWindSpeed / Density; |
7132 | 876 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
877 |
dY:= dY + aiGravityf; |
7132 | 878 |
dec(t) |
8924 | 879 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 6)) or |
8895 | 880 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 6))) or (t = 0); |
8924 | 881 |
|
7132 | 882 |
EX:= trunc(x); |
883 |
EY:= trunc(y); |
|
8924 | 884 |
if t < 50 then |
7132 | 885 |
Score:= RateExplosion(Me, EX, EY, 200) + RateExplosion(Me, EX, EY + 120, 200) |
8924 | 886 |
else |
7132 | 887 |
Score:= BadTurn; |
8924 | 888 |
|
7132 | 889 |
if valueResult < Score then |
890 |
begin |
|
891 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level)); |
|
892 |
ap.Power:= trunc(sqrt(r) * cMaxPower) + AIrndSign(random(Level) * 15); |
|
7441 | 893 |
ap.Time:= TestTime div 1000 * 1000; |
7132 | 894 |
ap.ExplR:= 300; |
895 |
ap.ExplX:= EX; |
|
896 |
ap.ExplY:= EY; |
|
897 |
valueResult:= Score |
|
898 |
end; |
|
899 |
end |
|
7441 | 900 |
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
|
901 |
TestWatermelon:= valueResult |
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
902 |
end; |
b51a0f57cd43
Crude copy of grenade routine to allow AI to use watermelon bomb with reasonable lethalness.
nemo
parents:
2948
diff
changeset
|
903 |
|
994 | 904 |
|
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
905 |
function Solve(TX, TY, MX, MY: LongInt): LongWord; |
6775 | 906 |
var A, B, D, T: real; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
907 |
C: LongInt; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
908 |
begin |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
909 |
A:= sqr(aiGravityf); |
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
910 |
B:= - aiGravityf * (TY - MY) - 1; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
911 |
C:= sqr(TY - MY) + sqr(TX - MX); |
7132 | 912 |
D:= sqr(B) - A * C; |
6775 | 913 |
if D >= 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
914 |
begin |
7132 | 915 |
D:= sqrt(D) - B; |
6775 | 916 |
if D >= 0 then |
7132 | 917 |
T:= sqrt(D * 2 / A) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
918 |
else |
6775 | 919 |
T:= 0; |
920 |
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
|
921 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
922 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
923 |
Solve:= 0 |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
924 |
end; |
8924 | 925 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
926 |
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
|
927 |
const Density : real = 1.0; |
6775 | 928 |
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
|
929 |
Score, EX, EY: LongInt; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
930 |
TestTime: Longword; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
931 |
x, y, dX, dY, meX, meY: real; |
994 | 932 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
933 |
Flags:= Flags; // avoid compiler hint |
7041 | 934 |
TestMortar:= BadTurn; |
935 |
ap.ExplR:= 0; |
|
7790 | 936 |
|
7041 | 937 |
meX:= hwFloat2Float(Me^.X); |
938 |
meY:= hwFloat2Float(Me^.Y); |
|
994 | 939 |
|
7041 | 940 |
if (Level > 2) then |
941 |
exit(BadTurn); |
|
994 | 942 |
|
8959 | 943 |
TestTime:= Solve(Targ.Point.X, Targ.Point.Y, trunc(meX), trunc(meY)); |
994 | 944 |
|
7041 | 945 |
if TestTime = 0 then |
946 |
exit(BadTurn); |
|
994 | 947 |
|
8959 | 948 |
Vx:= (Targ.Point.X - meX) / TestTime; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
949 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
950 |
Vx:= -(aiWindSpeed / Density) * TestTime * 0.5 + Vx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
951 |
Vy:= aiGravityf * (TestTime div 2) - (Targ.Point.Y - meY) / TestTime; |
994 | 952 |
|
6775 | 953 |
x:= meX; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
954 |
dX:= Vx; |
6775 | 955 |
y:= meY; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
956 |
dY:= -Vy; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
957 |
|
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
958 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
959 |
x:= x + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
960 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
961 |
dX:= dX + aiWindSpeed / Density; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
962 |
y:= y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
963 |
dY:= dY + aiGravityf; |
6775 | 964 |
EX:= trunc(x); |
965 |
EY:= trunc(y); |
|
8924 | 966 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(EX, EY, 4)) or |
8895 | 967 |
((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
|
968 |
|
6775 | 969 |
if (EY < cWaterLine) and (dY >= 0) then |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
970 |
begin |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
971 |
Score:= RateExplosion(Me, EX, EY, 91); |
9005 | 972 |
if (Score = 0) then |
973 |
if (dY > 0.15) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
8959 | 974 |
Score:= - abs(Targ.Point.Y - EY) div 32 |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
975 |
else |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
976 |
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
|
977 |
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
|
978 |
Score:= BadTurn |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
979 |
end |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
980 |
else |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
981 |
Score:= BadTurn; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6453
diff
changeset
|
982 |
|
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
983 |
if Score > 0 then |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
984 |
begin |
6894 | 985 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random(Level)); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
986 |
ap.Power:= 1; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
987 |
ap.ExplR:= 100; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
988 |
ap.ExplX:= EX; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
989 |
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
|
990 |
TestMortar:= Score |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2695
diff
changeset
|
991 |
end; |
994 | 992 |
end; |
993 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
994 |
function TestShotgun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1941 | 995 |
const |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
996 |
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
|
997 |
MAX_RANGE = 400; |
6775 | 998 |
var Vx, Vy, x, y: real; |
2695 | 999 |
rx, ry, valueResult: LongInt; |
1941 | 1000 |
range: integer; |
375 | 1001 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1002 |
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
|
1003 |
TestShotgun:= BadTurn; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1004 |
ap.ExplR:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1005 |
ap.Time:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1006 |
ap.Power:= 1; |
6775 | 1007 |
x:= hwFloat2Float(Me^.X); |
1008 |
y:= hwFloat2Float(Me^.Y); |
|
8959 | 1009 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
15728
f2930fe1b6d0
AI: Laser sight removes upper range cap for shotgun
Wuzzy <Wuzzy2@mail.ru>
parents:
15724
diff
changeset
|
1010 |
// Range limits (laser sight can remove upper range limit) |
f2930fe1b6d0
AI: Laser sight removes upper range cap for shotgun
Wuzzy <Wuzzy2@mail.ru>
parents:
15724
diff
changeset
|
1011 |
if (range < MIN_RANGE) or ((range > MAX_RANGE) and (not aiLaserSighting) and (Level >= 4))then |
7041 | 1012 |
exit(BadTurn); |
1013 |
||
8959 | 1014 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
1015 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
|
6894 | 1016 |
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
|
1017 |
// Apply inaccuracy |
15658 | 1018 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
1019 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 10))); |
70 | 1020 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1021 |
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
|
1022 |
y:= y + vY; |
6775 | 1023 |
rx:= trunc(x); |
1024 |
ry:= trunc(y); |
|
8924 | 1025 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 2)) or |
8895 | 1026 |
((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
|
1027 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1028 |
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
|
1029 |
y:= y + vY * 8; |
6775 | 1030 |
valueResult:= RateShotgun(Me, vX, vY, rx, ry); |
8924 | 1031 |
|
8998
d38fb4158342
trying to prevent the AI from attacking barrels. feedback on this welcome.
nemo
parents:
8974
diff
changeset
|
1032 |
if (valueResult = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
11476 | 1033 |
begin |
1034 |
if GameFlags and gfSolidLand = 0 then |
|
1035 |
valueResult:= 1024 - Metric(Targ.Point.X, Targ.Point.Y, rx, ry) div 64 |
|
1036 |
else valueResult := BadTurn |
|
1037 |
end |
|
8924 | 1038 |
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
|
1039 |
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
|
1040 |
// 27/20 is reuse bonus |
7041 | 1041 |
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
|
1042 |
end |
8959 | 1043 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
6775 | 1044 |
or (x < 0) |
1045 |
or (y < 0) |
|
1046 |
or (trunc(x) > LAND_WIDTH) |
|
1047 |
or (trunc(y) > LAND_HEIGHT); |
|
4157 | 1048 |
|
375 | 1049 |
TestShotgun:= BadTurn |
70 | 1050 |
end; |
438 | 1051 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1052 |
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
|
1053 |
var Vx, Vy, x, y, t: real; |
75 | 1054 |
d: Longword; |
10097 | 1055 |
ix, iy, valueResult: LongInt; |
75 | 1056 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1057 |
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
|
1058 |
if (Level > 4) or (Targ.Score < 0) or (Targ.Kind <> gtHedgehog) then exit(BadTurn); |
3407 | 1059 |
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
|
1060 |
ap.ExplR:= 1; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1061 |
ap.Time:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1062 |
ap.Power:= 1; |
7471 | 1063 |
|
6775 | 1064 |
x:= hwFloat2Float(Me^.X); |
1065 |
y:= hwFloat2Float(Me^.Y); |
|
7471 | 1066 |
|
8959 | 1067 |
if Abs(trunc(x) - Targ.Point.X) + Abs(trunc(y) - Targ.Point.Y) < 20 then |
7041 | 1068 |
exit(BadTurn); |
7471 | 1069 |
|
8959 | 1070 |
t:= 2 / sqrt(sqr(Targ.Point.X - x)+sqr(Targ.Point.Y-y)); |
1071 |
Vx:= (Targ.Point.X - x) * t; |
|
1072 |
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
|
1073 |
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
|
1074 |
// Apply inaccuracy |
15658 | 1075 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
1076 |
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
|
1077 |
d:= 0; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1078 |
|
10097 | 1079 |
ix:= trunc(x); |
1080 |
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
|
1081 |
|
10097 | 1082 |
if ((ix and LAND_WIDTH_MASK) = 0) and ((iy and LAND_HEIGHT_MASK) = 0) then |
1083 |
repeat |
|
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15862
diff
changeset
|
1084 |
if LandGet(iy, ix) <> 0 then |
10097 | 1085 |
inc(d); |
1086 |
x:= x + vX; |
|
1087 |
y:= y + vY; |
|
1088 |
ix:= trunc(x); |
|
1089 |
iy:= trunc(y); |
|
1090 |
until (Abs(Targ.Point.X - ix) + Abs(Targ.Point.Y - iy) < 5) |
|
1091 |
or (x < 0) |
|
1092 |
or (y < 0) |
|
1093 |
or (ix >= LAND_WIDTH) |
|
1094 |
or (iy >= LAND_HEIGHT) |
|
1095 |
or (d > 48); |
|
1096 |
||
1097 |
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
|
1098 |
begin |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1099 |
ap.AttacksNum:= 1 + (d + 8) div 12; |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1100 |
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
|
1101 |
end |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1102 |
else |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1103 |
valueResult:= BadTurn; |
2fc346fadae3
- AI quickly shoots with desert eagle till hits the target
unc0rr
parents:
9145
diff
changeset
|
1104 |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1105 |
TestDesertEagle:= valueResult |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1106 |
end; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1107 |
|
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1108 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1109 |
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
|
1110 |
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
|
1111 |
d: Longword; |
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
1112 |
//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
|
1113 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1114 |
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
|
1115 |
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
|
1116 |
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
|
1117 |
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
|
1118 |
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
|
1119 |
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
|
1120 |
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
|
1121 |
y:= hwFloat2Float(Me^.Y); |
8959 | 1122 |
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
|
1123 |
exit(BadTurn); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1124 |
|
8959 | 1125 |
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
|
1126 |
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
|
1127 |
dmg:= dmg * 0.025; // div 40 |
8959 | 1128 |
Vx:= (Targ.Point.X - x) * t; |
1129 |
Vy:= (Targ.Point.Y - y) * t; |
|
6894 | 1130 |
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
|
1131 |
// Apply inaccuracy |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
1132 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 5))); |
15637
250c778463f3
"Teach" AI hogs to be inaccurate with guns (and kamikaze)
Wuzzy <Wuzzy2@mail.ru>
parents:
15636
diff
changeset
|
1133 |
|
75 | 1134 |
d:= 0; |
1941 | 1135 |
|
75 | 1136 |
repeat |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1137 |
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
|
1138 |
y:= y + vY; |
6775 | 1139 |
if ((trunc(x) and LAND_WIDTH_MASK) = 0)and((trunc(y) and LAND_HEIGHT_MASK) = 0) |
15929
128ace913837
Introduce hwengine-future library, use Land allocated in it
unC0Rr
parents:
15862
diff
changeset
|
1140 |
and (LandGet(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
|
1141 |
inc(d); |
8959 | 1142 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4) |
6775 | 1143 |
or (x < 0) |
1144 |
or (y < 0) |
|
1145 |
or (trunc(x) > LAND_WIDTH) |
|
1146 |
or (trunc(y) > LAND_HEIGHT) |
|
7873 | 1147 |
or (d > 22); |
1941 | 1148 |
|
8959 | 1149 |
if Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 4 then |
1150 |
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
|
1151 |
else TestSniperRifle:= BadTurn; |
75 | 1152 |
end; |
438 | 1153 |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7178
diff
changeset
|
1154 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1155 |
function TestBaseballBat(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7212 | 1156 |
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
|
1157 |
x, y, trackFall: LongInt; |
7212 | 1158 |
dx, dy: real; |
79 | 1159 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1160 |
Flags:= Flags; // avoid compiler hint |
7716 | 1161 |
Targ:= Targ; // avoid compiler hint |
1162 |
||
7471 | 1163 |
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
|
1164 |
else trackFall:= 0; |
7471 | 1165 |
|
7212 | 1166 |
ap.ExplR:= 0; |
1167 |
ap.Time:= 0; |
|
1168 |
ap.Power:= 1; |
|
1169 |
x:= hwRound(Me^.X); |
|
1170 |
y:= hwRound(Me^.Y); |
|
1171 |
||
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1172 |
a:= cMaxAngle div 2; |
7212 | 1173 |
valueResult:= 0; |
1174 |
||
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1175 |
while a >= 0 do |
7212 | 1176 |
begin |
1177 |
dx:= sin(a / cMaxAngle * pi) * 0.5; |
|
1178 |
dy:= cos(a / cMaxAngle * pi) * 0.5; |
|
433 | 1179 |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1180 |
v1:= RateShove(Me, x - 10, y + 2 |
7427 | 1181 |
, 32, 30, 115 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1182 |
, -dx, -dy, trackFall); |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1183 |
v2:= RateShove(Me, x + 10, y + 2 |
7427 | 1184 |
, 32, 30, 115 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1185 |
, dx, -dy, trackFall); |
7212 | 1186 |
if (v1 > valueResult) or (v2 > valueResult) then |
8924 | 1187 |
if (v2 > v1) |
7212 | 1188 |
or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then |
1189 |
begin |
|
1190 |
ap.Angle:= a; |
|
1191 |
valueResult:= v2 |
|
1192 |
end |
|
8924 | 1193 |
else |
7212 | 1194 |
begin |
1195 |
ap.Angle:= -a; |
|
1196 |
valueResult:= v1 |
|
1197 |
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
|
1198 |
|
7424
fe0f07667f24
Prefer to bat enemy away dealing the same amount of damage
unc0rr
parents:
7416
diff
changeset
|
1199 |
a:= a - 15 - random(cMaxAngle div 16) |
7212 | 1200 |
end; |
8924 | 1201 |
|
7212 | 1202 |
if valueResult <= 0 then |
1203 |
valueResult:= BadTurn; |
|
1204 |
||
1205 |
TestBaseballBat:= valueResult; |
|
79 | 1206 |
end; |
1207 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1208 |
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
|
1209 |
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
|
1210 |
x, y, trackFall: LongInt; |
82 | 1211 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1212 |
Flags:= Flags; // avoid compiler hint |
7716 | 1213 |
Targ:= Targ; // avoid compiler hint |
1214 |
||
7471 | 1215 |
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
|
1216 |
else trackFall:= 0; |
7471 | 1217 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1218 |
ap.ExplR:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1219 |
ap.Time:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1220 |
ap.Power:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1221 |
x:= hwRound(Me^.X); |
7427 | 1222 |
y:= hwRound(Me^.Y) + 4; |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1223 |
|
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1224 |
v1:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1225 |
for i:= 0 to 8 do |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1226 |
begin |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1227 |
v1:= v1 + RateShove(Me, x - 5, y - 10 * i |
7427 | 1228 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1229 |
, -0.45, -0.9, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1230 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1231 |
v1:= v1 + RateShove(Me, x - 5, y - 90 |
7427 | 1232 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1233 |
, -0.45, -0.9, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1234 |
|
433 | 1235 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1236 |
// now try opposite direction |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1237 |
v2:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1238 |
for i:= 0 to 8 do |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1239 |
begin |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1240 |
v2:= v2 + RateShove(Me, x + 5, y - 10 * i |
7427 | 1241 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1242 |
, 0.45, -0.9, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1243 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1244 |
v2:= v2 + RateShove(Me, x + 5, y - 90 |
7427 | 1245 |
, 19, 30, 40 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1246 |
, 0.45, -0.9, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1247 |
|
8924 | 1248 |
if (v2 > v1) |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1249 |
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
|
1250 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1251 |
ap.Angle:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1252 |
valueResult:= v2 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1253 |
end |
8924 | 1254 |
else |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1255 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1256 |
ap.Angle:= -1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1257 |
valueResult:= v1 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1258 |
end; |
8924 | 1259 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1260 |
if valueResult <= 0 then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1261 |
valueResult:= BadTurn; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1262 |
|
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1263 |
TestFirePunch:= valueResult; |
82 | 1264 |
end; |
433 | 1265 |
|
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
|
1266 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1267 |
function TestWhip(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7154 | 1268 |
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
|
1269 |
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
|
1270 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1271 |
Flags:= Flags; // avoid compiler hint |
7716 | 1272 |
Targ:= Targ; // avoid compiler hint |
1273 |
||
7471 | 1274 |
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
|
1275 |
else trackFall:= 0; |
7471 | 1276 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1277 |
ap.ExplR:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1278 |
ap.Time:= 0; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1279 |
ap.Power:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1280 |
x:= hwRound(Me^.X); |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1281 |
y:= hwRound(Me^.Y); |
7154 | 1282 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1283 |
// check left direction |
8924 | 1284 |
{first RateShove checks farthermost of two whip's AmmoShove attacks |
1285 |
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
|
1286 |
RateShove call)} |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1287 |
v1:= RateShove(Me, x - 13, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1288 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1289 |
, -1, -0.8, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1290 |
v1:= v1 + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1291 |
RateShove(Me, x - 2, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1292 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1293 |
, -1, -0.8, trackFall); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1294 |
// now try opposite direction |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1295 |
v2:= RateShove(Me, x + 13, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1296 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1297 |
, 1, -0.8, trackFall or afSetSkip); |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1298 |
v2:= v2 + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1299 |
RateShove(Me, x + 2, y |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
1300 |
, 30, 30, 25 |
7348
2a69f2ed9273
Limit firepunch/whip drowning checks to max AI, bat to top 2 levels.
nemo
parents:
7274
diff
changeset
|
1301 |
, 1, -0.8, trackFall); |
7154 | 1302 |
|
8924 | 1303 |
if (v2 > v1) |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1304 |
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
|
1305 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1306 |
ap.Angle:= 1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1307 |
valueResult:= v2 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1308 |
end |
8924 | 1309 |
else |
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1310 |
begin |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1311 |
ap.Angle:= -1; |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1312 |
valueResult:= v1 |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1313 |
end; |
8924 | 1314 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1315 |
if valueResult <= 0 then |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1316 |
valueResult:= BadTurn |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1317 |
else |
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1318 |
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
|
1319 |
|
7200
744c8a5546c6
New bright and shiny TestFirepunch which actually works
unc0rr
parents:
7197
diff
changeset
|
1320 |
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
|
1321 |
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
|
1322 |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1323 |
function TestKamikaze(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7471 | 1324 |
const step = 8; |
7474 | 1325 |
var valueResult, i, v, tx: LongInt; |
7471 | 1326 |
trackFall: LongInt; |
1327 |
t, d, x, y, dx, dy, cx: real; |
|
1328 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1329 |
Flags:= Flags; // avoid compiler hint |
7471 | 1330 |
ap.ExplR:= 0; |
1331 |
ap.Time:= 0; |
|
1332 |
ap.Power:= 1; |
|
1333 |
||
8924 | 1334 |
if Level = 1 then |
7471 | 1335 |
trackFall:= afTrackFall |
1336 |
else if Level = 2 then |
|
1337 |
trackFall:= 0 |
|
1338 |
else |
|
1339 |
exit(BadTurn); |
|
8924 | 1340 |
|
15762
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1341 |
// Don't sacrifice last hog |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1342 |
if aiHogsInTeam <= 1 then |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1343 |
exit(BadTurn); |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1344 |
|
7471 | 1345 |
valueResult:= 0; |
7486 | 1346 |
v:= 0; |
7471 | 1347 |
|
1348 |
x:= hwFloat2Float(Me^.X); |
|
1349 |
y:= hwFloat2Float(Me^.Y); |
|
8959 | 1350 |
d:= sqrt(sqr(Targ.Point.X - x) + sqr(Targ.Point.Y - y)); |
7486 | 1351 |
if d < 10 then |
7474 | 1352 |
begin |
1353 |
dx:= 0; |
|
14568 | 1354 |
dy:= step; |
7474 | 1355 |
ap.Angle:= 2048 |
1356 |
end |
|
1357 |
else |
|
1358 |
begin |
|
1359 |
t:= step / d; |
|
8959 | 1360 |
dx:= (Targ.Point.X - x) * t; |
1361 |
dy:= (Targ.Point.Y - y) * t; |
|
7471 | 1362 |
|
15638 | 1363 |
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
|
1364 |
// Apply inaccuracy |
15658 | 1365 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
1366 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 10))); |
7474 | 1367 |
end; |
8924 | 1368 |
|
7471 | 1369 |
if dx >= 0 then cx:= 0.45 else cx:= -0.45; |
1370 |
||
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1371 |
for i:= 1 to 512 div step - 2 do |
7471 | 1372 |
begin |
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1373 |
x:= x + dx; |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1374 |
y:= y + dy; |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1375 |
|
8924 | 1376 |
valueResult:= valueResult + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1377 |
RateShove(Me, trunc(x), trunc(y) |
7471 | 1378 |
, 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
|
1379 |
, 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
|
1380 |
end; |
8924 | 1381 |
|
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1382 |
if (d < 10) and (dx = 0) then |
7474 | 1383 |
begin |
1384 |
x:= hwFloat2Float(Me^.X); |
|
1385 |
y:= hwFloat2Float(Me^.Y); |
|
1386 |
tx:= trunc(x); |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1387 |
v:= RateShove(Me, tx, trunc(y) |
7486 | 1388 |
, 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
|
1389 |
, -cx, -0.9, trackFall or afIgnoreMe); |
7474 | 1390 |
for i:= 1 to 512 div step - 2 do |
1391 |
begin |
|
1392 |
y:= y + dy; |
|
8924 | 1393 |
v:= v + |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1394 |
RateShove(Me, tx, trunc(y) |
7474 | 1395 |
, 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
|
1396 |
, -cx, -0.9, trackFall or afSetSkip or afIgnoreMe); |
7474 | 1397 |
end |
1398 |
end; |
|
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1399 |
|
7474 | 1400 |
if v > valueResult then |
14567
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1401 |
begin |
7e4862823649
Fix broken kamikaze logic when target position is close to attacker
unc0rr
parents:
14248
diff
changeset
|
1402 |
cx:= -cx; |
7474 | 1403 |
ap.Angle:= -2048; |
1404 |
valueResult:= v |
|
1405 |
end; |
|
7716 | 1406 |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8924
diff
changeset
|
1407 |
v:= RateShove(Me, trunc(x), trunc(y) |
7471 | 1408 |
, 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
|
1409 |
, cx, -0.9, trackFall or afIgnoreMe); |
7471 | 1410 |
valueResult:= valueResult + v - KillScore * friendlyfactor div 100 * 1024; |
7716 | 1411 |
|
7471 | 1412 |
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
|
1413 |
inc(valueResult, RateExplosion(Me, trunc(x), trunc(y), 30, afIgnoreMe)); |
7471 | 1414 |
|
1415 |
TestKamikaze:= valueResult; |
|
1416 |
end; |
|
1417 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1418 |
function TestHammer(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
5645 | 1419 |
var rate: LongInt; |
1420 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1421 |
Flags:= Flags; // avoid compiler hint |
5645 | 1422 |
Level:= Level; // avoid compiler hint |
7716 | 1423 |
Targ:= Targ; |
1424 |
||
5645 | 1425 |
ap.ExplR:= 0; |
1426 |
ap.Time:= 0; |
|
1427 |
ap.Power:= 1; |
|
1428 |
ap.Angle:= 0; |
|
8924 | 1429 |
|
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
|
1430 |
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
|
1431 |
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
|
1432 |
rate:= BadTurn; |
5645 | 1433 |
TestHammer:= rate; |
1434 |
end; |
|
1435 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1436 |
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
|
1437 |
const cShift = 4; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1438 |
Density : real = 2.0; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1439 |
var bombsSpeed, X, Y, dX, dY: real; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1440 |
b: array[0..9] of boolean; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1441 |
dmg: array[0..9] of LongInt; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1442 |
fexit, firstHit: boolean; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1443 |
i, t, valueResult, targetY: LongInt; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1444 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
1445 |
Flags:= Flags; // avoid compiler hint |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1446 |
ap.ExplR:= 0; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1447 |
ap.Time:= 0; |
15724
0436ea41ece5
AI: Don't use airstrikes if negative gravity
Wuzzy <Wuzzy2@mail.ru>
parents:
15723
diff
changeset
|
1448 |
if (Level > 3) or (aiGravityf <= 0) then |
7041 | 1449 |
exit(BadTurn); |
554 | 1450 |
|
7132 | 1451 |
ap.Angle:= 0; |
8959 | 1452 |
ap.AttackPutX:= Targ.Point.X; |
1453 |
ap.AttackPutY:= Targ.Point.Y; |
|
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1454 |
|
6775 | 1455 |
bombsSpeed:= hwFloat2Float(cBombsSpeed); |
8959 | 1456 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1457 |
X:= X - bombsSpeed * sqrt(((Targ.Point.Y + 128) * 2) / aiGravityf); |
15698
6de74494b8a5
AI: Fix starting height of airborne attacks
Wuzzy <Wuzzy2@mail.ru>
parents:
15697
diff
changeset
|
1458 |
Y:= topY - 300; |
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1459 |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1460 |
dX:= bombsSpeed; |
6775 | 1461 |
dY:= 0; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1462 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1463 |
for i:= 0 to 9 do |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1464 |
begin |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1465 |
b[i]:= true; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1466 |
dmg[i]:= 0 |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1467 |
end; |
2695 | 1468 |
valueResult:= 0; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1469 |
firstHit:= false; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1470 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1471 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1472 |
X:= X + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1473 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
1474 |
dX:= dX + aiWindSpeed / Density; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1475 |
Y:= Y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1476 |
dY:= dY + aiGravityf; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1477 |
fexit:= true; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1478 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1479 |
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
|
1480 |
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
|
1481 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1482 |
fexit:= false; |
6992 | 1483 |
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
|
1484 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1485 |
b[i]:= false; |
15702
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1486 |
if Level = 1 then |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1487 |
dmg[i]:= RateExplosion(Me, trunc(X) + LongWord(i * 30), trunc(Y), 58, afTrackFall or afErasesLand) |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1488 |
else |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1489 |
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
|
1490 |
// 58 (instead of 60) for better prediction (hh moves after explosion of one of the rockets) |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1491 |
if (not firstHit) then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1492 |
begin |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1493 |
firstHit:= true; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1494 |
// remember Y of first hit, used for target pos |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1495 |
targetY:= trunc(Y); |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1496 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1497 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1498 |
end; |
6775 | 1499 |
until fexit or (Y > cWaterLine); |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1500 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1501 |
for i:= 0 to 5 do |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1502 |
if dmg[i] <> BadTurn then |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1503 |
inc(valueResult, dmg[i]); |
2695 | 1504 |
t:= valueResult; |
8959 | 1505 |
ap.AttackPutX:= Targ.Point.X - 60; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1506 |
if firstHit then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1507 |
// this is not strictly neccessry, it's just to make sure |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1508 |
// the X is on the height of the first hit |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1509 |
ap.AttackPutY:= targetY; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1510 |
|
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1511 |
for i:= 0 to 3 do |
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1512 |
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
|
1513 |
begin |
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1514 |
dec(t, dmg[i]); |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1515 |
inc(t, dmg[i + 6]); |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1516 |
if t > valueResult then |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1517 |
begin |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1518 |
valueResult:= t; |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1519 |
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
|
1520 |
end |
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
1521 |
end; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1522 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1523 |
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
|
1524 |
valueResult:= BadTurn; |
2695 | 1525 |
TestAirAttack:= valueResult; |
543
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1526 |
end; |
465e2ec8f05f
- Better randomness of placing hedgehogs on the land
unc0rr
parents:
534
diff
changeset
|
1527 |
|
15707 | 1528 |
function TestResurrector(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1529 |
var rate, heal: LongInt; |
|
1530 |
begin |
|
1531 |
Flags:= Flags; // avoid compiler hint |
|
1532 |
Targ:= Targ; |
|
1533 |
||
1534 |
if (Level = 5) then |
|
1535 |
exit(BadTurn); |
|
1536 |
||
1537 |
if (Me^.Health <= 1) then |
|
1538 |
exit(BadTurn); |
|
1539 |
||
1540 |
if (Level <= 2) and (Me^.Hedgehog^.Effects[hePoisoned] > 0) then |
|
1541 |
// Sacrifice almost all health if poisoned |
|
1542 |
heal:= Me^.Health - 1 |
|
1543 |
else |
|
1544 |
// Sacrifice up to 10% of own health |
|
1545 |
heal:= (Me^.Health div 10); |
|
1546 |
||
1547 |
ap.ExplR:= 0; |
|
1548 |
ap.Time:= 0; |
|
15708
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1549 |
if (Level >= 4) then |
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1550 |
// slow resurrect |
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1551 |
ap.Power:= max(512 * heal - 512, 10) |
15707 | 1552 |
else |
15708
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1553 |
// fast resurrect |
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1554 |
ap.Power:= max(16 * heal - 16, 10); |
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1555 |
|
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1556 |
// Time limit |
15709 | 1557 |
ap.Power:= min(ap.Power, 5000); |
15708
034955e721a1
AI: Teach how to use resurrector fast
Wuzzy <Wuzzy2@mail.ru>
parents:
15707
diff
changeset
|
1558 |
|
15707 | 1559 |
ap.Angle:= 0; |
1560 |
||
1561 |
rate:= RateResurrector(Me); |
|
1562 |
if rate <= 0 then |
|
1563 |
rate:= BadTurn; |
|
1564 |
TestResurrector:= rate; |
|
1565 |
end; |
|
1566 |
||
15626 | 1567 |
function TestDrillStrike(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1568 |
const cShift = 4; |
|
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1569 |
Density : real = 1.0; |
15626 | 1570 |
var bombsSpeed, X, Y, dX, dY, drillX, drillY: real; |
1571 |
t2: real; |
|
1572 |
dmg: array[0..9] of LongInt; |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1573 |
collided, drilling, timerRuns, firstHit: boolean; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1574 |
i, t, value, valueResult, attackTime, drillTimer, targetX, targetY: LongInt; |
15626 | 1575 |
begin |
1576 |
Flags:= Flags; // avoid compiler hint |
|
1577 |
ap.ExplR:= 0; |
|
15724
0436ea41ece5
AI: Don't use airstrikes if negative gravity
Wuzzy <Wuzzy2@mail.ru>
parents:
15723
diff
changeset
|
1578 |
if (Level > 3) or (aiGravityf <= 0) then |
15626 | 1579 |
exit(BadTurn); |
1580 |
||
1581 |
ap.Angle:= 0; |
|
1582 |
targetX:= Targ.Point.X; |
|
1583 |
ap.AttackPutY:= Targ.Point.Y; |
|
1584 |
||
1585 |
bombsSpeed:= hwFloat2Float(cBombsSpeed); |
|
1586 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1587 |
X:= X - bombsSpeed * sqrt(((Targ.Point.Y + 128) * 2) / aiGravityf); |
15698
6de74494b8a5
AI: Fix starting height of airborne attacks
Wuzzy <Wuzzy2@mail.ru>
parents:
15697
diff
changeset
|
1588 |
Y:= topY - 300; |
15626 | 1589 |
|
1590 |
valueResult:= 0; |
|
1591 |
||
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1592 |
attackTime:= 6000; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1593 |
while attackTime >= 0 do |
15626 | 1594 |
begin |
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1595 |
dec(attackTime, 1000); |
15626 | 1596 |
value:= 0; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1597 |
firstHit:= false; |
15626 | 1598 |
for i:= 0 to 9 do |
1599 |
begin |
|
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1600 |
dmg[i]:= 0; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1601 |
drillX:= trunc(X) + LongWord(i * 30); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1602 |
drillY:= trunc(Y); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1603 |
dX:= bombsSpeed; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1604 |
dY:= 0; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1605 |
collided:= false; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1606 |
drilling:= false; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1607 |
timerRuns:= false; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1608 |
drillTimer := attackTime; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1609 |
|
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1610 |
repeat |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1611 |
// Simulate in-air movement |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1612 |
drillX:= drillX + dX; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1613 |
drillY:= drillY + dY; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1614 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
1615 |
dX:= dX + aiWindSpeed / Density; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1616 |
dY:= dY + aiGravityf; |
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1617 |
|
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1618 |
if timerRuns then |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1619 |
dec(drillTimer); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1620 |
|
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1621 |
// Collided with land ... simulate drilling |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1622 |
if (drillTimer > 0) and TestCollExcludingObjects(trunc(drillX), trunc(drillY), 4) and |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1623 |
(Abs(Targ.Point.X - trunc(drillX)) + Abs(Targ.Point.Y - trunc(drillY)) > 21) then |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1624 |
begin |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1625 |
drilling := true; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1626 |
timerRuns := true; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1627 |
t2 := 0.5 / sqrt(sqr(dX) + sqr(dY)); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1628 |
dX := dX * t2; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1629 |
dY := dY * t2; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1630 |
repeat |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1631 |
drillX:= drillX + dX; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1632 |
drillY:= drillY + dY; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1633 |
dec(drillTimer, 10); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1634 |
if (Abs(Targ.Point.X - drillX) + Abs(Targ.Point.Y - drillY) < 22) |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1635 |
or (drillX < -32) |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1636 |
or (drillY < -32) |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1637 |
or (trunc(drillX) > LAND_WIDTH + 32) |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1638 |
or (trunc(drillY) > cWaterLine) |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1639 |
or (drillTimer <= 0) then |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1640 |
collided:= true |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1641 |
else if not TestCollExcludingObjects(trunc(drillX), trunc(drillY), 4) then |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1642 |
drilling:= false; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1643 |
until (collided or (not drilling)); |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1644 |
end |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1645 |
// Collided with something else ... record collision |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1646 |
else if (drillTimer <= 0) or TestColl(trunc(drillX), trunc(drillY), 4) then |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1647 |
collided:= true; |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1648 |
|
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1649 |
// Simulate explosion |
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1650 |
if collided then |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1651 |
begin |
15702
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1652 |
if Level = 1 then |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1653 |
dmg[i]:= RateExplosion(Me, trunc(drillX), trunc(drillY), 58, afTrackFall or afErasesLand) |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1654 |
else |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1655 |
dmg[i]:= RateExplosion(Me, trunc(drillX), trunc(drillY), 58); |
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1656 |
// 58 (instead of 60) for better prediction (hh moves after explosion of one of the rockets) |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1657 |
if not firstHit then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1658 |
begin |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1659 |
targetY:= trunc(drillY); |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1660 |
firstHit:= true; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1661 |
end; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1662 |
end; |
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1663 |
until collided or (drillY > cWaterLine); |
15626 | 1664 |
end; |
1665 |
||
15697
c9a7ee0e3265
AI: Improve drill strike prediction
Wuzzy <Wuzzy2@mail.ru>
parents:
15688
diff
changeset
|
1666 |
// calculate score |
15626 | 1667 |
for i:= 0 to 5 do |
1668 |
if dmg[i] <> BadTurn then |
|
1669 |
inc(value, dmg[i]); |
|
1670 |
t:= value; |
|
15858
f7875779d910
Fix incorrect calculation of target point in AI drill strike test
unC0Rr
parents:
15771
diff
changeset
|
1671 |
targetX:= Targ.Point.X - 60 - cShift; |
15626 | 1672 |
|
1673 |
for i:= 0 to 3 do |
|
1674 |
if dmg[i] <> BadTurn then |
|
1675 |
begin |
|
1676 |
dec(t, dmg[i]); |
|
1677 |
inc(t, dmg[i + 6]); |
|
15862 | 1678 |
if t >= value then |
15626 | 1679 |
begin |
1680 |
value:= t; |
|
1681 |
targetX:= Targ.Point.X - 30 - cShift + i * 30 |
|
1682 |
end |
|
1683 |
end; |
|
1684 |
||
1685 |
if value > valueResult then |
|
1686 |
begin |
|
1687 |
valueResult:= value; |
|
1688 |
ap.AttackPutX:= targetX; |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1689 |
if firstHit then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1690 |
ap.AttackPutY:= targetY; |
15626 | 1691 |
ap.Time:= attackTime; |
1692 |
end; |
|
1693 |
end; |
|
1694 |
||
1695 |
if valueResult <= 0 then |
|
1696 |
valueResult:= BadTurn |
|
1697 |
else |
|
1698 |
begin |
|
1699 |
// Weaker AI has chance to get the time wrong by 1-3 seconds |
|
1700 |
if Level = 5 then |
|
1701 |
// +/- 3 seconds |
|
1702 |
ap.Time:= ap.Time + (3 - random(7)) * 1000 |
|
1703 |
else if Level = 4 then |
|
1704 |
// +/- 2 seconds |
|
1705 |
ap.Time:= ap.Time + (2 - random(5)) * 1000 |
|
1706 |
else if Level = 3 then |
|
1707 |
// +/- 1 second |
|
1708 |
if (random(2) = 0) then |
|
1709 |
ap.Time:= ap.Time + (1 - random(3)) * 1000 |
|
1710 |
else if Level = 2 then |
|
1711 |
// 50% chance for +/- 1 second |
|
1712 |
if (random(2) = 0) then |
|
1713 |
ap.Time:= ap.Time + (1 - random(3)) * 1000; |
|
1714 |
ap.Time:= Min(5000, Max(1000, ap.Time)); |
|
1715 |
end; |
|
1716 |
||
1717 |
TestDrillStrike:= valueResult; |
|
1718 |
end; |
|
3370 | 1719 |
|
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1720 |
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
|
1721 |
const cShift = 4; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1722 |
Density : real = 1.0; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1723 |
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
|
1724 |
b: array[0..9] of boolean; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1725 |
dmg: array[0..9] of LongInt; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1726 |
fexit, firstHit: boolean; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1727 |
i, t, valueResult, targetY: LongInt; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1728 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1729 |
Flags:= Flags; // avoid compiler hint |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1730 |
ap.ExplR:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1731 |
ap.Time:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1732 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1733 |
// 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
|
1734 |
// predictable. |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1735 |
// 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
|
1736 |
// so they are unsupported. |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1737 |
// 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
|
1738 |
// TODO: Teach AI to avoid hitting their own with mines |
15724
0436ea41ece5
AI: Don't use airstrikes if negative gravity
Wuzzy <Wuzzy2@mail.ru>
parents:
15723
diff
changeset
|
1739 |
if (Level > 3) or (aiGravityf <= 0) or (cMinesTime <> 0) then |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1740 |
exit(BadTurn); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1741 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1742 |
ap.Angle:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1743 |
ap.AttackPutX:= Targ.Point.X; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1744 |
ap.AttackPutY:= Targ.Point.Y; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1745 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1746 |
minesSpeed:= hwFloat2Float(cBombsSpeed); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1747 |
X:= Targ.Point.X - 135 - cShift; // hh center - cShift |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1748 |
X:= X - minesSpeed * sqrt(((Targ.Point.Y + 128) * 2) / aiGravityf); |
15698
6de74494b8a5
AI: Fix starting height of airborne attacks
Wuzzy <Wuzzy2@mail.ru>
parents:
15697
diff
changeset
|
1749 |
Y:= topY - 300; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1750 |
dX:= minesSpeed; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1751 |
dY:= 0; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1752 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1753 |
for i:= 0 to 9 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1754 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1755 |
b[i]:= true; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1756 |
dmg[i]:= 0 |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1757 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1758 |
valueResult:= 0; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1759 |
firstHit:= false; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1760 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1761 |
repeat |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1762 |
X:= X + dX; |
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1763 |
if (GameFlags and (gfMoreWind or gfInfAttack)) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
1764 |
dX:= dX + aiWindSpeed / Density; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1765 |
Y:= Y + dY; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1766 |
dY:= dY + aiGravityf; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1767 |
fexit:= true; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1768 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1769 |
for i:= 0 to 9 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1770 |
if b[i] then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1771 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1772 |
fexit:= false; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1773 |
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
|
1774 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1775 |
b[i]:= false; |
15702
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1776 |
if Level = 1 then |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1777 |
dmg[i]:= RateExplosion(Me, trunc(X) + LongWord(i * 30), trunc(Y), 96, afTrackFall or afErasesLand) |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1778 |
else |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1779 |
dmg[i]:= RateExplosion(Me, trunc(X) + LongWord(i * 30), trunc(Y), 96); |
3224d0d970ac
Teach top AI level to track falling with airstrikes
Wuzzy <Wuzzy2@mail.ru>
parents:
15701
diff
changeset
|
1780 |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1781 |
if (not firstHit) then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1782 |
begin |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1783 |
targetY:= trunc(Y); |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1784 |
firstHit:= true; |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1785 |
end; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1786 |
end |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1787 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1788 |
until fexit or (Y > cWaterLine); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1789 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1790 |
for i:= 0 to 5 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1791 |
if dmg[i] <> BadTurn then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1792 |
inc(valueResult, dmg[i]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1793 |
t:= valueResult; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1794 |
ap.AttackPutX:= Targ.Point.X - 60; |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1795 |
if firstHit then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1796 |
ap.AttackPutY:= targetY; |
15627
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1797 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1798 |
for i:= 0 to 3 do |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1799 |
if dmg[i] <> BadTurn then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1800 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1801 |
dec(t, dmg[i]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1802 |
inc(t, dmg[i + 6]); |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1803 |
if t > valueResult then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1804 |
begin |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1805 |
valueResult:= t; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1806 |
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
|
1807 |
end |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1808 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1809 |
|
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1810 |
if valueResult <= 0 then |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1811 |
valueResult:= BadTurn; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1812 |
TestMineStrike:= valueResult; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1813 |
end; |
22d0a3d6e2be
Teach AI how to use MineStrike (0 secs only)
Wuzzy <Wuzzy2@mail.ru>
parents:
15626
diff
changeset
|
1814 |
|
15752
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1815 |
function TestSineGun(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1816 |
const |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1817 |
MIN_RANGE = 40; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1818 |
MAX_RANGE = 400; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1819 |
var Vx, Vy, x, y: real; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1820 |
rx, ry, value, valueResult: LongInt; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1821 |
range: integer; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1822 |
landStop: boolean; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1823 |
begin |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1824 |
// TODO: Also simulate the sine gun's kickback and make sure the attacker |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1825 |
// doesn't get hurt |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1826 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1827 |
Flags:= Flags; // avoid compiler hint |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1828 |
TestSineGun:= BadTurn; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1829 |
valueResult:= 0; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1830 |
ap.ExplR:= 0; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1831 |
ap.Time:= 0; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1832 |
ap.Power:= 1; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1833 |
x:= hwFloat2Float(Me^.X); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1834 |
y:= hwFloat2Float(Me^.Y); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1835 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1836 |
// Range limits |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1837 |
if (range < MIN_RANGE) or ((range > MAX_RANGE) and (Level >= 4)) then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1838 |
exit(BadTurn); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1839 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1840 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1841 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1842 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1843 |
// Never shoot downwards or horizontal because it's dangerous |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1844 |
// and we don't have a proper check for kickback yet |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1845 |
if Vy >= 0 then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1846 |
exit(BadTurn); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1847 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1848 |
landStop:= false; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1849 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1850 |
// Apply inaccuracy |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1851 |
if (not aiLaserSighting) then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1852 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 10))); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1853 |
repeat |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1854 |
x:= x + vX; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1855 |
y:= y + vY; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1856 |
rx:= trunc(x); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1857 |
ry:= trunc(y); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1858 |
if (GameFlags and gfSolidLand) <> 0 then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1859 |
// Stop projectile when colliding with indestructible land |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1860 |
landStop:= (Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 5); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1861 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1862 |
if landStop or |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1863 |
((Me = CurrentHedgehog^.Gear) and TestCollHogsOrObjects(rx, ry, 5)) or |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1864 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 5)) then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1865 |
begin |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1866 |
x:= x + vX * 8; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1867 |
y:= y + vY * 8; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1868 |
value:= RateShove(Me, rx, ry, 5, 35, 50, vX, vY, afTrackFall); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1869 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1870 |
if (value > 0) then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1871 |
inc(valueResult, value); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1872 |
end |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1873 |
until (Abs(Targ.Point.X - trunc(x)) + Abs(Targ.Point.Y - trunc(y)) < 5) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1874 |
or (landStop) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1875 |
or (Metric(trunc(x), trunc(y), hwRound(Me^.X), hwRound(Me^.Y)) > MAX_RANGE) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1876 |
or (x < 0) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1877 |
or (y < 0) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1878 |
or (trunc(x) > LAND_WIDTH) |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1879 |
or (trunc(y) > LAND_HEIGHT); |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1880 |
|
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1881 |
if valueResult <= 0 then |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1882 |
valueResult:= BadTurn; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1883 |
TestSineGun:= valueResult; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1884 |
end; |
680dc787408c
AI: Add new sine gun test (still WIP)
Wuzzy <Wuzzy2@mail.ru>
parents:
15751
diff
changeset
|
1885 |
|
15641 | 1886 |
function TestSMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
1887 |
const timeLimit = 50; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1888 |
Density : real = 1.6; |
15641 | 1889 |
var Vx, Vy, r, meX, meY: real; |
1890 |
rTime: LongInt; |
|
1891 |
EX, EY: LongInt; |
|
1892 |
valueResult: LongInt; |
|
1893 |
targXWrap, x, y, dX, dY: real; |
|
1894 |
t: LongInt; |
|
1895 |
value: LongInt; |
|
1896 |
begin |
|
1897 |
Flags:= Flags; // avoid compiler hint |
|
1898 |
meX:= hwFloat2Float(Me^.X); |
|
1899 |
meY:= hwFloat2Float(Me^.Y); |
|
1900 |
ap.Time:= 0; |
|
1901 |
rTime:= 350; |
|
1902 |
ap.ExplR:= 0; |
|
1903 |
if (WorldEdge = weWrap) then |
|
1904 |
if (Targ.Point.X < meX) then |
|
1905 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
1906 |
else targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
1907 |
valueResult:= BadTurn; |
|
1908 |
repeat |
|
1909 |
rTime:= rTime + 300 + Level * 50 + random(300); |
|
1910 |
if (WorldEdge = weWrap) and (random(2)=0) then |
|
1911 |
Vx:= (targXWrap + AIrndSign(2) + AIrndOffset(Targ, Level) - meX) / rTime |
|
1912 |
else |
|
1913 |
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
|
1914 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
1915 |
Vx:= -(aiWindSpeed / Density) * rTime * 0.5 + Vx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1916 |
Vy:= aiGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
15641 | 1917 |
r:= sqr(Vx) + sqr(Vy); |
1918 |
||
1919 |
if not (r > 1) then |
|
1920 |
begin |
|
1921 |
x:= meX; |
|
1922 |
y:= meY; |
|
1923 |
dX:= Vx; |
|
1924 |
dY:= -Vy; |
|
1925 |
t:= rTime; |
|
1926 |
repeat |
|
1927 |
x:= CheckWrap(x); |
|
1928 |
x:= x + dX; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
1929 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
1930 |
dX:= dX + aiWindSpeed / Density; |
15641 | 1931 |
|
1932 |
y:= y + dY; |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1933 |
dY:= dY + aiGravityf; |
15641 | 1934 |
dec(t) |
1935 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 2)) or |
|
1936 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 2))) or (t < -timeLimit); |
|
1937 |
||
1938 |
EX:= trunc(x); |
|
1939 |
EY:= trunc(y); |
|
1940 |
||
1941 |
if t >= -timeLimit then |
|
1942 |
if (Level = 1) and (Flags and amtest_NoTrackFall = 0) then |
|
1943 |
value:= RateExplosion(Me, EX, EY, 61, afTrackFall) |
|
1944 |
else |
|
15765
b74ce48abdea
Fix AI sometimes making weird SMine shots
Wuzzy <Wuzzy2@mail.ru>
parents:
15762
diff
changeset
|
1945 |
value:= RateExplosion(Me, EX, EY, 61) |
b74ce48abdea
Fix AI sometimes making weird SMine shots
Wuzzy <Wuzzy2@mail.ru>
parents:
15762
diff
changeset
|
1946 |
else |
b74ce48abdea
Fix AI sometimes making weird SMine shots
Wuzzy <Wuzzy2@mail.ru>
parents:
15762
diff
changeset
|
1947 |
value:= BadTurn; |
15641 | 1948 |
|
1949 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
1950 |
value := BadTurn; |
|
1951 |
||
1952 |
if (valueResult < value) or ((valueResult = value) and (Level < 3)) then |
|
1953 |
begin |
|
1954 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 9)); |
|
1955 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 17 + 1); |
|
1956 |
ap.ExplR:= 60; |
|
1957 |
ap.ExplX:= EX; |
|
1958 |
ap.ExplY:= EY; |
|
1959 |
valueResult:= value |
|
1960 |
end; |
|
1961 |
end |
|
1962 |
until rTime > 5050 - Level * 800; |
|
15766
97a9ac5d4c83
AI: Add reuse bonus to SMine (like shotgun)
Wuzzy <Wuzzy2@mail.ru>
parents:
15765
diff
changeset
|
1963 |
if valueResult <> BadTurn then |
97a9ac5d4c83
AI: Add reuse bonus to SMine (like shotgun)
Wuzzy <Wuzzy2@mail.ru>
parents:
15765
diff
changeset
|
1964 |
// 27/20 is reuse bonus |
97a9ac5d4c83
AI: Add reuse bonus to SMine (like shotgun)
Wuzzy <Wuzzy2@mail.ru>
parents:
15765
diff
changeset
|
1965 |
valueResult:= valueResult * 27 div 20; |
15641 | 1966 |
TestSMine:= valueResult |
1967 |
end; |
|
1968 |
||
15630 | 1969 |
function TestPiano(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
15771
82fd124e6512
AI: Nerf piano rating; AI will now only use it if it expects huge damage
Wuzzy <Wuzzy2@mail.ru>
parents:
15766
diff
changeset
|
1970 |
// TODO: Test all 5 bounces |
82fd124e6512
AI: Nerf piano rating; AI will now only use it if it expects huge damage
Wuzzy <Wuzzy2@mail.ru>
parents:
15766
diff
changeset
|
1971 |
const BOUNCES = 1; // we only test 1 bounce to avoid the rating getting excessively high |
15630 | 1972 |
var X, Y: real; |
1973 |
dmg: array[0..BOUNCES-1] of LongInt; |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
1974 |
i, e, rate, valueResult, targetY: LongInt; |
15701
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
1975 |
firstHit, solidBounce: boolean; |
15630 | 1976 |
begin |
1977 |
Flags:= Flags; // avoid compiler hint |
|
1978 |
ap.ExplR:= 0; |
|
1979 |
ap.Time:= 0; |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
1980 |
if (aiGravityf <= 0) then |
15630 | 1981 |
exit(BadTurn); |
1982 |
||
1983 |
if (Level > 2) then |
|
1984 |
exit(BadTurn); |
|
1985 |
||
15762
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1986 |
// Don't sacrifice last hog |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1987 |
if aiHogsInTeam <= 1 then |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1988 |
exit(BadTurn); |
0a172cfe8840
AI: Don't sacrifice final hog with kami or piano
Wuzzy <Wuzzy2@mail.ru>
parents:
15752
diff
changeset
|
1989 |
|
15630 | 1990 |
ap.Angle:= 0; |
1991 |
ap.AttackPutX:= Targ.Point.X; |
|
1992 |
ap.AttackPutY:= Targ.Point.Y; |
|
1993 |
||
1994 |
X:= Targ.Point.X; |
|
15698
6de74494b8a5
AI: Fix starting height of airborne attacks
Wuzzy <Wuzzy2@mail.ru>
parents:
15697
diff
changeset
|
1995 |
Y:= -1024; |
15630 | 1996 |
|
1997 |
for i:= 0 to BOUNCES-1 do |
|
1998 |
dmg[i]:= 0; |
|
1999 |
||
2000 |
i:= 1; |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2001 |
firstHit:= false; |
15701
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2002 |
solidBounce:= false; |
15630 | 2003 |
repeat |
15632 | 2004 |
// Piano goes down |
15701
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2005 |
if (not solidBounce) then |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2006 |
Y:= Y + 11; |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2007 |
if solidBounce or TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(X), trunc(Y), 32) then |
15630 | 2008 |
begin |
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2009 |
if (not firstHit) then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2010 |
targetY:= trunc(Y); |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2011 |
firstHit:= true; |
15701
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2012 |
if (GameFlags and gfSolidLand) <> 0 then |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2013 |
// Don't change Y when indestructible land was hit |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2014 |
solidBounce:= true; |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2015 |
|
15632 | 2016 |
for e:= -1 to 1 do |
2017 |
begin |
|
15771
82fd124e6512
AI: Nerf piano rating; AI will now only use it if it expects huge damage
Wuzzy <Wuzzy2@mail.ru>
parents:
15766
diff
changeset
|
2018 |
// TODO: RateExplosion should remember hogs that already died in the simulation; |
82fd124e6512
AI: Nerf piano rating; AI will now only use it if it expects huge damage
Wuzzy <Wuzzy2@mail.ru>
parents:
15766
diff
changeset
|
2019 |
// because currently, dead hogs might still be counted for damage |
15632 | 2020 |
rate:= RateExplosion(Me, trunc(X) + 30*e, trunc(Y)+40, 161, afIgnoreMe); |
2021 |
if rate <> BadTurn then |
|
2022 |
dmg[i]:= dmg[i] + rate; |
|
2023 |
end; |
|
2024 |
||
2025 |
if (i > 1) and (dmg[i] > 0) then |
|
2026 |
dmg[i]:= dmg[i] div 2; |
|
15630 | 2027 |
inc(i); |
15701
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2028 |
if (not solidBounce) then |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2029 |
// Skip past the blast hole |
b64f96d43f1f
AI: Teach AI that piano can't blast thru solid land
Wuzzy <Wuzzy2@mail.ru>
parents:
15700
diff
changeset
|
2030 |
Y:= Y + 41 |
15630 | 2031 |
end; |
15632 | 2032 |
until (i > BOUNCES) or (Y > cWaterLine); |
15630 | 2033 |
|
2034 |
if (i = 0) and (Y > cWaterLine) then |
|
2035 |
exit(BadTurn); |
|
2036 |
||
2037 |
valueResult:= 0; |
|
2038 |
for i:= 0 to BOUNCES do |
|
15632 | 2039 |
if dmg[i] <= BadTurn then |
2040 |
begin |
|
2041 |
valueResult:= BadTurn; |
|
2042 |
break; |
|
2043 |
end |
|
2044 |
else |
|
15630 | 2045 |
inc(valueResult, dmg[i]); |
2046 |
ap.AttackPutX:= Targ.Point.X; |
|
15700
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2047 |
if firstHit then |
e933b1dc302d
AI: Airborne attacks: Move height of target X to first hit
Wuzzy <Wuzzy2@mail.ru>
parents:
15698
diff
changeset
|
2048 |
ap.AttackPutY:= targetY; |
15630 | 2049 |
|
2050 |
valueResult:= valueResult - KillScore * friendlyfactor div 100 * 1024; |
|
2051 |
||
2052 |
if valueResult <= 0 then |
|
2053 |
valueResult:= BadTurn; |
|
2054 |
TestPiano:= valueResult; |
|
2055 |
end; |
|
2056 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2057 |
function TestTeleport(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
3370 | 2058 |
var |
3439 | 2059 |
i, failNum: longword; |
2060 |
maxTop: longword; |
|
3370 | 2061 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2062 |
Flags:= Flags; // avoid compiler hint |
3439 | 2063 |
TestTeleport := BadTurn; |
7041 | 2064 |
exit(BadTurn); |
3439 | 2065 |
Level:= Level; // avoid compiler hint |
6888 | 2066 |
//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
|
2067 |
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
|
2068 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
2069 |
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
|
2070 |
begin |
8959 | 2071 |
maxTop := Targ.Point.Y - cHHRadius * 2; |
8924 | 2072 |
|
8959 | 2073 |
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
|
2074 |
dec(maxTop, cHHRadius*2); |
8959 | 2075 |
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
|
2076 |
begin |
8959 | 2077 |
ap.AttackPutX := Targ.Point.X; |
3439 | 2078 |
ap.AttackPutY := maxTop + cHHRadius; |
8959 | 2079 |
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
|
2080 |
end; |
3439 | 2081 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
2082 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
2083 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
2084 |
begin |
3439 | 2085 |
failNum := 0; |
3697 | 2086 |
repeat |
3439 | 2087 |
i := random(bonuses.Count); |
2088 |
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
|
2089 |
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
|
2090 |
or (failNum = bonuses.Count*2); |
8924 | 2091 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
2092 |
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
|
2093 |
begin |
3439 | 2094 |
ap.AttackPutX := bonuses.ar[i].X; |
2095 |
ap.AttackPutY := bonuses.ar[i].Y - cHHRadius - bonuses.ar[i].Radius; |
|
2096 |
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
|
2097 |
end; |
3439 | 2098 |
end; |
3370 | 2099 |
end; |
2100 |
||
7398 | 2101 |
|
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
|
2102 |
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
|
2103 |
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
|
2104 |
v: LongInt; |
7398 | 2105 |
begin |
8370 | 2106 |
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
|
2107 |
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
|
2108 |
|
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
|
2109 |
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
|
2110 |
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
|
2111 |
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
|
2112 |
v:= RateExplosion(Me, hwRound(Gear^.X), hwRound(Gear^.Y), cakeDmg * 2, afTrackFall); |
8924 | 2113 |
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
|
2114 |
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
|
2115 |
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
|
2116 |
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
|
2117 |
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
|
2118 |
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
|
2119 |
end; |
7398 | 2120 |
end; |
2121 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2122 |
function TestCake(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
7398 | 2123 |
var valueResult, v1, v2: LongInt; |
2124 |
cake: TGear; |
|
2125 |
begin |
|
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2126 |
Flags:= Flags; // avoid compiler hint |
7716 | 2127 |
Targ:= Targ; // avoid compiler hint |
2128 |
||
7501 | 2129 |
if (Level > 2) then |
2130 |
exit(BadTurn); |
|
7716 | 2131 |
|
7398 | 2132 |
ap.ExplR:= 0; |
2133 |
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
|
2134 |
ap.Power:= BadTurn; // use it as max score value in checkCakeWalk |
7398 | 2135 |
|
7721 | 2136 |
//FillChar(cake, sizeof(cake), 0); |
7398 | 2137 |
cake.Radius:= 7; |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
12898
diff
changeset
|
2138 |
cake.CollisionMask:= lfNotCurHogCrate; |
7752 | 2139 |
cake.Hedgehog:= Me^.Hedgehog; |
15387 | 2140 |
cake.Kind:= gtCake; |
7398 | 2141 |
|
2142 |
// check left direction |
|
2143 |
cake.Angle:= 3; |
|
2144 |
cake.dX.isNegative:= true; |
|
15387 | 2145 |
cake.dX.QWordValue:= 0; |
2146 |
cake.dY:= _0; |
|
7398 | 2147 |
cake.X:= Me^.X - _3; |
2148 |
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
|
2149 |
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
|
2150 |
v1:= ap.Power; |
7398 | 2151 |
|
2152 |
// now try opposite direction |
|
2153 |
cake.Angle:= 1; |
|
2154 |
cake.dX.isNegative:= false; |
|
2155 |
cake.X:= Me^.X + _3; |
|
2156 |
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
|
2157 |
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
|
2158 |
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
|
2159 |
|
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
|
2160 |
ap.Power:= 1; |
7398 | 2161 |
|
2162 |
if (v2 > v1) then |
|
2163 |
begin |
|
2164 |
ap.Angle:= 1; |
|
2165 |
valueResult:= v2 |
|
2166 |
end |
|
2167 |
else |
|
2168 |
begin |
|
2169 |
ap.Angle:= -1; |
|
2170 |
valueResult:= v1 |
|
2171 |
end; |
|
2172 |
||
2173 |
if valueResult <= 0 then |
|
2174 |
valueResult:= BadTurn; |
|
2175 |
||
2176 |
TestCake:= valueResult; |
|
2177 |
end; |
|
2178 |
||
15640 | 2179 |
function TestSeduction(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2180 |
var rate: LongInt; |
|
2181 |
begin |
|
2182 |
Flags:= Flags; // avoid compiler hint |
|
2183 |
Level:= Level; // avoid compiler hint |
|
2184 |
Targ:= Targ; |
|
2185 |
||
2186 |
if (Level = 5) then |
|
2187 |
exit(BadTurn); |
|
2188 |
||
2189 |
ap.ExplR:= 0; |
|
2190 |
ap.Time:= 0; |
|
2191 |
ap.Power:= 1; |
|
2192 |
ap.Angle:= 0; |
|
2193 |
||
2194 |
rate:= RateSeduction(Me); |
|
2195 |
if rate <= 0 then |
|
2196 |
rate:= BadTurn; |
|
2197 |
TestSeduction:= rate; |
|
2198 |
end; |
|
2199 |
||
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2200 |
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
|
2201 |
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
|
2202 |
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
|
2203 |
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
|
2204 |
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
|
2205 |
begin |
15546
fbcee515b946
disable fall tracing for cheese. it will probably be incorrect.
nemo
parents:
15387
diff
changeset
|
2206 |
Flags:= Flags; // avoid compiler hint |
9790 | 2207 |
Targ:= Targ; // avoid compiler hint |
2208 |
||
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
|
2209 |
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
|
2210 |
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
|
2211 |
dx:= hwSign(Me^.dX) * 0.03; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2212 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2213 |
dx:= -(aiWindSpeed / 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
|
2214 |
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
|
2215 |
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
|
2216 |
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
|
2217 |
dec(t); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2218 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2219 |
dx:= dx + aiWindSpeed / 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
|
2220 |
x:= x + dx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
2221 |
dy:= dy + aiGravityf; |
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
|
2222 |
y:= y + dy; |
10015 | 2223 |
|
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
|
2224 |
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
|
2225 |
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
|
2226 |
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
|
2227 |
|
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
|
2228 |
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
|
2229 |
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
|
2230 |
|
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
|
2231 |
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
|
2232 |
valueResult:= RateExplosion(Me, EX, EY, 76, afTrackFall or afErasesLand) |
10015 | 2233 |
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
|
2234 |
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
|
2235 |
|
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
|
2236 |
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
|
2237 |
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
|
2238 |
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
|
2239 |
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
|
2240 |
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
|
2241 |
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
|
2242 |
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
|
2243 |
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
|
2244 |
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
|
2245 |
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
|
2246 |
|
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
|
2247 |
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
|
2248 |
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
|
2249 |
|
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2250 |
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
|
2251 |
const Density : real = 1.0; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2252 |
var valueResult: LongInt; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2253 |
x, y, dx, dy: real; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2254 |
EX, EY, t: LongInt; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2255 |
begin |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2256 |
Flags:= Flags; // avoid compiler hint |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2257 |
Targ:= Targ; // avoid compiler hint |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2258 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2259 |
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
|
2260 |
y:= hwFloat2Float(Me^.Y); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2261 |
dx:= hwSign(Me^.dX) * 0.02; |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2262 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2263 |
dx:= -(aiWindSpeed / Density) + dx; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2264 |
dy:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2265 |
t:= 10000; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2266 |
repeat |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2267 |
dec(t); |
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2268 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2269 |
dx:= dx + aiWindSpeed / Density; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2270 |
x:= x + dx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
2271 |
dy:= dy + aiGravityf; |
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2272 |
y:= y + dy; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2273 |
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
|
2274 |
((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
|
2275 |
t:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2276 |
until t = 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2277 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2278 |
EX:= trunc(x); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2279 |
EY:= trunc(y); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2280 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2281 |
if Level = 1 then |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2282 |
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
|
2283 |
else |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2284 |
valueResult:= RateExplosion(Me, EX, EY, 51); |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2285 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2286 |
if (valueResult > 0) then |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2287 |
begin |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2288 |
ap.Angle:= 0; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2289 |
ap.Power:= 1; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2290 |
ap.Time:= 0; |
15625 | 2291 |
if (Level < 5) then |
2292 |
// Set minimum mine bounciness for improved aim |
|
2293 |
ap.Bounce:= 1 |
|
2294 |
else |
|
2295 |
ap.Bounce:= 0; |
|
15623
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2296 |
ap.ExplR:= 100; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2297 |
ap.ExplX:= EX; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2298 |
ap.ExplY:= EY |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2299 |
end else |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2300 |
valueResult:= BadTurn; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2301 |
|
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2302 |
TestMine:= valueResult |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2303 |
end; |
7d3877231b00
Teach AI to drop mines from safe height
Wuzzy <Wuzzy2@mail.ru>
parents:
15546
diff
changeset
|
2304 |
|
15639 | 2305 |
function TestKnife(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2306 |
const timeLimit = 300; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2307 |
Density : real = 4.0; |
15639 | 2308 |
var Vx, Vy, r, meX, meY: real; |
2309 |
rTime: LongInt; |
|
2310 |
EX, EY: LongInt; |
|
2311 |
valueResult: LongInt; |
|
2312 |
targXWrap, x, y, dX, dY: real; |
|
2313 |
t: LongInt; |
|
2314 |
value, range: LongInt; |
|
2315 |
begin |
|
2316 |
Flags:= Flags; // avoid compiler hint |
|
2317 |
meX:= hwFloat2Float(Me^.X); |
|
2318 |
meY:= hwFloat2Float(Me^.Y); |
|
2319 |
ap.Time:= 0; |
|
2320 |
rTime:= 350; |
|
2321 |
ap.ExplR:= 0; |
|
2322 |
if (WorldEdge = weWrap) then |
|
2323 |
if (Targ.Point.X < meX) then |
|
2324 |
targXWrap:= Targ.Point.X + (RightX-LeftX) |
|
2325 |
else |
|
2326 |
targXWrap:= Targ.Point.X - (RightX-LeftX); |
|
2327 |
valueResult:= BadTurn; |
|
2328 |
repeat |
|
2329 |
rTime:= rTime + 300 + Level * 50 + random(300); |
|
2330 |
if (WorldEdge = weWrap) and (random(2)=0) then |
|
2331 |
Vx:= (targXWrap - meX) / rTime |
|
2332 |
else |
|
2333 |
Vx:= (Targ.Point.X - meX) / rTime; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2334 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2335 |
Vx:= -(aiWindSpeed / Density) * rTime * 0.5 + Vx; |
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
2336 |
Vy:= aiGravityf * rTime * 0.5 - (Targ.Point.Y + 1 - meY) / rTime; |
15639 | 2337 |
r:= sqr(Vx) + sqr(Vy); |
2338 |
||
2339 |
if not (r > 1) then |
|
2340 |
begin |
|
2341 |
x:= meX; |
|
2342 |
y:= meY; |
|
2343 |
dX:= Vx; |
|
2344 |
dY:= -Vy; |
|
2345 |
t:= rTime; |
|
2346 |
repeat |
|
2347 |
x:= CheckWrap(x); |
|
2348 |
x:= x + dX; |
|
15656
21dece8f55fe
Teach AI how to deal with gfMoreWind
Wuzzy <Wuzzy2@mail.ru>
parents:
15642
diff
changeset
|
2349 |
if (GameFlags and gfMoreWind) <> 0 then |
15711
975232e840c7
Rename windSpeed variable to aiWindSpeed
Wuzzy <Wuzzy2@mail.ru>
parents:
15709
diff
changeset
|
2350 |
dX:= dX + aiWindSpeed / Density; |
15639 | 2351 |
|
2352 |
y:= y + dY; |
|
15712
c4d7eb75fd8a
AI: Add aiGravity and aiGravityf variables
Wuzzy <Wuzzy2@mail.ru>
parents:
15711
diff
changeset
|
2353 |
dY:= dY + aiGravityf; |
15639 | 2354 |
dec(t) |
2355 |
until (((Me = CurrentHedgehog^.Gear) and TestColl(trunc(x), trunc(y), 7)) or |
|
2356 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, trunc(x), trunc(y), 7))) or (t < -timeLimit); |
|
2357 |
||
2358 |
EX:= trunc(x); |
|
2359 |
EY:= trunc(y); |
|
2360 |
||
2361 |
// Sanity check: Make sure we're not too close to impact location |
|
2362 |
range:= Metric(trunc(meX), trunc(meY), EX, EY); |
|
2363 |
if (range <= 40) then |
|
15751
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
2364 |
value:= BadTurn |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
2365 |
// Timeout |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
2366 |
else if t < -timeLimit then |
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
2367 |
value:= BadTurn |
15639 | 2368 |
else |
15751
34138bf36c5c
AI: Don't end ammo tests too early for knife and drill rocket
Wuzzy <Wuzzy2@mail.ru>
parents:
15750
diff
changeset
|
2369 |
value:= RateShove(Me, EX, EY, 16, trunc(sqr((abs(dY)+abs(dX))*40000/10000)), 0, dX, dY, 0); |
15639 | 2370 |
|
2371 |
if (value = 0) and (Targ.Kind = gtHedgehog) and (Targ.Score > 0) then |
|
2372 |
value := BadTurn; |
|
2373 |
||
2374 |
if (valueResult < value) or ((valueResult = value) and (Level = 1)) then |
|
2375 |
begin |
|
2376 |
ap.Angle:= DxDy2AttackAnglef(Vx, Vy) + AIrndSign(random((Level - 1) * 12)); |
|
2377 |
ap.Power:= trunc(sqrt(r) * cMaxPower) - random((Level - 1) * 22 + 1); |
|
2378 |
valueResult:= value |
|
2379 |
end; |
|
2380 |
end |
|
2381 |
until rTime > 5050 - Level * 800; |
|
2382 |
TestKnife:= valueResult |
|
2383 |
end; |
|
2384 |
||
15636 | 2385 |
function TestAirMine(Me: PGear; Targ: TTarget; Level: LongInt; var ap: TAttackParams; Flags: LongWord): LongInt; |
2386 |
const |
|
2387 |
MIN_RANGE = 160; |
|
2388 |
MAX_RANGE = 2612; |
|
2389 |
var Vx, Vy, meX, meY, x, y, r: real; |
|
2390 |
rx, ry, valueResult: LongInt; |
|
2391 |
range, maxRange: integer; |
|
2392 |
begin |
|
2393 |
Flags:= Flags; // avoid compiler hint |
|
2394 |
maxRange:= MAX_RANGE - ((Level - 1) * 300); |
|
2395 |
TestAirMine:= BadTurn; |
|
2396 |
ap.ExplR:= 60; |
|
2397 |
ap.Time:= 0; |
|
2398 |
meX:= hwFloat2Float(Me^.X); |
|
2399 |
meY:= hwFloat2Float(Me^.Y); |
|
2400 |
x:= meX; |
|
2401 |
y:= meY; |
|
2402 |
||
2403 |
// Rough first range check |
|
2404 |
range:= Metric(trunc(x), trunc(y), Targ.Point.X, Targ.Point.Y); |
|
2405 |
if ( range < MIN_RANGE ) or ( range > maxRange ) then |
|
2406 |
exit(BadTurn); |
|
2407 |
||
2408 |
Vx:= (Targ.Point.X - x) * 1 / 1024; |
|
2409 |
Vy:= (Targ.Point.Y - y) * 1 / 1024; |
|
2410 |
ap.Angle:= DxDy2AttackAnglef(Vx, -Vy); |
|
2411 |
repeat |
|
2412 |
x:= x + vX; |
|
2413 |
y:= y + vY; |
|
2414 |
rx:= trunc(x); |
|
2415 |
ry:= trunc(y); |
|
2416 |
if ((Me = CurrentHedgehog^.Gear) and TestColl(rx, ry, 8)) or |
|
2417 |
((Me <> CurrentHedgehog^.Gear) and TestCollExcludingMe(Me^.Hedgehog^.Gear, rx, ry, 8)) then |
|
2418 |
begin |
|
2419 |
x:= x + vX * 8; |
|
2420 |
y:= y + vY * 8; |
|
2421 |
||
2422 |
if Level = 1 then |
|
2423 |
valueResult:= RateExplosion(Me, rx, ry, 61, afTrackFall) |
|
2424 |
else |
|
2425 |
valueResult:= RateExplosion(Me, rx, ry, 61); |
|
2426 |
||
2427 |
// Precise range calculation required to calculate power; |
|
2428 |
// The air mine is very sensitive to small changes in power. |
|
2429 |
r:= sqr(meX - rx) + sqr(meY - ry); |
|
2430 |
range:= trunc(sqrt(r)); |
|
2431 |
||
2432 |
if ( range < MIN_RANGE ) or ( range > maxRange ) then |
|
2433 |
exit(BadTurn); |
|
2434 |
ap.Power:= ((range + cHHRadius*2) * cMaxPower) div MAX_RANGE; |
|
2435 |
||
2436 |
// Apply inaccuracy |
|
2437 |
inc(ap.Power, (random(93*(Level-1)) - 31*(Level-1))); // Level 1 spread: -124 .. 248 |
|
15658 | 2438 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
2439 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 10))); |
15636 | 2440 |
|
2441 |
if (valueResult <= 0) then |
|
2442 |
valueResult:= BadTurn; |
|
2443 |
exit(valueResult) |
|
2444 |
end |
|
2445 |
until (abs(Targ.Point.X - trunc(x)) + abs(Targ.Point.Y - trunc(y)) < 4) |
|
2446 |
or (x < 0) |
|
2447 |
or (y < 0) |
|
2448 |
or (trunc(x) > LAND_WIDTH) |
|
2449 |
or (trunc(y) > LAND_HEIGHT); |
|
2450 |
||
2451 |
TestAirMine := BadTurn |
|
2452 |
end; |
|
2453 |
||
15642
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2454 |
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
|
2455 |
const |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2456 |
MAX_RANGE = 400; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2457 |
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
|
2458 |
rx, ry, valueResult: LongInt; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2459 |
range: integer; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2460 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2461 |
// 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
|
2462 |
// 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
|
2463 |
// TODO: Simulate random bullets |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2464 |
// 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
|
2465 |
// 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
|
2466 |
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
|
2467 |
TestMinigun:= BadTurn; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2468 |
ap.ExplR:= 0; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2469 |
ap.Time:= 0; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2470 |
ap.Power:= 1; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2471 |
x:= hwFloat2Float(Me^.X); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2472 |
y:= hwFloat2Float(Me^.Y); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2473 |
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
|
2474 |
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
|
2475 |
exit(BadTurn); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2476 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2477 |
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
|
2478 |
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
|
2479 |
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
|
2480 |
// Minigun angle is limited |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2481 |
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
|
2482 |
exit(BadTurn); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2483 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2484 |
// Apply inaccuracy |
15658 | 2485 |
if (not aiLaserSighting) then |
15688
10bcec19045c
Fix pas2c breakage caused by superfluous "+"s added by 250c778463f3, d9c62f196fe0 and 92ce801d0681
sheepluva
parents:
15661
diff
changeset
|
2486 |
inc(ap.Angle, AIrndSign(random((Level - 1) * 10))); |
15642
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2487 |
repeat |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2488 |
x:= x + vX; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2489 |
y:= y + vY; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2490 |
rx:= trunc(x); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2491 |
ry:= trunc(y); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2492 |
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
|
2493 |
((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
|
2494 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2495 |
x:= x + vX * 8; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2496 |
y:= y + vY * 8; |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2497 |
// 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
|
2498 |
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
|
2499 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2500 |
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
|
2501 |
begin |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2502 |
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
|
2503 |
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
|
2504 |
else valueResult := BadTurn |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2505 |
end |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2506 |
else |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2507 |
dec(valueResult, Level * 4000); |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2508 |
exit(valueResult) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2509 |
end |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2510 |
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
|
2511 |
or (x < 0) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2512 |
or (y < 0) |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2513 |
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
|
2514 |
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
|
2515 |
|
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2516 |
TestMinigun:= BadTurn |
92ce801d0681
AI: Add TestMinigun (still very basic, but applies angle restriction correctly)
Wuzzy <Wuzzy2@mail.ru>
parents:
15641
diff
changeset
|
2517 |
end; |
15636 | 2518 |
|
4 | 2519 |
end. |