author | nemo |
Sun, 24 Mar 2024 14:19:02 -0400 | |
branch | 1.0.0 |
changeset 16023 | fcc98c953b5e |
parent 15412 | 7a3d70c364fd |
child 15624 | 30ad3fd974f1 |
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:
10017
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
71 | 17 |
*) |
18 |
||
2630 | 19 |
{$INCLUDE "options.inc"} |
20 |
||
4 | 21 |
unit uAIActions; |
22 |
interface |
|
4357
a1fcfc341a52
Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents:
3407
diff
changeset
|
23 |
uses uFloat, uTypes; |
2630 | 24 |
|
3165
3ec07a7d8456
just some very sane stuff for the iphone port (plus some macro on pascal files)
koda
parents:
2630
diff
changeset
|
25 |
const MAXACTIONS = 96; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
26 |
aia_none = 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
27 |
aia_Left = 1; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
28 |
aia_Right = 2; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
29 |
aia_Timer = 3; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
30 |
aia_attack = 4; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
31 |
aia_Up = 5; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
32 |
aia_Down = 6; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
33 |
aia_Switch = 7; |
4 | 34 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
35 |
aia_Weapon = $8000; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
36 |
aia_WaitXL = $8001; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
37 |
aia_WaitXR = $8002; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
38 |
aia_LookLeft = $8003; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
39 |
aia_LookRight = $8004; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
40 |
aia_AwareExpl = $8005; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
41 |
aia_HJump = $8006; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
42 |
aia_LJump = $8007; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
43 |
aia_Skip = $8008; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
44 |
aia_Wait = $8009; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
45 |
aia_Put = $800A; |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
46 |
aia_waitAngle = $800B; |
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7197
diff
changeset
|
47 |
aia_waitAmmoXY = $800C; |
10017 | 48 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
49 |
aim_push = $8000; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
50 |
aim_release = $8001; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
51 |
ai_specmask = $8000; |
4 | 52 |
|
64 | 53 |
type TAction = record |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
54 |
Action: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
55 |
X, Y, Param: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
56 |
Time: Longword; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
57 |
end; |
10017 | 58 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
59 |
TActions = record |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
60 |
Count, Pos: Longword; |
14528 | 61 |
ticks: Longword; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
62 |
actions: array[0..Pred(MAXACTIONS)] of TAction; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
63 |
Score: LongInt; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
64 |
isWalkingToABetterPlace: boolean; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
65 |
end; |
4 | 66 |
|
371 | 67 |
procedure AddAction(var Actions: TActions; Action: Longword; Param: LongInt; TimeDelta: Longword; X, Y: LongInt); |
64 | 68 |
procedure ProcessAction(var Actions: TActions; Me: PGear); |
369 | 69 |
|
4 | 70 |
implementation |
15412 | 71 |
uses uAIMisc, uAI, uAmmos, uVariables, uCommands, uConsts, uUtils, uIO{$IFDEF TRACEAIACTIONS}, uConsole{$ENDIF}; |
4 | 72 |
|
7028 | 73 |
var PrevX: LongInt = 0; |
74 |
timedelta: Longword = 0; |
|
75 |
||
7901 | 76 |
const ActionIdToStr: array[0..7] of string[16] = ( |
4 | 77 |
{aia_none} '', |
78 |
{aia_Left} 'left', |
|
79 |
{aia_Right} 'right', |
|
80 |
{aia_Timer} 'timer', |
|
81 |
{aia_attack} 'attack', |
|
82 |
{aia_Up} 'up', |
|
6393 | 83 |
{aia_Down} 'down', |
7901 | 84 |
{aia_Switch} 'switch' |
64 | 85 |
); |
4 | 86 |
|
80 | 87 |
{$IFDEF TRACEAIACTIONS} |
7901 | 88 |
const SpecActionIdToStr: array[$8000..$800C] of string[16] = ( |
80 | 89 |
{aia_Weapon} 'aia_Weapon', |
90 |
{aia_WaitX} 'aia_WaitX', |
|
91 |
{aia_WaitY} 'aia_WaitY', |
|
92 |
{aia_LookLeft} 'aia_LookLeft', |
|
93 |
{aia_LookRight} 'aia_LookRight', |
|
94 |
{aia_AwareExpl} 'aia_AwareExpl', |
|
95 |
{aia_HJump} 'aia_HJump', |
|
144 | 96 |
{aia_LJump} 'aia_LJump', |
193 | 97 |
{aia_Skip} 'aia_Skip', |
7901 | 98 |
{aia_Wait} 'aia_Wait', |
99 |
{aia_Put} 'aia_Put', |
|
100 |
{aia_waitAngle} 'aia_waitAngle', |
|
101 |
{aia_waitAmmoXY} 'aia_waitAmmoXY' |
|
80 | 102 |
); |
103 |
||
104 |
procedure DumpAction(Action: TAction; Me: PGear); |
|
105 |
begin |
|
106 |
if (Action.Action and ai_specmask) = 0 then |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
107 |
WriteLnToConsole('AI action: '+ActionIdToStr[Action.Action]) |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
108 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
109 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
110 |
WriteLnToConsole('AI action: '+SpecActionIdToStr[Action.Action]); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
111 |
if (Action.Action = aia_WaitXL) or (Action.Action = aia_WaitXR) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
112 |
WriteLnToConsole('AI action Wait X = '+IntToStr(Action.Param)+', current X = '+IntToStr(hwRound(Me^.X))) |
10017 | 113 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
114 |
else if (Action.Action = aia_AwareExpl) then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
115 |
WriteLnToConsole('Aware X = ' + IntToStr(Action.X) + ', Y = ' + IntToStr(Action.Y)); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
116 |
end |
80 | 117 |
end; |
118 |
{$ENDIF} |
|
119 |
||
371 | 120 |
procedure AddAction(var Actions: TActions; Action: Longword; Param: LongInt; TimeDelta: Longword; X, Y: LongInt); |
4 | 121 |
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:
7416
diff
changeset
|
122 |
if Actions.Count < MAXACTIONS then |
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:
7416
diff
changeset
|
123 |
with Actions do |
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:
7416
diff
changeset
|
124 |
begin |
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:
7416
diff
changeset
|
125 |
actions[Count].Action:= Action; |
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:
7416
diff
changeset
|
126 |
actions[Count].Param:= Param; |
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:
7416
diff
changeset
|
127 |
actions[Count].X:= X; |
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:
7416
diff
changeset
|
128 |
actions[Count].Y:= Y; |
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:
7416
diff
changeset
|
129 |
if Count > 0 then |
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:
7416
diff
changeset
|
130 |
actions[Count].Time:= TimeDelta |
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:
7416
diff
changeset
|
131 |
else |
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:
7416
diff
changeset
|
132 |
actions[Count].Time:= GameTicks + TimeDelta; |
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:
7416
diff
changeset
|
133 |
inc(Count); |
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:
7416
diff
changeset
|
134 |
end |
4 | 135 |
end; |
136 |
||
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6395
diff
changeset
|
137 |
procedure CheckHang(Me: PGear); |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6395
diff
changeset
|
138 |
begin |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6395
diff
changeset
|
139 |
if hwRound(Me^.X) <> PrevX then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
140 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
141 |
PrevX:= hwRound(Me^.X); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
142 |
timedelta:= 0 |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
143 |
end else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
144 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
145 |
inc(timedelta); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
146 |
if timedelta > 1700 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
147 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
148 |
timedelta:= 0; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
149 |
FreeActionsList |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
150 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
151 |
end |
6474
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6395
diff
changeset
|
152 |
end; |
42e9773eedfd
- Improve renderer a bit, disallow nested functions
unc0rr
parents:
6395
diff
changeset
|
153 |
|
64 | 154 |
procedure ProcessAction(var Actions: TActions; Me: PGear); |
4 | 155 |
var s: shortstring; |
156 |
begin |
|
194 | 157 |
repeat |
64 | 158 |
if Actions.Pos >= Actions.Count then exit; |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
159 |
|
64 | 160 |
with Actions.actions[Actions.Pos] do |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
161 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
162 |
if Time > GameTicks then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
163 |
exit; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
164 |
{$IFDEF TRACEAIACTIONS} |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
165 |
DumpAction(Actions.actions[Actions.Pos], Me); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
166 |
{$ENDIF} |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
167 |
if (Action and ai_specmask) <> 0 then |
4 | 168 |
case Action of |
10017 | 169 |
aia_Weapon: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
170 |
SetWeapon(TAmmoType(Param)); |
10017 | 171 |
|
172 |
aia_WaitXL: |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
173 |
if hwRound(Me^.X) = Param then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
174 |
begin |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
175 |
Action:= aia_LookLeft; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
176 |
Time:= GameTicks; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
177 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
178 |
end |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
179 |
else if hwRound(Me^.X) < Param then |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
180 |
begin |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
181 |
//OutError('AI: WaitXL assert (' + IntToStr(hwRound(Me^.X)) + ' < ' + IntToStr(Param) + ')', false); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
182 |
FreeActionsList; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
183 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
184 |
end |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
185 |
else |
10017 | 186 |
begin |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
187 |
CheckHang(Me); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
188 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
189 |
end; |
10017 | 190 |
|
191 |
aia_WaitXR: |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
192 |
if hwRound(Me^.X) = Param then |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
193 |
begin |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
194 |
Action:= aia_LookRight; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
195 |
Time:= GameTicks; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
196 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
197 |
end |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
198 |
else if hwRound(Me^.X) > Param then |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
199 |
begin |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
200 |
//OutError('AI: WaitXR assert (' + IntToStr(hwRound(Me^.X)) + ' > ' + IntToStr(Param) + ')', false); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
201 |
FreeActionsList; |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
202 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
203 |
end |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
204 |
else |
10017 | 205 |
begin |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
206 |
CheckHang(Me); |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
207 |
exit |
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
208 |
end; |
15411 | 209 |
aia_LookLeft: begin |
210 |
if (Me^.State and gstMoving) <> 0 then |
|
211 |
exit; |
|
212 |
||
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
213 |
if not Me^.dX.isNegative then |
15411 | 214 |
begin |
215 |
if (Me^.Message and gmLeft) = 0 then |
|
216 |
ParseCommand('+left', true); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
217 |
exit |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
218 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
219 |
else |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
220 |
ParseCommand('-left', true); |
15411 | 221 |
end; |
222 |
aia_LookRight: begin |
|
223 |
if (Me^.State and gstMoving) <> 0 then |
|
224 |
exit; |
|
225 |
||
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
226 |
if Me^.dX.isNegative then |
15411 | 227 |
begin |
228 |
if (Me^.Message and gmRight) = 0 then |
|
229 |
ParseCommand('+right', true); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
230 |
exit |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
231 |
end |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
232 |
else ParseCommand('-right', true); |
15411 | 233 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
234 |
aia_AwareExpl: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
235 |
AwareOfExplosion(X, Y, Param); |
10017 | 236 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
237 |
aia_HJump: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
238 |
ParseCommand('hjump', true); |
10017 | 239 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
240 |
aia_LJump: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
241 |
ParseCommand('ljump', true); |
10017 | 242 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
243 |
aia_Skip: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
244 |
ParseCommand('skip', true); |
10017 | 245 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
246 |
aia_Put: |
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
247 |
doPut(X, Y, true); |
10017 | 248 |
|
7197
5a9775b97c7e
- TestSniperRifle ftw (still needs some consts adjustments, because AI seems to love sniper rifle too much)
unc0rr
parents:
7132
diff
changeset
|
249 |
aia_waitAngle: |
7721 | 250 |
if LongInt(Me^.Angle) <> Abs(Param) then exit; |
7416
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7197
diff
changeset
|
251 |
|
2f2f78fc65a3
AI uses cake! Known issues: AI could damage itself for no reason, could let cake go looping in a hole with exit closed by AI hog.
unc0rr
parents:
7197
diff
changeset
|
252 |
aia_waitAmmoXY: |
10017 | 253 |
if (CurAmmoGear <> nil) and ((hwRound(CurAmmoGear^.X) <> X) or (hwRound(CurAmmoGear^.Y) <> Y)) then |
7901 | 254 |
exit; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
255 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
256 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
257 |
begin |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
258 |
s:= ActionIdToStr[Action]; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
259 |
if (Param and ai_specmask) <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
260 |
case Param of |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
261 |
aim_push: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
262 |
s:= '+' + s; |
10017 | 263 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
264 |
aim_release: |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
265 |
s:= '-' + s; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
266 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
267 |
else if Param <> 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
268 |
s:= s + ' ' + IntToStr(Param); |
369 | 269 |
ParseCommand(s, true) |
4 | 270 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
271 |
end; |
66
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
272 |
inc(Actions.Pos); |
9643d75baf1e
Many AI improvements, bots do think in separate thread
unc0rr
parents:
64
diff
changeset
|
273 |
if Actions.Pos <= Actions.Count then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6535
diff
changeset
|
274 |
inc(Actions.actions[Actions.Pos].Time, GameTicks); |
194 | 275 |
until false |
4 | 276 |
end; |
369 | 277 |
|
4 | 278 |
end. |