Sat, 14 Jul 2012 16:31:21 +0300
Moved command parser to a new function.
0 | 1 | //----------------------------------------------------------------------------- |
2 | // | |
3 | // Skulltag Source | |
4 | // Copyright (C) 2002 Brad Carney | |
5 | // Copyright (C) 2007-2012 Skulltag Development Team | |
6 | // All rights reserved. | |
7 | // | |
8 | // Redistribution and use in source and binary forms, with or without | |
9 | // modification, are permitted provided that the following conditions are met: | |
10 | // | |
11 | // 1. Redistributions of source code must retain the above copyright notice, | |
12 | // this list of conditions and the following disclaimer. | |
13 | // 2. Redistributions in binary form must reproduce the above copyright notice, | |
14 | // this list of conditions and the following disclaimer in the documentation | |
15 | // and/or other materials provided with the distribution. | |
16 | // 3. Neither the name of the Skulltag Development Team nor the names of its | |
17 | // contributors may be used to endorse or promote products derived from this | |
18 | // software without specific prior written permission. | |
19 | // 4. Redistributions in any form must be accompanied by information on how to | |
20 | // obtain complete source code for the software and any accompanying | |
21 | // software that uses the software. The source code must either be included | |
22 | // in the distribution or be available for no more than the cost of | |
23 | // distribution plus a nominal fee, and must be freely redistributable | |
24 | // under reasonable conditions. For an executable file, complete source | |
25 | // code means the source code for all modules it contains. It does not | |
26 | // include source code for modules or files that typically accompany the | |
27 | // major components of the operating system on which the executable file | |
28 | // runs. | |
29 | // | |
30 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
31 | // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
32 | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
33 | // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
34 | // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
35 | // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
36 | // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
37 | // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
38 | // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
39 | // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
40 | // POSSIBILITY OF SUCH DAMAGE. | |
41 | // | |
42 | // | |
43 | // | |
44 | // Filename: bots.h | |
45 | // | |
46 | // Description: Contains bot structures and prototypes | |
47 | // [Dusk] Cropped out the stuff botc doesn't need. | |
48 | // | |
49 | //----------------------------------------------------------------------------- | |
50 | ||
51 | #ifndef __BOTS_H__ | |
52 | #define __BOTS_H__ | |
53 | ||
54 | //***************************************************************************** | |
55 | // DEFINES | |
56 | ||
57 | // Maximum number of variables on the bot evaluation stack. | |
58 | #define BOTSCRIPT_STACK_SIZE 8 | |
59 | ||
60 | // Maximum number of botinto structures that can be defines. | |
61 | #define MAX_BOTINFO 128 | |
62 | ||
63 | // Maximum number of states that can appear in a script. | |
64 | #define MAX_NUM_STATES 256 | |
65 | ||
66 | // Maximum number of bot events that can be defined. | |
67 | #define MAX_NUM_EVENTS 32 | |
68 | ||
69 | // Maximum number of global bot events that can be defined. | |
70 | #define MAX_NUM_GLOBAL_EVENTS 32 | |
71 | ||
72 | // Maximum number of global variables that can be defined in a script. | |
73 | #define MAX_SCRIPT_VARIABLES 128 | |
74 | ||
75 | // Maximum number of global arrays that can be defined in a script. | |
76 | #define MAX_SCRIPT_ARRAYS 16 | |
77 | ||
78 | // Maximum number of global arrays that can be defined in a script. | |
79 | #define MAX_SCRIPTARRAY_SIZE 65536 | |
80 | ||
81 | // Maxmimum number of state (local) variables that can appear in a script. | |
82 | #define MAX_STATE_VARIABLES 16 | |
83 | ||
84 | // Maximum number of strings that can appear in a script stringlist. | |
85 | #define MAX_LIST_STRINGS 128 | |
86 | ||
87 | // Maximum length of those strings in the stringlist. | |
88 | #define MAX_STRING_LENGTH 256 | |
89 | ||
90 | // Maximum reaction time for a bot. | |
91 | #define MAX_REACTION_TIME 52 | |
92 | ||
93 | // Maximum number of events the bots can store up that it's waiting to react to. | |
94 | #define MAX_STORED_EVENTS 64 | |
95 | ||
96 | //***************************************************************************** | |
97 | typedef enum | |
98 | { | |
99 | // Bot skill ratings. | |
100 | BOTSKILL_VERYPOOR, | |
101 | BOTSKILL_POOR, | |
102 | BOTSKILL_LOW, | |
103 | BOTSKILL_MEDIUM, | |
104 | BOTSKILL_HIGH, | |
105 | BOTSKILL_EXCELLENT, | |
106 | BOTSKILL_SUPREME, | |
107 | BOTSKILL_GODLIKE, | |
108 | BOTSKILL_PERFECT, | |
109 | ||
110 | NUM_BOT_SKILLS | |
111 | ||
112 | } BOTSKILL_e; | |
113 | ||
114 | //***************************************************************************** | |
115 | // STRUCTURES | |
116 | // | |
117 | ||
118 | //***************************************************************************** | |
119 | // These are the botscript data headers that it writes out. | |
120 | typedef enum | |
121 | { | |
122 | DH_COMMAND, | |
123 | DH_STATEIDX, | |
124 | DH_STATENAME, | |
125 | DH_ONENTER, | |
126 | DH_MAINLOOP, | |
127 | DH_ONEXIT, | |
128 | DH_EVENT, | |
129 | DH_ENDONENTER, | |
130 | DH_ENDMAINLOOP, | |
131 | DH_ENDONEXIT, | |
132 | DH_ENDEVENT, | |
133 | DH_IFGOTO, | |
134 | DH_IFNOTGOTO, | |
135 | DH_GOTO, | |
136 | DH_ORLOGICAL, | |
137 | DH_ANDLOGICAL, | |
138 | DH_ORBITWISE, | |
139 | DH_EORBITWISE, | |
140 | DH_ANDBITWISE, | |
141 | DH_EQUALS, | |
142 | DH_NOTEQUALS, | |
143 | DH_LESSTHAN, | |
144 | DH_LESSTHANEQUALS, | |
145 | DH_GREATERTHAN, | |
146 | DH_GREATERTHANEQUALS, | |
147 | DH_NEGATELOGICAL, | |
148 | DH_LSHIFT, | |
149 | DH_RSHIFT, | |
150 | DH_ADD, | |
151 | DH_SUBTRACT, | |
152 | DH_UNARYMINUS, | |
153 | DH_MULTIPLY, | |
154 | DH_DIVIDE, | |
155 | DH_MODULUS, | |
156 | DH_PUSHNUMBER, | |
157 | DH_PUSHSTRINGINDEX, | |
158 | DH_PUSHGLOBALVAR, | |
159 | DH_PUSHLOCALVAR, | |
160 | DH_DROPSTACKPOSITION, | |
161 | DH_SCRIPTVARLIST, | |
162 | DH_STRINGLIST, | |
163 | DH_INCGLOBALVAR, | |
164 | DH_DECGLOBALVAR, | |
165 | DH_ASSIGNGLOBALVAR, | |
166 | DH_ADDGLOBALVAR, | |
167 | DH_SUBGLOBALVAR, | |
168 | DH_MULGLOBALVAR, | |
169 | DH_DIVGLOBALVAR, | |
170 | DH_MODGLOBALVAR, | |
171 | DH_INCLOCALVAR, | |
172 | DH_DECLOCALVAR, | |
173 | DH_ASSIGNLOCALVAR, | |
174 | DH_ADDLOCALVAR, | |
175 | DH_SUBLOCALVAR, | |
176 | DH_MULLOCALVAR, | |
177 | DH_DIVLOCALVAR, | |
178 | DH_MODLOCALVAR, | |
179 | DH_CASEGOTO, | |
180 | DH_DROP, | |
181 | DH_INCGLOBALARRAY, | |
182 | DH_DECGLOBALARRAY, | |
183 | DH_ASSIGNGLOBALARRAY, | |
184 | DH_ADDGLOBALARRAY, | |
185 | DH_SUBGLOBALARRAY, | |
186 | DH_MULGLOBALARRAY, | |
187 | DH_DIVGLOBALARRAY, | |
188 | DH_MODGLOBALARRAY, | |
189 | DH_PUSHGLOBALARRAY, | |
190 | DH_SWAP, | |
191 | DH_DUP, | |
192 | DH_ARRAYSET, | |
193 | ||
194 | NUM_DATAHEADERS | |
195 | ||
196 | } DATAHEADERS_e; | |
197 | ||
198 | //***************************************************************************** | |
199 | // These are the different bot events that can be posted to a bot's state. | |
200 | typedef enum | |
201 | { | |
202 | BOTEVENT_KILLED_BYENEMY, | |
203 | BOTEVENT_KILLED_BYPLAYER, | |
204 | BOTEVENT_KILLED_BYSELF, | |
205 | BOTEVENT_KILLED_BYENVIORNMENT, | |
206 | BOTEVENT_REACHED_GOAL, | |
207 | BOTEVENT_GOAL_REMOVED, | |
208 | BOTEVENT_DAMAGEDBY_PLAYER, | |
209 | BOTEVENT_PLAYER_SAY, | |
210 | BOTEVENT_ENEMY_KILLED, | |
211 | BOTEVENT_RESPAWNED, | |
212 | BOTEVENT_INTERMISSION, | |
213 | BOTEVENT_NEWMAP, | |
214 | BOTEVENT_ENEMY_USEDFIST, | |
215 | BOTEVENT_ENEMY_USEDCHAINSAW, | |
216 | BOTEVENT_ENEMY_FIREDPISTOL, | |
217 | BOTEVENT_ENEMY_FIREDSHOTGUN, | |
218 | BOTEVENT_ENEMY_FIREDSSG, | |
219 | BOTEVENT_ENEMY_FIREDCHAINGUN, | |
220 | BOTEVENT_ENEMY_FIREDMINIGUN, | |
221 | BOTEVENT_ENEMY_FIREDROCKET, | |
222 | BOTEVENT_ENEMY_FIREDGRENADE, | |
223 | BOTEVENT_ENEMY_FIREDRAILGUN, | |
224 | BOTEVENT_ENEMY_FIREDPLASMA, | |
225 | BOTEVENT_ENEMY_FIREDBFG, | |
226 | BOTEVENT_ENEMY_FIREDBFG10K, | |
227 | BOTEVENT_PLAYER_USEDFIST, | |
228 | BOTEVENT_PLAYER_USEDCHAINSAW, | |
229 | BOTEVENT_PLAYER_FIREDPISTOL, | |
230 | BOTEVENT_PLAYER_FIREDSHOTGUN, | |
231 | BOTEVENT_PLAYER_FIREDSSG, | |
232 | BOTEVENT_PLAYER_FIREDCHAINGUN, | |
233 | BOTEVENT_PLAYER_FIREDMINIGUN, | |
234 | BOTEVENT_PLAYER_FIREDROCKET, | |
235 | BOTEVENT_PLAYER_FIREDGRENADE, | |
236 | BOTEVENT_PLAYER_FIREDRAILGUN, | |
237 | BOTEVENT_PLAYER_FIREDPLASMA, | |
238 | BOTEVENT_PLAYER_FIREDBFG, | |
239 | BOTEVENT_PLAYER_FIREDBFG10K, | |
240 | BOTEVENT_USEDFIST, | |
241 | BOTEVENT_USEDCHAINSAW, | |
242 | BOTEVENT_FIREDPISTOL, | |
243 | BOTEVENT_FIREDSHOTGUN, | |
244 | BOTEVENT_FIREDSSG, | |
245 | BOTEVENT_FIREDCHAINGUN, | |
246 | BOTEVENT_FIREDMINIGUN, | |
247 | BOTEVENT_FIREDROCKET, | |
248 | BOTEVENT_FIREDGRENADE, | |
249 | BOTEVENT_FIREDRAILGUN, | |
250 | BOTEVENT_FIREDPLASMA, | |
251 | BOTEVENT_FIREDBFG, | |
252 | BOTEVENT_FIREDBFG10K, | |
253 | BOTEVENT_PLAYER_JOINEDGAME, | |
254 | BOTEVENT_JOINEDGAME, | |
255 | BOTEVENT_DUEL_STARTINGCOUNTDOWN, | |
256 | BOTEVENT_DUEL_FIGHT, | |
257 | BOTEVENT_DUEL_WINSEQUENCE, | |
258 | BOTEVENT_SPECTATING, | |
259 | BOTEVENT_LMS_STARTINGCOUNTDOWN, | |
260 | BOTEVENT_LMS_FIGHT, | |
261 | BOTEVENT_LMS_WINSEQUENCE, | |
262 | BOTEVENT_WEAPONCHANGE, | |
263 | BOTEVENT_ENEMY_BFGEXPLODE, | |
264 | BOTEVENT_PLAYER_BFGEXPLODE, | |
265 | BOTEVENT_BFGEXPLODE, | |
266 | BOTEVENT_RECEIVEDMEDAL, | |
267 | ||
268 | NUM_BOTEVENTS | |
269 | ||
270 | } BOTEVENT_e; | |
271 | ||
272 | #endif // __BOTS_H__ |