author | Grigory Ustinov <grenka@altlinux.org> |
Wed, 25 Sep 2019 21:17:10 +0300 | |
changeset 15441 | f7f8f4b7bfb3 |
parent 15410 | 7718bdf60d45 |
child 15631 | 308930fe5f4a |
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:
10015
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
71 | 17 |
*) |
18 |
||
2599 | 19 |
{$INCLUDE "options.inc"} |
2587
0dfa56a8513c
fix a segfault in the iphone simulator by moving options.inc at the beginning of the file
koda
parents:
2376
diff
changeset
|
20 |
|
4 | 21 |
unit uAIMisc; |
22 |
interface |
|
4368 | 23 |
uses SDLh, uConsts, uFloat, uTypes; |
369 | 24 |
|
3370 | 25 |
const MAXBONUS = 1024; |
7161
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
26 |
|
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
27 |
afTrackFall = $00000001; |
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
28 |
afErasesLand = $00000002; |
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
29 |
afSetSkip = $00000004; |
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
30 |
|
8013 | 31 |
BadTurn = Low(LongInt) div 4; |
7161
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
32 |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
33 |
type TTarget = record // starting to look more and more like a gear |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
34 |
Point: TPoint; |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
35 |
Score, Radius: LongInt; |
8969 | 36 |
State: LongWord; |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
37 |
Density: real; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
38 |
skip, matters, dead: boolean; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
39 |
Kind: TGearType; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
40 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
41 |
TTargets = record |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
42 |
Count: Longword; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
43 |
ar: array[0..Pred(256)] of TTarget; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
44 |
reset: boolean; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
45 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
46 |
TJumpType = (jmpNone, jmpHJump, jmpLJump); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
47 |
TGoInfo = record |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
48 |
Ticks: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
49 |
FallPix: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
50 |
JumpType: TJumpType; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
51 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
52 |
TBonus = record |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
53 |
X, Y: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
54 |
Radius: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
55 |
Score: LongInt; |
10015 | 56 |
end; |
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
57 |
|
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
58 |
TBonuses = record |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
59 |
activity: boolean; |
15387 | 60 |
Count : LongInt; |
10015 | 61 |
ar : array[0..Pred(MAXBONUS)] of TBonus; |
62 |
end; |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
63 |
|
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
64 |
Twalkbonuses = record |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
65 |
Count: Longword; |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
66 |
ar: array[0..Pred(MAXBONUS div 8)] of TBonus; // don't use too many |
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
67 |
end; |
64 | 68 |
|
3038 | 69 |
procedure initModule; |
70 |
procedure freeModule; |
|
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
71 |
|
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
72 |
procedure FillTargets; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
73 |
procedure ResetTargets; inline; |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
74 |
procedure AddBonus(x, y: LongInt; r: Longword; s: LongInt); inline; |
6888 | 75 |
procedure FillBonuses(isAfterAttack: boolean); |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
76 |
procedure AwareOfExplosion(x, y, r: LongInt); inline; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
77 |
|
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
78 |
function RatePlace(Gear: PGear): LongInt; |
13668 | 79 |
function CheckWrap(x: real): real; inline; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
80 |
function TestColl(x, y, r: LongInt): boolean; inline; |
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:
7164
diff
changeset
|
81 |
function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
82 |
function TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
83 |
|
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
84 |
function RateExplosion(Me: PGear; x, y, r: LongInt): LongInt; inline; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
85 |
function RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; inline; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
86 |
function RealRateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
87 |
function RateShove(Me: PGear; x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
88 |
function RateShotgun(Me: PGear; gdX, gdY: real; x, y: LongInt): LongInt; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
89 |
function RateHammer(Me: PGear): LongInt; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
90 |
|
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
91 |
function HHGo(Gear, AltGear: PGear; var GoInfo: TGoInfo): boolean; |
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
92 |
function AIrndSign(num: LongInt): LongInt; inline; |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
93 |
function AIrndOffset(targ: TTarget; Level: LongWord): LongInt; inline; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
94 |
|
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
95 |
var ThinkingHH: PGear; |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
96 |
Targets: TTargets; |
921
8dd71d960cbc
If there's more hedgehogs in AI's team than in others, then it will be less afraid to give damage to friend hedgehog
unc0rr
parents:
883
diff
changeset
|
97 |
|
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
98 |
bonuses: TBonuses; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
99 |
|
8026
4a4f21070479
merge xymeng's gsoc engine with a few updates (and further checks on symbol definitions)
koda
parents:
8013
diff
changeset
|
100 |
walkbonuses: Twalkbonuses; |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
101 |
|
7471 | 102 |
const KillScore = 200; |
103 |
var friendlyfactor: LongInt = 300; |
|
8884
08fe08651130
set translucency on fruit theme water, clamp size to even number (same sdl window resize) and honouring min size, reduce calls to dmgmod a bit
nemo
parents:
8845
diff
changeset
|
104 |
var dmgMod: real = 1.0; |
7716 | 105 |
|
3370 | 106 |
implementation |
10015 | 107 |
uses uCollisions, uVariables, uUtils, uGearsUtils; |
3370 | 108 |
|
8924 | 109 |
var |
3370 | 110 |
KnownExplosion: record |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
111 |
X, Y, Radius: LongInt |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
112 |
end = (X: 0; Y: 0; Radius: 0); |
4 | 113 |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
114 |
procedure ResetTargets; inline; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
115 |
var i: LongWord; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
116 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
117 |
if Targets.reset then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
118 |
for i:= 0 to Targets.Count do |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
119 |
Targets.ar[i].dead:= false; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
120 |
Targets.reset:= false; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
121 |
end; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
122 |
procedure FillTargets; |
9137
d987230b85ed
fixed all engine compilation hints and notes (that I could see)
sheepluva
parents:
9080
diff
changeset
|
123 |
var //i, t: Longword; |
6011
519f8a58c021
Fix a bunch of warnings (also improves speed a bit in 32 bit code)
unC0Rr
parents:
5881
diff
changeset
|
124 |
f, e: LongInt; |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
125 |
Gear: PGear; |
4 | 126 |
begin |
127 |
Targets.Count:= 0; |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
128 |
Targets.reset:= false; |
921
8dd71d960cbc
If there's more hedgehogs in AI's team than in others, then it will be less afraid to give damage to friend hedgehog
unc0rr
parents:
883
diff
changeset
|
129 |
f:= 0; |
8dd71d960cbc
If there's more hedgehogs in AI's team than in others, then it will be less afraid to give damage to friend hedgehog
unc0rr
parents:
883
diff
changeset
|
130 |
e:= 0; |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
131 |
Gear:= GearsList; |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
132 |
while Gear <> nil do |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
133 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
134 |
if (((Gear^.Kind = gtHedgehog) and |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
135 |
(Gear <> ThinkingHH) and |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
136 |
(Gear^.Health > Gear^.Damage) and |
9136 | 137 |
(not Gear^.Hedgehog^.Team^.hasgone)) or |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
138 |
((Gear^.Kind = gtExplosives) and |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
139 |
(Gear^.Health > Gear^.Damage)) or |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
140 |
((Gear^.Kind = gtMine) and |
8972
f01b836d702e
I was using this to test firepunching likely duds, but most of the time that would probably just make him bazooka them
nemo
parents:
8971
diff
changeset
|
141 |
(Gear^.Health = 0) and |
f01b836d702e
I was using this to test firepunching likely duds, but most of the time that would probably just make him bazooka them
nemo
parents:
8971
diff
changeset
|
142 |
(Gear^.Damage < 35)) |
10015 | 143 |
) and |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
144 |
(Targets.Count < 256) then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
145 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
146 |
with Targets.ar[Targets.Count] do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
147 |
begin |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
148 |
skip:= false; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
149 |
dead:= false; |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
150 |
Kind:= Gear^.Kind; |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
151 |
Radius:= Gear^.Radius; |
8963
1a8335f0d968
Apply radius consistently. Still doesn't explain AI fail I think, although I can't run it right now.
nemo
parents:
8962
diff
changeset
|
152 |
Density:= hwFloat2Float(Gear^.Density)/3; |
8969 | 153 |
State:= Gear^.State; |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
154 |
matters:= (Gear^.AIHints and aihDoesntMatter) = 0; |
8924 | 155 |
|
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
156 |
Point.X:= hwRound(Gear^.X); |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
157 |
Point.Y:= hwRound(Gear^.Y); |
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
158 |
if (Gear^.Kind = gtHedgehog) then |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
159 |
begin |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
160 |
if (Gear^.Hedgehog^.Team^.Clan = CurrentTeam^.Clan) then |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
161 |
begin |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
162 |
Score:= Gear^.Damage - Gear^.Health; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
163 |
inc(f) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
164 |
end |
10015 | 165 |
else |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
166 |
begin |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
167 |
Score:= Gear^.Health - Gear^.Damage; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
168 |
inc(e) |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
169 |
end; |
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
170 |
end |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
171 |
else if Gear^.Kind = gtExplosives then |
8963
1a8335f0d968
Apply radius consistently. Still doesn't explain AI fail I think, although I can't run it right now.
nemo
parents:
8962
diff
changeset
|
172 |
Score:= Gear^.Health - Gear^.Damage |
10015 | 173 |
else if Gear^.Kind = gtMine then |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
174 |
Score:= max(0,35-Gear^.Damage); |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
175 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
176 |
inc(Targets.Count) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
177 |
end; |
8956
e0e914642e73
Also have AI consider mines that will almost certainly be duds by the time he gets to them. I'm mostly using it to test AI behaviour w/ firepunch/whip/bat on a mine-heavy map.
nemo
parents:
8955
diff
changeset
|
178 |
Gear:= Gear^.NextGear |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
179 |
end; |
921
8dd71d960cbc
If there's more hedgehogs in AI's team than in others, then it will be less afraid to give damage to friend hedgehog
unc0rr
parents:
883
diff
changeset
|
180 |
|
8dd71d960cbc
If there's more hedgehogs in AI's team than in others, then it will be less afraid to give damage to friend hedgehog
unc0rr
parents:
883
diff
changeset
|
181 |
if e > f then friendlyfactor:= 300 + (e - f) * 30 |
5881 | 182 |
else friendlyfactor:= max(30, 300 - f * 80 div max(1,e)) |
4 | 183 |
end; |
184 |
||
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
185 |
procedure AddBonus(x, y: LongInt; r: Longword; s: LongInt); inline; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6396
diff
changeset
|
186 |
begin |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
187 |
if(bonuses.Count < MAXBONUS) then |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
188 |
begin |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
189 |
bonuses.ar[bonuses.Count].x:= x; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
190 |
bonuses.ar[bonuses.Count].y:= y; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
191 |
bonuses.ar[bonuses.Count].Radius:= r; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
192 |
bonuses.ar[bonuses.Count].Score:= s; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
193 |
inc(bonuses.Count); |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
194 |
end; |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6396
diff
changeset
|
195 |
end; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6396
diff
changeset
|
196 |
|
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
197 |
procedure AddWalkBonus(x, y: LongInt; r: Longword; s: LongInt); inline; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
198 |
begin |
7378
ac9ce7f033df
Reduce number of walk bonuses further, doubt even 128 are needed. Fix count reset.
nemo
parents:
7375
diff
changeset
|
199 |
if(walkbonuses.Count < MAXBONUS div 8) then |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
200 |
begin |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
201 |
walkbonuses.ar[walkbonuses.Count].x:= x; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
202 |
walkbonuses.ar[walkbonuses.Count].y:= y; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
203 |
walkbonuses.ar[walkbonuses.Count].Radius:= r; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
204 |
walkbonuses.ar[walkbonuses.Count].Score:= s; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
205 |
inc(walkbonuses.Count); |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
206 |
end; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
207 |
end; |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
208 |
|
6888 | 209 |
procedure FillBonuses(isAfterAttack: boolean); |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
210 |
var Gear: PGear; |
549 | 211 |
MyClan: PClan; |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
212 |
i: Longint; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
213 |
begin |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
214 |
bonuses.Count:= 0; |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
215 |
bonuses.activity:= false; |
4372 | 216 |
MyClan:= ThinkingHH^.Hedgehog^.Team^.Clan; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
217 |
Gear:= GearsList; |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
218 |
while Gear <> nil do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
219 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
220 |
case Gear^.Kind of |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
221 |
gtGrenade |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
222 |
, gtClusterBomb |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
223 |
, gtGasBomb |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
224 |
, gtShell |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
225 |
, gtAirAttack |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
226 |
, gtMortar |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
227 |
, gtWatermelon |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
228 |
, gtDrill |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
229 |
, gtAirBomb |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
230 |
, gtCluster |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
231 |
, gtMelonPiece |
14528 | 232 |
, gtBee |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
233 |
, gtMolotov: bonuses.activity:= true; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
234 |
gtCase: |
14285 | 235 |
if (Gear^.AIHints and aihDoesntMatter) = 0 then |
236 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y) + 3, 37, 25); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
237 |
gtFlame: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
238 |
if (Gear^.State and gsttmpFlag) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
239 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 20, -50); |
8924 | 240 |
// avoid mines unless they are very likely to be duds, or are duds. also avoid if they are about to blow |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
241 |
gtMine: begin |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
242 |
if (Gear^.State and gstMoving) <> 0 then bonuses.activity:= true; |
10510 | 243 |
|
14785
b3fa6a19fc25
Computer hog no longer walks into player-placed mines if >= 90% duds
Wuzzy <Wuzzy2@mail.ru>
parents:
14607
diff
changeset
|
244 |
if ((Gear^.State and gstAttacking) = 0) and (((cMineDudPercent < 90) or ((Gear^.State and gstWait) <> 0) and (Gear^.Health <> 0)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
245 |
or (isAfterAttack and (Gear^.Health = 0) and (Gear^.Damage > 30))) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
246 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -50) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
247 |
else if (Gear^.State and gstAttacking) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
248 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, -50); // mine is on |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
249 |
end; |
14606 | 250 |
gtAirMine: if ((Gear^.State and gstFrozen) = 0) then AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), gear^.Angle+5, -30); |
8924 | 251 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
252 |
gtExplosives: |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
253 |
begin |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
254 |
//if (Gear^.State and gstMoving) <> 0 then bonuses.activity:= true; |
8924 | 255 |
|
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
256 |
if isAfterAttack then |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
257 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 75, -60 + Gear^.Health); |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
258 |
end; |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
259 |
|
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
260 |
gtSMine: begin |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
261 |
if (Gear^.State and (gstMoving or gstAttacking)) <> 0 then bonuses.activity:= true; |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
262 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
263 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 50, -30); |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
264 |
end; |
8924 | 265 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
266 |
gtDynamite: |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
267 |
begin |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
268 |
bonuses.activity:= true; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
269 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -75); |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
270 |
end; |
8924 | 271 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
272 |
gtHedgehog: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
273 |
begin |
10510 | 274 |
if (ThinkingHH <> Gear) |
275 |
and (((Gear^.State and (gstMoving or gstDrowning or gstHHDeath)) <> 0) |
|
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
276 |
or (Gear^.Health = 0) |
10510 | 277 |
or (Gear^.Damage >= Gear^.Health)) |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
278 |
then begin |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
279 |
bonuses.activity:= true; |
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
280 |
end; |
10510 | 281 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
282 |
if Gear^.Damage >= Gear^.Health then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
283 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 60, -25) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
284 |
else |
7385
4acb5c021cb9
Don't consider moving hedgehogs in place rating in after attack mode
unc0rr
parents:
7378
diff
changeset
|
285 |
if isAfterAttack |
4acb5c021cb9
Don't consider moving hedgehogs in place rating in after attack mode
unc0rr
parents:
7378
diff
changeset
|
286 |
and (ThinkingHH^.Hedgehog <> Gear^.Hedgehog) |
4acb5c021cb9
Don't consider moving hedgehogs in place rating in after attack mode
unc0rr
parents:
7378
diff
changeset
|
287 |
and ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_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
|
288 |
if (ClansCount > 2) or (MyClan = Gear^.Hedgehog^.Team^.Clan) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
289 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 150, -3) // hedgehog-friend |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
290 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
291 |
AddBonus(hwRound(Gear^.X), hwRound(Gear^.Y), 100, 3) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
292 |
end; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
293 |
end; |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
294 |
Gear:= Gear^.NextGear |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
295 |
end; |
10164
0570d4b22187
AI doesn't skip till action on the map stops (mostly dedicated to highlander) + various small tweaks
unc0rr
parents:
10140
diff
changeset
|
296 |
|
71 | 297 |
if isAfterAttack and (KnownExplosion.Radius > 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
|
298 |
with KnownExplosion do |
74 | 299 |
AddBonus(X, Y, Radius + 10, -Radius); |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
300 |
if isAfterAttack then |
7378
ac9ce7f033df
Reduce number of walk bonuses further, doubt even 128 are needed. Fix count reset.
nemo
parents:
7375
diff
changeset
|
301 |
begin |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
302 |
for i:= 0 to Pred(walkbonuses.Count) do |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
303 |
with walkbonuses.ar[i] do |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
304 |
AddBonus(X, Y, Radius, Score); |
7378
ac9ce7f033df
Reduce number of walk bonuses further, doubt even 128 are needed. Fix count reset.
nemo
parents:
7375
diff
changeset
|
305 |
walkbonuses.Count:= 0 |
ac9ce7f033df
Reduce number of walk bonuses further, doubt even 128 are needed. Fix count reset.
nemo
parents:
7375
diff
changeset
|
306 |
end; |
71 | 307 |
end; |
308 |
||
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
309 |
procedure AwareOfExplosion(x, y, r: LongInt); inline; |
71 | 310 |
begin |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
311 |
KnownExplosion.X:= x; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
312 |
KnownExplosion.Y:= y; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
313 |
KnownExplosion.Radius:= r |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
314 |
end; |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
315 |
|
371 | 316 |
function RatePlace(Gear: PGear): LongInt; |
317 |
var i, r: LongInt; |
|
2695 | 318 |
rate: LongInt; |
6778 | 319 |
gX, gY: real; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
320 |
begin |
6778 | 321 |
gX:= hwFloat2Float(Gear^.X); |
322 |
gY:= hwFloat2Float(Gear^.Y); |
|
2695 | 323 |
rate:= 0; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
324 |
for i:= 0 to Pred(bonuses.Count) do |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
325 |
with bonuses.ar[i] do |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
326 |
begin |
6778 | 327 |
r:= Radius; |
328 |
if abs(gX-X)+abs(gY-Y) < Radius then |
|
329 |
r:= trunc(sqrt(sqr(gX - X)+sqr(gY - Y))); |
|
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
330 |
if r < 20 then |
6777
fb71556205f4
Avoid local rate minimums around hog (within 15 pixels). Not tested.
unc0rr
parents:
6776
diff
changeset
|
331 |
inc(rate, Score * Radius) |
fb71556205f4
Avoid local rate minimums around hog (within 15 pixels). Not tested.
unc0rr
parents:
6776
diff
changeset
|
332 |
else if r < Radius then |
fb71556205f4
Avoid local rate minimums around hog (within 15 pixels). Not tested.
unc0rr
parents:
6776
diff
changeset
|
333 |
inc(rate, Score * (Radius - r)) |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
334 |
end; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
335 |
RatePlace:= rate; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
336 |
end; |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
337 |
|
13668 | 338 |
function CheckWrap(x: real): real; inline; |
339 |
begin |
|
340 |
if WorldEdge = weWrap then |
|
341 |
if (x < leftX) then |
|
342 |
x:= x + (rightX - leftX) |
|
343 |
else if x > rightX then |
|
344 |
x:= x - (rightX - leftX); |
|
345 |
CheckWrap:= x; |
|
346 |
end; |
|
347 |
||
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
348 |
function CheckBounds(x, y, r: Longint): boolean; inline; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
349 |
begin |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
350 |
CheckBounds := (((x-r) and LAND_WIDTH_MASK) = 0) and |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
351 |
(((x+r) and LAND_WIDTH_MASK) = 0) and |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
352 |
(((y-r) and LAND_HEIGHT_MASK) = 0) and |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
353 |
(((y+r) and LAND_HEIGHT_MASK) = 0); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
354 |
end; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
355 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
356 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
357 |
function TestCollWithEverything(x, y, r: LongInt): boolean; inline; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
358 |
begin |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
359 |
if not CheckBounds(x, y, r) then |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
360 |
exit(false); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
361 |
|
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
362 |
if (Land[y-r, x-r] <> 0) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
363 |
(Land[y+r, x-r] <> 0) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
364 |
(Land[y-r, x+r] <> 0) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
365 |
(Land[y+r, x+r] <> 0) then |
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
366 |
exit(true); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
367 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
368 |
TestCollWithEverything := false; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
369 |
end; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
370 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
371 |
function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
372 |
begin |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
373 |
if not CheckBounds(x, y, r) then |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
374 |
exit(false); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
375 |
|
8958
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
376 |
if (Land[y-r, x-r] > lfAllObjMask) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
377 |
(Land[y+r, x-r] > lfAllObjMask) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
378 |
(Land[y-r, x-r] > lfAllObjMask) or |
3818b38d72c0
simplify mine/explosive damage calc. clear dX in stable explosives. remove 0/4096 in trace routines.
nemo
parents:
8957
diff
changeset
|
379 |
(Land[y+r, x+r] > lfAllObjMask) then |
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
380 |
exit(true); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
381 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
382 |
TestCollExcludingObjects:= false; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
383 |
end; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
384 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
385 |
function TestColl(x, y, r: LongInt): boolean; inline; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
386 |
begin |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
387 |
if not CheckBounds(x, y, r) then |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
388 |
exit(false); |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
389 |
|
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
11046
diff
changeset
|
390 |
if (Land[y-r, x-r] and lfNotCurHogCrate <> 0) or |
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
11046
diff
changeset
|
391 |
(Land[y+r, x-r] and lfNotCurHogCrate <> 0) or |
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
11046
diff
changeset
|
392 |
(Land[y+r, x-r] and lfNotCurHogCrate <> 0) or |
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
11046
diff
changeset
|
393 |
(Land[y+r, x+r] and lfNotCurHogCrate <> 0) then |
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
394 |
exit(true); |
8924 | 395 |
|
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
396 |
TestColl:= false; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
397 |
end; |
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
398 |
|
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
399 |
|
2616
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
400 |
// Wrapper to test various approaches. If it works reasonably, will just replace. |
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
401 |
// Right now, converting to hwFloat is a tad inefficient since the x/y were hwFloat to begin with... |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
402 |
function TestCollExcludingMe(Me: PGear; x, y, r: LongInt): boolean; inline; |
2616
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
403 |
var MeX, MeY: LongInt; |
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
404 |
begin |
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
405 |
if ((x and LAND_WIDTH_MASK) = 0) and ((y and LAND_HEIGHT_MASK) = 0) 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:
6986
diff
changeset
|
406 |
begin |
2616
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
407 |
MeX:= hwRound(Me^.X); |
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
408 |
MeY:= hwRound(Me^.Y); |
6e2b341dc408
AI fire w/o moving for artillery. Needs testing, but seems to work quickly and w/o AI screwups.
nemo
parents:
2599
diff
changeset
|
409 |
// We are still inside the hog. Skip radius test |
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
410 |
if ((sqr(x-MeX) + sqr(y-MeY)) < 256) and (Land[y, x] and lfObjMask = 0) then |
7041 | 411 |
exit(false); |
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:
6986
diff
changeset
|
412 |
end; |
8845
8cf1ed3bae45
Fix AI collision detection with crates and overlapping hedgehogs. Remove duplicating code
jaree@jaree-VirtualBox
parents:
8810
diff
changeset
|
413 |
TestCollExcludingMe:= TestCollWithEverything(x, y, r) |
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:
7164
diff
changeset
|
414 |
end; |
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:
7164
diff
changeset
|
415 |
|
4 | 416 |
|
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
417 |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
418 |
function TraceFall(eX, eY: LongInt; var x, y: Real; dX, dY: Real; r: LongWord; Target: TTarget): LongInt; |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
419 |
var skipLandCheck: boolean; |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
420 |
rCorner, dxdy, odX, odY: real; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
421 |
dmg: LongInt; |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
422 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
423 |
odX:= dX; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
424 |
odY:= dY; |
6769
44ad49a3a126
Add drowning to grenade too, try some little optimisations
nemo
parents:
6768
diff
changeset
|
425 |
skipLandCheck:= true; |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
426 |
// ok. attempt approximate search for an unbroken trajectory into water. if it continues far enough, assume out of map |
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
427 |
rCorner:= r * 0.75; |
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
428 |
while true do |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
429 |
begin |
13668 | 430 |
x:= CheckWrap(x); |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
431 |
x:= x + dX; |
6768 | 432 |
y:= y + dY; |
433 |
dY:= dY + cGravityf; |
|
6769
44ad49a3a126
Add drowning to grenade too, try some little optimisations
nemo
parents:
6768
diff
changeset
|
434 |
skipLandCheck:= skipLandCheck and (r <> 0) and (abs(eX-x) + abs(eY-y) < r) and ((abs(eX-x) < rCorner) or (abs(eY-y) < rCorner)); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
435 |
if not skipLandCheck and TestCollExcludingObjects(trunc(x), trunc(y), Target.Radius) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
436 |
with Target do |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
437 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
438 |
if (Kind = gtHedgehog) and (0.4 < dY) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
439 |
begin |
8966
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
440 |
dmg := 1 + trunc((dY - 0.4) * 70); |
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
441 |
exit(dmg) |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
442 |
end |
10015 | 443 |
else |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
444 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
445 |
dxdy:= abs(dX)+abs(dY); |
10015 | 446 |
if ((Kind = gtMine) and (dxdy > 0.35)) or |
447 |
((Kind = gtExplosives) and |
|
8969 | 448 |
(((State and gstTmpFlag <> 0) and (dxdy > 0.35)) or |
10015 | 449 |
((State and gstTmpFlag = 0) and |
450 |
((abs(odX) > 0.15) or ((abs(odY) > 0.15) and |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
451 |
(abs(odX) > 0.02))) and (dxdy > 0.35)))) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
452 |
begin |
8966
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
453 |
dmg := trunc(dxdy * 25); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
454 |
exit(dmg) |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
455 |
end |
9136 | 456 |
else if (Kind = gtExplosives) and (not(abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
457 |
begin |
8966
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
458 |
dmg := trunc(dy * 70); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
459 |
exit(dmg) |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
460 |
end |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
461 |
end; |
7041 | 462 |
exit(0) |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
463 |
end; |
10354 | 464 |
if CheckCoordInWater(round(x), round(y)) then exit(-1) |
8952
a6ee1e7310fb
trying to make AI aware of mine/explosive break point. also remove redundant test.
nemo
parents:
8951
diff
changeset
|
465 |
end |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
466 |
end; |
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
467 |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
468 |
function TraceShoveFall(var x, y: Real; dX, dY: Real; Target: TTarget): LongInt; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
469 |
var dmg: LongInt; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
470 |
dxdy, odX, odY: real; |
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
|
471 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
472 |
odX:= dX; |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
473 |
odY:= dY; |
7716 | 474 |
//v:= random($FFFFFFFF); |
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
|
475 |
while true do |
8957
bdeb52d57dae
explosive/mine damage for shove fall. AI still seems to refuse to bat dud mines :(
nemo
parents:
8956
diff
changeset
|
476 |
begin |
13668 | 477 |
x:= CheckWrap(x); |
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
|
478 |
x:= x + dX; |
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
|
479 |
y:= y + dY; |
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
|
480 |
dY:= dY + cGravityf; |
7435
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
481 |
|
8924 | 482 |
{ if ((trunc(y) and LAND_HEIGHT_MASK) = 0) and ((trunc(x) and LAND_WIDTH_MASK) = 0) then |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
483 |
begin |
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
484 |
LandPixels[trunc(y), trunc(x)]:= v; |
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
485 |
UpdateLandTexture(trunc(X), 1, trunc(Y), 1, true); |
7435
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
486 |
end;} |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
487 |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
488 |
if TestCollExcludingObjects(trunc(x), trunc(y), Target.Radius) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
489 |
with Target do |
8957
bdeb52d57dae
explosive/mine damage for shove fall. AI still seems to refuse to bat dud mines :(
nemo
parents:
8956
diff
changeset
|
490 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
491 |
if (Kind = gtHedgehog) and (0.4 < dY) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
492 |
begin |
8966
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
493 |
dmg := trunc((dY - 0.4) * 70); |
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
494 |
exit(dmg); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
495 |
end |
10015 | 496 |
else |
8957
bdeb52d57dae
explosive/mine damage for shove fall. AI still seems to refuse to bat dud mines :(
nemo
parents:
8956
diff
changeset
|
497 |
begin |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
498 |
dxdy:= abs(dX)+abs(dY); |
10015 | 499 |
if ((Kind = gtMine) and (dxdy > 0.4)) or |
500 |
((Kind = gtExplosives) and |
|
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:
8970
diff
changeset
|
501 |
(((State and gstTmpFlag <> 0) and (dxdy > 0.4)) or |
10015 | 502 |
((State and gstTmpFlag = 0) and |
503 |
((abs(odX) > 0.15) or ((abs(odY) > 0.15) and |
|
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
504 |
(abs(odX) > 0.02))) and (dxdy > 0.35)))) then |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
505 |
begin |
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:
8970
diff
changeset
|
506 |
dmg := trunc(dxdy * 50); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
507 |
exit(dmg) |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
508 |
end |
9136 | 509 |
else if (Kind = gtExplosives) and (not(abs(odX) > 0.15) or ((abs(odY) > 0.15) and (abs(odX) > 0.02))) and (dY > 0.2) then |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
510 |
begin |
8966
5ab59d79bc9a
remove redundant abs, and some incorrect 1+ to damage
nemo
parents:
8964
diff
changeset
|
511 |
dmg := trunc(dy * 70); |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
512 |
exit(dmg) |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
513 |
end |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
514 |
end; |
7041 | 515 |
exit(0) |
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
|
516 |
end; |
10354 | 517 |
if CheckCoordInWater(round(x), round(y)) 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:
6986
diff
changeset
|
518 |
// returning -1 for drowning so it can be considered in the Rate routine |
7041 | 519 |
exit(-1) |
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:
6986
diff
changeset
|
520 |
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
|
521 |
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
|
522 |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
523 |
function RateExplosion(Me: PGear; x, y, r: LongInt): LongInt; inline; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
524 |
begin |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
525 |
RateExplosion:= RealRateExplosion(Me, x, y, r, 0); |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
526 |
ResetTargets; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
527 |
end; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
528 |
function RateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; inline; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
529 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
530 |
RateExplosion:= RealRateExplosion(Me, x, y, r, Flags); |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
531 |
ResetTargets; |
6986
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
532 |
end; |
409dd3851309
add support for default pascal mode by removing default arguments value (maybe this also helps the parser)
koda
parents:
6952
diff
changeset
|
533 |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
534 |
function RealRateExplosion(Me: PGear; x, y, r: LongInt; Flags: LongWord): LongInt; |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
535 |
var i, fallDmg, dmg, dmgBase, rate, subrate, erasure: LongInt; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
536 |
pX, pY, dX, dY: real; |
8013 | 537 |
hadSkips: boolean; |
4 | 538 |
begin |
13668 | 539 |
x:= round(CheckWrap(real(x))); |
6783 | 540 |
fallDmg:= 0; |
2695 | 541 |
rate:= 0; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
542 |
// add our virtual position |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
543 |
with Targets.ar[Targets.Count] do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
544 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
545 |
Point.x:= hwRound(Me^.X); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
546 |
Point.y:= hwRound(Me^.Y); |
8013 | 547 |
skip:= false; |
548 |
matters:= true; |
|
8960 | 549 |
Kind:= gtHedgehog; |
8961 | 550 |
Density:= 1; |
8963
1a8335f0d968
Apply radius consistently. Still doesn't explain AI fail I think, although I can't run it right now.
nemo
parents:
8962
diff
changeset
|
551 |
Radius:= cHHRadius; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
552 |
Score:= - ThinkingHH^.Health |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
553 |
end; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
554 |
// rate explosion |
8013 | 555 |
|
7161
21a9c70b2070
Name the flags for fall tracking and indicating whether the explosion erases terrain.
nemo
parents:
7154
diff
changeset
|
556 |
if (Flags and afErasesLand <> 0) and (GameFlags and gfSolidLand = 0) then erasure:= r |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
557 |
else erasure:= 0; |
8013 | 558 |
|
559 |
hadSkips:= false; |
|
560 |
||
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
561 |
for i:= 0 to Targets.Count do |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
562 |
if not Targets.ar[i].dead then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
563 |
with Targets.ar[i] do |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
564 |
if not matters then hadSkips:= true |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
565 |
else |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
566 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
567 |
dmg:= 0; |
8963
1a8335f0d968
Apply radius consistently. Still doesn't explain AI fail I think, although I can't run it right now.
nemo
parents:
8962
diff
changeset
|
568 |
dmgBase:= r + Radius div 2; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
569 |
if abs(Point.x - x) + abs(Point.y - y) < dmgBase then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
570 |
dmg:= trunc(dmgMod * min((dmgBase - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y)))) div 2, r)); |
5642 | 571 |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
572 |
if dmg > 0 then |
6767
ccbf07b38a43
First pass at making AI drowning aware. No concerns of performance, only applied to bazooka (not bat/fp etc)
nemo
parents:
6766
diff
changeset
|
573 |
begin |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
574 |
pX:= Point.x; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
575 |
pY:= Point.y; |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
576 |
fallDmg:= 0; |
10635
8e8b320eefad
nil out CurrentHedgehog in FreeModule, add a test for nil'd CurrentHedgehog in DelCI since I'd still like to use DeleteGear for the other stuff it does. Move some variable initialiasations in AI Misc to hopefully avoid some uninit val errors.
nemo
parents:
10510
diff
changeset
|
577 |
dX:= 0; |
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:
8970
diff
changeset
|
578 |
if (Flags and afTrackFall <> 0) and (Score > 0) and (dmg < Score) then |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
579 |
begin |
8955 | 580 |
dX:= (0.005 * dmg + 0.01) / Density; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
581 |
dY:= dX; |
10015 | 582 |
if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and |
10140 | 583 |
(((abs(dY) >= 0.15) and (abs(dX) < 0.02)) or |
8954 | 584 |
((abs(dY) < 0.15) and (abs(dX) < 0.15))) then |
585 |
dX:= 0; |
|
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:
8970
diff
changeset
|
586 |
|
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:
8970
diff
changeset
|
587 |
if pX - x < 0 then dX:= -dX; |
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:
8970
diff
changeset
|
588 |
if pY - y < 0 then dY:= -dY; |
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:
8970
diff
changeset
|
589 |
|
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
590 |
if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
591 |
(Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
592 |
fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, 0, Targets.ar[i]) * dmgMod) |
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
593 |
else fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, erasure, Targets.ar[i]) * dmgMod) |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
594 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
595 |
if Kind = gtHedgehog then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
596 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
597 |
if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
598 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
599 |
if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
600 |
inc(rate, (KillScore + Score div 10) * 1024) // Add a bit of a bonus for bigger hog drownings |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
601 |
else |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
602 |
dec(rate, (KillScore * friendlyfactor div 100 - Score div 10) * 1024) // and more of a punishment for drowning bigger friendly hogs |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
603 |
end |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
604 |
else if (dmg+fallDmg) >= abs(Score) then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
605 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
606 |
dead:= true; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
607 |
Targets.reset:= true; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
608 |
if dX < 0.035 then |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
609 |
begin |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
610 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or (Flags and afTrackFall)); |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
611 |
if abs(subrate) > 2000 then inc(Rate,subrate) |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
612 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
613 |
if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
614 |
inc(rate, KillScore * 1024 + (dmg + fallDmg)) // tiny bonus for dealing more damage than needed to kill |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
615 |
else dec(rate, KillScore * friendlyfactor div 100 * 1024) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
616 |
end |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
617 |
else |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
618 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
619 |
if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
620 |
inc(rate, (dmg + fallDmg) * 1024) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
621 |
else dec(rate, (dmg + fallDmg) * friendlyfactor div 100 * 1024) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
622 |
end |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
623 |
end |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
624 |
else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
625 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
626 |
dead:= true; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
627 |
Targets.reset:= true; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
628 |
if Kind = gtExplosives then |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
629 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or (Flags and afTrackFall)) |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
630 |
else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or (Flags and afTrackFall)); |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
631 |
if abs(subrate) > 2000 then inc(Rate,subrate); |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
632 |
end |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
633 |
end |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
634 |
end; |
8013 | 635 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13476
diff
changeset
|
636 |
if hadSkips and (rate <= 0) then |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
637 |
RealRateExplosion:= BadTurn |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
638 |
else |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
639 |
RealRateExplosion:= rate; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
640 |
end; |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
641 |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
642 |
function RateShove(Me: PGear; x, y, r, power, kick: LongInt; gdX, gdY: real; Flags: LongWord): LongInt; |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
643 |
var i, fallDmg, dmg, rate, subrate: LongInt; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
644 |
dX, dY, pX, pY: real; |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
645 |
hadSkips: boolean; |
79 | 646 |
begin |
6783 | 647 |
fallDmg:= 0; |
7210
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
648 |
dX:= gdX * 0.01 * kick; |
2ff30b79d2b0
- Adjust some consts so whip and firepunch work perfectly
unc0rr
parents:
7208
diff
changeset
|
649 |
dY:= gdY * 0.01 * kick; |
2695 | 650 |
rate:= 0; |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
651 |
hadSkips:= false; |
433 | 652 |
for i:= 0 to Pred(Targets.Count) do |
79 | 653 |
with Targets.ar[i] do |
8969 | 654 |
if skip then |
655 |
begin |
|
656 |
if Flags and afSetSkip = 0 then skip:= false |
|
657 |
end |
|
658 |
else if matters then |
|
79 | 659 |
begin |
8969 | 660 |
dmg:= 0; |
661 |
if abs(Point.x - x) + abs(Point.y - y) < r then |
|
662 |
dmg:= r - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y))); |
|
663 |
||
664 |
if dmg > 0 then |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
665 |
begin |
8969 | 666 |
pX:= Point.x; |
667 |
pY:= Point.y-2; |
|
668 |
fallDmg:= 0; |
|
669 |
if (Flags and afSetSkip <> 0) then skip:= true; |
|
9136 | 670 |
if (not dead) and (Flags and afTrackFall <> 0) and (Score > 0) and (power < Score) then |
10015 | 671 |
if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and |
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:
8970
diff
changeset
|
672 |
(((abs(dY) > 0.15) and (abs(dX) < 0.02)) or |
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:
8970
diff
changeset
|
673 |
((abs(dY) < 0.15) and (abs(dX) < 0.15))) then |
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:
8970
diff
changeset
|
674 |
fallDmg:= trunc(TraceShoveFall(pX, pY, 0, dY, Targets.ar[i]) * dmgMod) |
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:
8970
diff
changeset
|
675 |
else |
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:
8970
diff
changeset
|
676 |
fallDmg:= trunc(TraceShoveFall(pX, pY, dX, dY, Targets.ar[i]) * dmgMod); |
8969 | 677 |
if Kind = gtHedgehog then |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
678 |
begin |
8969 | 679 |
if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI |
680 |
begin |
|
681 |
if Score > 0 then |
|
682 |
inc(rate, KillScore + Score div 10) // Add a bit of a bonus for bigger hog drownings |
|
683 |
else |
|
684 |
dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs |
|
685 |
end |
|
686 |
else if power+fallDmg >= abs(Score) then |
|
687 |
begin |
|
688 |
dead:= true; |
|
689 |
Targets.reset:= true; |
|
690 |
if dX < 0.035 then |
|
691 |
begin |
|
692 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or afTrackFall); |
|
693 |
if abs(subrate) > 2000 then inc(Rate,subrate div 1024) |
|
694 |
end; |
|
695 |
if Score > 0 then |
|
696 |
inc(rate, KillScore) |
|
697 |
else |
|
698 |
dec(rate, KillScore * friendlyfactor div 100) |
|
699 |
end |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
700 |
else |
8969 | 701 |
begin |
702 |
if Score > 0 then |
|
703 |
inc(rate, power+fallDmg) |
|
704 |
else |
|
705 |
dec(rate, (power+fallDmg) * friendlyfactor div 100) |
|
706 |
end |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
707 |
end |
8969 | 708 |
else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
709 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
710 |
dead:= true; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
711 |
Targets.reset:= true; |
8969 | 712 |
if Kind = gtExplosives then |
713 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or (Flags and afTrackFall)) |
|
714 |
else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or (Flags and afTrackFall)); |
|
715 |
if abs(subrate) > 2000 then inc(Rate,subrate div 1024); |
|
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
716 |
end |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
717 |
end |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
718 |
end |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
719 |
else |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
720 |
hadSkips:= true; |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
721 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13476
diff
changeset
|
722 |
if hadSkips and (rate <= 0) then |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
723 |
RateShove:= BadTurn |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
724 |
else |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
725 |
RateShove:= rate * 1024; |
8970 | 726 |
ResetTargets |
79 | 727 |
end; |
728 |
||
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
729 |
function RateShotgun(Me: PGear; gdX, gdY: real; x, y: LongInt): LongInt; |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
730 |
var i, dmg, fallDmg, baseDmg, rate, subrate, erasure: LongInt; |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
731 |
pX, pY, dX, dY: real; |
8013 | 732 |
hadSkips: boolean; |
509 | 733 |
begin |
2695 | 734 |
rate:= 0; |
6776 | 735 |
gdX:= gdX * 0.01; |
736 |
gdY:= gdX * 0.01; |
|
509 | 737 |
// add our virtual position |
738 |
with Targets.ar[Targets.Count] do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
739 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
740 |
Point.x:= hwRound(Me^.X); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
741 |
Point.y:= hwRound(Me^.Y); |
8013 | 742 |
skip:= false; |
743 |
matters:= true; |
|
8960 | 744 |
Kind:= gtHedgehog; |
8961 | 745 |
Density:= 1; |
8963
1a8335f0d968
Apply radius consistently. Still doesn't explain AI fail I think, although I can't run it right now.
nemo
parents:
8962
diff
changeset
|
746 |
Radius:= cHHRadius; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
747 |
Score:= - ThinkingHH^.Health |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
748 |
end; |
509 | 749 |
// rate shot |
6771 | 750 |
baseDmg:= cHHRadius + cShotgunRadius + 4; |
8013 | 751 |
|
6771 | 752 |
if GameFlags and gfSolidLand = 0 then erasure:= cShotgunRadius |
753 |
else erasure:= 0; |
|
8013 | 754 |
|
755 |
hadSkips:= false; |
|
756 |
||
509 | 757 |
for i:= 0 to Targets.Count do |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
758 |
if not Targets.ar[i].dead then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
759 |
with Targets.ar[i] do |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
760 |
if not matters then hadSkips:= true |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
761 |
else |
509 | 762 |
begin |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
763 |
dmg:= 0; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
764 |
if abs(Point.x - x) + abs(Point.y - y) < baseDmg then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
765 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
766 |
dmg:= min(baseDmg - trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y))), 25); |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
767 |
dmg:= trunc(dmg * dmgMod); |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
768 |
end; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
769 |
if dmg > 0 then |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
770 |
begin |
10635
8e8b320eefad
nil out CurrentHedgehog in FreeModule, add a test for nil'd CurrentHedgehog in DelCI since I'd still like to use DeleteGear for the other stuff it does. Move some variable initialiasations in AI Misc to hopefully avoid some uninit val errors.
nemo
parents:
10510
diff
changeset
|
771 |
fallDmg:= 0; |
8e8b320eefad
nil out CurrentHedgehog in FreeModule, add a test for nil'd CurrentHedgehog in DelCI since I'd still like to use DeleteGear for the other stuff it does. Move some variable initialiasations in AI Misc to hopefully avoid some uninit val errors.
nemo
parents:
10510
diff
changeset
|
772 |
pX:= Point.x; |
8e8b320eefad
nil out CurrentHedgehog in FreeModule, add a test for nil'd CurrentHedgehog in DelCI since I'd still like to use DeleteGear for the other stuff it does. Move some variable initialiasations in AI Misc to hopefully avoid some uninit val errors.
nemo
parents:
10510
diff
changeset
|
773 |
pY:= Point.y; |
9136 | 774 |
if (not dead) and (Score > 0) and (dmg < Score) then |
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:
8970
diff
changeset
|
775 |
begin |
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:
8970
diff
changeset
|
776 |
dX:= gdX * dmg / Density; |
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:
8970
diff
changeset
|
777 |
dY:= gdY * dmg / Density; |
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:
8970
diff
changeset
|
778 |
if dX < 0 then dX:= dX - 0.01 |
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:
8970
diff
changeset
|
779 |
else dX:= dX + 0.01; |
10015 | 780 |
if (Kind = gtExplosives) and (State and gstTmpFlag = 0) and |
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:
8970
diff
changeset
|
781 |
(((abs(dY) > 0.15) and (abs(dX) < 0.02)) or |
10015 | 782 |
((abs(dY) < 0.15) and (abs(dX) < 0.15))) then |
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:
8970
diff
changeset
|
783 |
dX:= 0; |
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:
8970
diff
changeset
|
784 |
if (x and LAND_WIDTH_MASK = 0) and ((y+cHHRadius+2) and LAND_HEIGHT_MASK = 0) and |
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:
8970
diff
changeset
|
785 |
(Land[y+cHHRadius+2, x] and lfIndestructible <> 0) then |
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:
8970
diff
changeset
|
786 |
fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, 0, Targets.ar[i]) * dmgMod) |
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:
8970
diff
changeset
|
787 |
else fallDmg:= trunc(TraceFall(x, y, pX, pY, dX, dY, erasure, Targets.ar[i]) * dmgMod) |
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:
8970
diff
changeset
|
788 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
789 |
if Kind = gtHedgehog then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
790 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
791 |
if fallDmg < 0 then // drowning. score healthier hogs higher, since their death is more likely to benefit the AI |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
792 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
793 |
if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
794 |
inc(rate, KillScore + Score div 10) // Add a bit of a bonus for bigger hog drownings |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
795 |
else |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
796 |
dec(rate, KillScore * friendlyfactor div 100 - Score div 10) // and more of a punishment for drowning bigger friendly hogs |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
797 |
end |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
798 |
else if (dmg+fallDmg) >= abs(Score) then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
799 |
begin |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
800 |
dead:= true; |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
801 |
Targets.reset:= true; |
15387 | 802 |
if abs(gdX) < 0.035 then |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
803 |
begin |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
804 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or afTrackFall); |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
805 |
if abs(subrate) > 2000 then inc(Rate,subrate div 1024) |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
806 |
end; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
807 |
if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
808 |
inc(rate, KillScore) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
809 |
else |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
810 |
dec(rate, KillScore * friendlyfactor div 100) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
811 |
end |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
812 |
else if Score > 0 then |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
813 |
inc(rate, dmg+fallDmg) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
814 |
else dec(rate, (dmg+fallDmg) * friendlyfactor div 100) |
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
815 |
end |
8962
9780e79619ed
So. This at least should make the math more accurate, even if it still doesn't appear to resolve prob w/ AI attacks
nemo
parents:
8961
diff
changeset
|
816 |
else if (fallDmg >= 0) and ((dmg+fallDmg) >= Score) then |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
817 |
begin |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
818 |
dead:= true; |
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
819 |
Targets.reset:= true; |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
820 |
if Kind = gtExplosives then |
8951
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
821 |
subrate:= RealRateExplosion(Me, round(pX), round(pY), 151, afErasesLand or afTrackFall) |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
822 |
else subrate:= RealRateExplosion(Me, round(pX), round(pY), 101, afErasesLand or afTrackFall); |
95dd846caf5d
only rate subs if significant. still very much need correct fall+damage esp given different knocks.
nemo
parents:
8950
diff
changeset
|
823 |
if abs(subrate) > 2000 then inc(Rate,subrate div 1024); |
8939
b26aaf28c920
So. First pass. Add secondary explosions to RateExplosion and RateShotgun. Not yet added to shoves. This is of limited utility at present since the dX has to be small since we can't bother tracing all hog motion. But, should be more useful once shove is added, and tracking of explosives and mines.
nemo
parents:
8924
diff
changeset
|
824 |
end |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
825 |
end |
509 | 826 |
end; |
8013 | 827 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13476
diff
changeset
|
828 |
if hadSkips and (rate <= 0) then |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
829 |
RateShotgun:= BadTurn |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
830 |
else |
8950
3bf81ed1f984
Make hogs aware of dud mines and explosives. Still a bit more needed.
nemo
parents:
8939
diff
changeset
|
831 |
RateShotgun:= rate * 1024; |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
832 |
ResetTargets; |
509 | 833 |
end; |
834 |
||
5645 | 835 |
function RateHammer(Me: PGear): LongInt; |
836 |
var x, y, i, r, rate: LongInt; |
|
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
837 |
hadSkips: boolean; |
5645 | 838 |
begin |
839 |
// hammer hit shift against attecker hog is 10 |
|
840 |
x:= hwRound(Me^.X) + hwSign(Me^.dX) * 10; |
|
841 |
y:= hwRound(Me^.Y); |
|
842 |
rate:= 0; |
|
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
843 |
hadSkips:= false; |
5645 | 844 |
for i:= 0 to Pred(Targets.Count) do |
845 |
with Targets.ar[i] do |
|
846 |
// hammer hit radius is 8, shift is 10 |
|
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
847 |
if (not matters) then |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
848 |
hadSkips:= true |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
849 |
else if matters and (Kind = gtHedgehog) and (abs(Point.x - x) + abs(Point.y - y) < 18) then |
7279 | 850 |
begin |
6785 | 851 |
r:= trunc(sqrt(sqr(Point.x - x)+sqr(Point.y - y))); |
5645 | 852 |
|
7279 | 853 |
if r <= 18 then |
8924 | 854 |
if Score > 0 then |
7279 | 855 |
inc(rate, Score div 3) |
856 |
else |
|
7285 | 857 |
inc(rate, Score div 3 * friendlyfactor div 100) |
7279 | 858 |
end; |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
859 |
|
13478
d3209e0caf12
Fix aihDoesntMatter still being attacked with air attack
Wuzzy <Wuzzy2@mail.ru>
parents:
13476
diff
changeset
|
860 |
if hadSkips and (rate <= 0) then |
13476
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
861 |
RateHammer:= BadTurn |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
862 |
else |
0d27f0c21b71
Fix aihDoesntMatter not applying to hammer and shover
Wuzzy <Wuzzy2@mail.ru>
parents:
13469
diff
changeset
|
863 |
RateHammer:= rate * 1024; |
5645 | 864 |
end; |
865 |
||
369 | 866 |
function HHJump(Gear: PGear; JumpType: TJumpType; var GoInfo: TGoInfo): boolean; |
371 | 867 |
var bX, bY: LongInt; |
80 | 868 |
begin |
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:
6986
diff
changeset
|
869 |
HHJump:= false; |
80 | 870 |
GoInfo.Ticks:= 0; |
871 |
GoInfo.JumpType:= jmpNone; |
|
369 | 872 |
bX:= hwRound(Gear^.X); |
873 |
bY:= hwRound(Gear^.Y); |
|
80 | 874 |
case JumpType of |
7041 | 875 |
jmpNone: exit(false); |
8924 | 876 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
877 |
jmpHJump: |
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:
6986
diff
changeset
|
878 |
if TestCollisionYwithGear(Gear, -1) = 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
|
879 |
begin |
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:
6986
diff
changeset
|
880 |
Gear^.dY:= -_0_2; |
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:
6986
diff
changeset
|
881 |
SetLittle(Gear^.dX); |
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:
6986
diff
changeset
|
882 |
Gear^.State:= Gear^.State or gstMoving or gstHHJumping; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
883 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
884 |
else |
7041 | 885 |
exit(false); |
8924 | 886 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
887 |
jmpLJump: |
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:
6986
diff
changeset
|
888 |
begin |
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:
6986
diff
changeset
|
889 |
if TestCollisionYwithGear(Gear, -1) <> 0 then |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9137
diff
changeset
|
890 |
if TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) = 0 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:
6986
diff
changeset
|
891 |
Gear^.Y:= Gear^.Y - int2hwFloat(2) |
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:
6986
diff
changeset
|
892 |
else |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9137
diff
changeset
|
893 |
if TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) = 0 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:
6986
diff
changeset
|
894 |
Gear^.Y:= Gear^.Y - _1; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9137
diff
changeset
|
895 |
if (TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) = 0) and |
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9137
diff
changeset
|
896 |
(TestCollisionYwithGear(Gear, -1) = 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
|
897 |
begin |
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:
6986
diff
changeset
|
898 |
Gear^.dY:= -_0_15; |
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:
6986
diff
changeset
|
899 |
Gear^.dX:= SignAs(_0_15, Gear^.dX); |
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:
6986
diff
changeset
|
900 |
Gear^.State:= Gear^.State or gstMoving or gstHHJumping |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
901 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
902 |
else |
7041 | 903 |
exit(false) |
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:
6986
diff
changeset
|
904 |
end |
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:
6986
diff
changeset
|
905 |
end; |
2376 | 906 |
|
80 | 907 |
repeat |
8924 | 908 |
{if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then |
7435
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
909 |
begin |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
910 |
LandPixels[hwRound(Gear^.Y), hwRound(Gear^.X)]:= Gear^.Hedgehog^.Team^.Clan^.Color; |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
911 |
UpdateLandTexture(hwRound(Gear^.X), 1, hwRound(Gear^.Y), 1, true); |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
912 |
end;} |
8924 | 913 |
|
10354 | 914 |
if CheckCoordInWater(hwRound(Gear^.X), hwRound(Gear^.Y) + cHHRadius) then |
7041 | 915 |
exit(false); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
916 |
if (Gear^.State and gstMoving) <> 0 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:
6986
diff
changeset
|
917 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
918 |
if (GoInfo.Ticks = 350) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
919 |
if (not (hwAbs(Gear^.dX) > cLittle)) and (Gear^.dY < -_0_02) 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:
6986
diff
changeset
|
920 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
921 |
Gear^.dY:= -_0_25; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
922 |
Gear^.dX:= SignAs(_0_02, Gear^.dX) |
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:
6986
diff
changeset
|
923 |
end; |
9706
5178d2263521
return land word from uCollisions to make decisions based on it. Should be handy for trampoline.
nemo
parents:
9137
diff
changeset
|
924 |
if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) <> 0 then SetLittle(Gear^.dX); |
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:
6986
diff
changeset
|
925 |
Gear^.X:= Gear^.X + Gear^.dX; |
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:
6986
diff
changeset
|
926 |
inc(GoInfo.Ticks); |
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:
6986
diff
changeset
|
927 |
Gear^.dY:= Gear^.dY + cGravity; |
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:
6986
diff
changeset
|
928 |
if Gear^.dY > _0_4 then |
7041 | 929 |
exit(false); |
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:
6986
diff
changeset
|
930 |
if (Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, -1) <> 0) then |
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:
6986
diff
changeset
|
931 |
Gear^.dY:= _0; |
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:
6986
diff
changeset
|
932 |
Gear^.Y:= Gear^.Y + Gear^.dY; |
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:
6986
diff
changeset
|
933 |
if (not Gear^.dY.isNegative) and (TestCollisionYwithGear(Gear, 1) <> 0) then |
7041 | 934 |
begin |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7385
diff
changeset
|
935 |
Gear^.State:= Gear^.State and (not (gstMoving or gstHHJumping)); |
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:
6986
diff
changeset
|
936 |
Gear^.dY:= _0; |
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:
6986
diff
changeset
|
937 |
case JumpType of |
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:
6986
diff
changeset
|
938 |
jmpHJump: |
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:
6986
diff
changeset
|
939 |
if bY - hwRound(Gear^.Y) > 5 then |
7041 | 940 |
begin |
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:
6986
diff
changeset
|
941 |
GoInfo.JumpType:= jmpHJump; |
7041 | 942 |
inc(GoInfo.Ticks, 300 + 300); // 300 before jump, 300 after |
943 |
exit(true) |
|
944 |
end; |
|
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:
6986
diff
changeset
|
945 |
jmpLJump: |
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:
6986
diff
changeset
|
946 |
if abs(bX - hwRound(Gear^.X)) > 30 then |
7041 | 947 |
begin |
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:
6986
diff
changeset
|
948 |
GoInfo.JumpType:= jmpLJump; |
7041 | 949 |
inc(GoInfo.Ticks, 300 + 300); // 300 before jump, 300 after |
950 |
exit(true) |
|
951 |
end |
|
952 |
end; |
|
953 |
exit(false) |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
954 |
end; |
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:
6986
diff
changeset
|
955 |
end; |
369 | 956 |
until false |
80 | 957 |
end; |
958 |
||
369 | 959 |
function HHGo(Gear, AltGear: PGear; var GoInfo: TGoInfo): boolean; |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
960 |
var pX, pY, tY: LongInt; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
961 |
begin |
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:
6986
diff
changeset
|
962 |
HHGo:= false; |
13469
f1d349a52bc7
Refactor: lfCurrentHog→lfCurHogCrate, lfNotCurrentMask→lfNotCurHogCrate
Wuzzy <Wuzzy2@mail.ru>
parents:
11046
diff
changeset
|
963 |
Gear^.CollisionMask:= lfNotCurHogCrate; |
15410
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
964 |
|
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
965 |
Gear^.dX.isNegative:= (Gear^.Message and gmLeft) <> 0; |
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
966 |
|
80 | 967 |
AltGear^:= Gear^; |
968 |
||
75 | 969 |
GoInfo.Ticks:= 0; |
80 | 970 |
GoInfo.FallPix:= 0; |
971 |
GoInfo.JumpType:= jmpNone; |
|
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
972 |
tY:= hwRound(Gear^.Y); |
4 | 973 |
repeat |
8924 | 974 |
{if ((hwRound(Gear^.Y) and LAND_HEIGHT_MASK) = 0) and ((hwRound(Gear^.X) and LAND_WIDTH_MASK) = 0) then |
7435
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
975 |
begin |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
976 |
LandPixels[hwRound(Gear^.Y), hwRound(Gear^.X)]:= random($FFFFFFFF);//Gear^.Hedgehog^.Team^.Clan^.Color; |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
977 |
UpdateLandTexture(hwRound(Gear^.X), 1, hwRound(Gear^.Y), 1, true); |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
978 |
end;} |
bf80e66d6131
Commit commented out code which I used to debug AI walking
unc0rr
parents:
7433
diff
changeset
|
979 |
|
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
980 |
pX:= hwRound(Gear^.X); |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
981 |
pY:= hwRound(Gear^.Y); |
10354 | 982 |
if CheckCoordInWater(pX, pY + cHHRadius) then |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
983 |
begin |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
984 |
if AltGear^.Hedgehog^.BotLevel < 4 then |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
985 |
AddWalkBonus(pX, tY, 250, -40); |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
986 |
exit(false) |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
987 |
end; |
8924 | 988 |
|
989 |
// hog is falling |
|
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
990 |
if (Gear^.State and gstMoving) <> 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
|
991 |
begin |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
992 |
inc(GoInfo.Ticks); |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
993 |
Gear^.dY:= Gear^.dY + cGravity; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
994 |
if Gear^.dY > _0_4 then |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
995 |
begin |
7433
c7fff3e61d49
- Implement AI land marks which only used to tracks visited areas on the map for now. Significantly reduces wasting of cpu time by AI checking same place several times (10x or even more in rare cases)
unc0rr
parents:
7430
diff
changeset
|
996 |
GoInfo.FallPix:= 0; |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
997 |
// try ljump instead of fall with damage |
8924 | 998 |
HHJump(AltGear, jmpLJump, GoInfo); |
7375
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
999 |
if AltGear^.Hedgehog^.BotLevel < 4 then |
16ae2e1c9005
Tell AI to avoid edges, especially ones over water (this does not include checking whether a knock could drown yet). Also make flakes pick a new random dx/dy on respawn to further reduce patterns. Also disable a couple of weapons for the particularly dumb AI levels, and disable switching for the dumbest.
nemo
parents:
7360
diff
changeset
|
1000 |
AddWalkBonus(pX, tY, 175, -20); |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1001 |
exit(false) |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1002 |
end; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1003 |
Gear^.Y:= Gear^.Y + Gear^.dY; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1004 |
if hwRound(Gear^.Y) > pY then |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1005 |
inc(GoInfo.FallPix); |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1006 |
if TestCollisionYwithGear(Gear, 1) <> 0 then |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1007 |
begin |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1008 |
inc(GoInfo.Ticks, 410); |
7426
55b49cc1f33a
Changes for the benefit of pas2c. Use downto in for loops to avoid repeated calls of Random/GetRandom. Wrap nots.
nemo
parents:
7385
diff
changeset
|
1009 |
Gear^.State:= Gear^.State and (not (gstMoving or gstHHJumping)); |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1010 |
Gear^.dY:= _0; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1011 |
// try ljump instead of fall |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1012 |
HHJump(AltGear, jmpLJump, GoInfo); |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1013 |
exit(true) |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1014 |
end; |
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1015 |
continue |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1016 |
end; |
7719
eeae1cb6b6bf
Move hedgehog's step routine into separate function, use it in both hedgehog and ai code
unc0rr
parents:
7716
diff
changeset
|
1017 |
|
15410
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1018 |
// usual walk |
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1019 |
Gear^.dX:= SignAs(cLittle, Gear^.dX); |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
1020 |
|
15410
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1021 |
if MakeHedgehogsStep(Gear) then |
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1022 |
inc(GoInfo.Ticks, cHHStepTicks); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1023 |
|
15410
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1024 |
// we have moved for 1 px |
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1025 |
if (pX <> hwRound(Gear^.X)) and ((Gear^.State and gstMoving) = 0) then |
7718bdf60d45
Set dX sign early so jump calculations always get correct value
unc0rr
parents:
15387
diff
changeset
|
1026 |
exit(true) |
542 | 1027 |
until (pX = hwRound(Gear^.X)) and (pY = hwRound(Gear^.Y)) and ((Gear^.State and gstMoving) = 0); |
7164
fad64b97947e
Some brainfucking code which greatly reduces number of TestCollision* calls in hedgehog walk routine. Especially helpful to AI optimization. Also fixes some edge cases.
unc0rr
parents:
7161
diff
changeset
|
1028 |
|
375 | 1029 |
HHJump(AltGear, jmpHJump, GoInfo); |
4 | 1030 |
end; |
1031 |
||
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1032 |
function AIrndSign(num: LongInt): LongInt; inline; |
136 | 1033 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1034 |
if random(2) = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1035 |
AIrndSign:= num |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1036 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6474
diff
changeset
|
1037 |
AIrndSign:= - num |
2376 | 1038 |
end; |
136 | 1039 |
|
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1040 |
function AIrndOffset(targ: TTarget; Level: LongWord): LongInt; inline; |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1041 |
begin |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1042 |
if Level <> 1 then exit(0); |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1043 |
// at present level 2 doesn't track falls on most things |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1044 |
//if Level = 2 then exit(round(targ.Radius*(random(5)-2)/2)); |
14234 | 1045 |
AIrndOffset := targ.Radius*(random(7)-3)*2 |
14233
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1046 |
end; |
ca179b615c0b
adding X offset seems to improve chance of drownings
nemo
parents:
13668
diff
changeset
|
1047 |
|
3038 | 1048 |
procedure initModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1049 |
begin |
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
1050 |
friendlyfactor:= 300; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
1051 |
KnownExplosion.X:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
1052 |
KnownExplosion.Y:= 0; |
3f21a9dc93d0
Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents:
2716
diff
changeset
|
1053 |
KnownExplosion.Radius:= 0; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1054 |
end; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1055 |
|
3038 | 1056 |
procedure freeModule; |
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1057 |
begin |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1058 |
end; |
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2695
diff
changeset
|
1059 |
|
4 | 1060 |
end. |