1 //********************************************************************************************
2 //*
3 //* This file is part of Egoboo.
4 //*
5 //* Egoboo is free software: you can redistribute it and/or modify it
6 //* under the terms of the GNU General Public License as published by
7 //* the Free Software Foundation, either version 3 of the License, or
8 //* (at your option) any later version.
9 //*
10 //* Egoboo is distributed in the hope that it will be useful, but
11 //* WITHOUT ANY WARRANTY; without even the implied warranty of
12 //* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 //* General Public License for more details.
14 //*
15 //* You should have received a copy of the GNU General Public License
16 //* along with Egoboo. If not, see <http://www.gnu.org/licenses/>.
17 //*
18 //********************************************************************************************
19
20 /// @file script_compile.c
21 /// @brief Implementation of the script compiler
22 /// @details
23
24 #include "script_compile.h"
25
26 #include "log.h"
27
28 #include "egoboo_vfs.h"
29 #include "egoboo_setup.h"
30 #include "egoboo_strutil.h"
31 #include "egoboo_fileutil.h"
32 #include "egoboo_math.h"
33 #include "egoboo.h"
34
35 //--------------------------------------------------------------------------------------------
36 //-------------------------------------------------------------------------------------------
37
38 /// The description of a single pre-defined egoscript token
39 struct s_token
40 {
41 int iLine;
42 int iIndex;
43 int iValue;
44 char cType;
45 char cWord[MAXCODENAMESIZE];
46 };
47 typedef struct s_token token_t;
48
49 //--------------------------------------------------------------------------------------------
50 //--------------------------------------------------------------------------------------------
51
52 static int iNumLine;
53
54 static int iLineSize;
55 static char cLineBuffer[MAXLINESIZE] = EMPTY_CSTR;
56
57 static int iLoadSize;
58 static Uint8 cLoadBuffer[AISMAXLOADSIZE] = EMPTY_CSTR;
59
60 static token_t Token;
61
62 static const char * globalparsename = NULL;
63
64 //--------------------------------------------------------------------------------------------
65 //--------------------------------------------------------------------------------------------
66
67 INSTANTIATE_STATIC_ARY( OpListAry, OpList );
68 INSTANTIATE_STATIC_ARY( AisStorageAry, AisStorage );
69
70 int AisCompiled_offset = 0;
71 Uint32 AisCompiled_buffer[AISMAXCOMPILESIZE];
72
73 bool_t debug_scripts = bfalse;
74 FILE * debug_script_file = NULL;
75
76 bool_t parseerror = bfalse;
77
78 const char * script_function_names[SCRIPT_FUNCTIONS_COUNT] =
79 {
80 /// Scripted AI functions (v0.10)
81 "FIFSPAWNED", // == 0
82 "FIFTIMEOUT", // == 1
83 "FIFATWAYPOINT", // == 2
84 "FIFATLASTWAYPOINT", // == 3
85 "FIFATTACKED", // == 4
86 "FIFBUMPED", // == 5
87 "FIFORDERED", // == 6
88 "FIFCALLEDFORHELP", // == 7
89 "FSETCONTENT", // == 8
90 "FIFKILLED", // == 9
91 "FIFTARGETKILLED", // == 10
92 "FCLEARWAYPOINTS", // == 11
93 "FADDWAYPOINT", // == 12
94 "FFINDPATH", // == 13
95 "FCOMPASS", // == 14
96 "FGETTARGETARMORPRICE", // == 15
97 "FSETTIME", // == 16
98 "FGETCONTENT", // == 17
99 "FJOINTARGETTEAM", // == 18
100 "FSETTARGETTONEARBYENEMY", // == 19
101 "FSETTARGETTOTARGETLEFTHAND", // == 20
102 "FSETTARGETTOTARGETRIGHTHAND", // == 21
103 "FSETTARGETTOWHOEVERATTACKED", // == 22
104 "FSETTARGETTOWHOEVERBUMPED", // == 23
105 "FSETTARGETTOWHOEVERCALLEDFORHELP", // == 24
106 "FSETTARGETTOOLDTARGET", // == 25
107 "FSETTURNMODETOVELOCITY", // == 26
108 "FSETTURNMODETOWATCH", // == 27
109 "FSETTURNMODETOSPIN", // == 28
110 "FSETBUMPHEIGHT", // == 29
111 "FIFTARGETHASID", // == 30
112 "FIFTARGETHASITEMID", // == 31
113 "FIFTARGETHOLDINGITEMID", // == 32
114 "FIFTARGETHASSKILLID", // == 33
115 "FELSE", // == 34
116 "FRUN", // == 35
117 "FWALK", // == 36
118 "FSNEAK", // == 37
119 "FDOACTION", // == 38
120 "FKEEPACTION", // == 39
121 "FISSUEORDER", // == 40
122 "FDROPWEAPONS", // == 41
123 "FTARGETDOACTION", // == 42
124 "FOPENPASSAGE", // == 43
125 "FCLOSEPASSAGE", // == 44
126 "FIFPASSAGEOPEN", // == 45
127 "FGOPOOF", // == 46
128 "FCOSTTARGETITEMID", // == 47
129 "FDOACTIONOVERRIDE", // == 48
130 "FIFHEALED", // == 49
131 "FSENDMESSAGE", // == 50
132 "FCALLFORHELP", // == 51
133 "FADDIDSZ", // == 52
134 "FEND", // == 53
135
136 /// Scripted AI functions (v0.20)
137 "FSETSTATE", // == 54
138 "FGETSTATE", // == 55
139 "FIFSTATEIS", // == 56
140
141 /// Scripted AI functions (v0.30)
142 "FIFTARGETCANOPENSTUFF", // == 57
143 "FIFGRABBED", // == 58
144 "FIFDROPPED", // == 59
145 "FSETTARGETTOWHOEVERISHOLDING", // == 60
146 "FDAMAGETARGET", // == 61
147 "FIFXISLESSTHANY", // == 62
148
149 /// Scripted AI functions (v0.40)
150 "FSETWEATHERTIME", // == 63
151 "FGETBUMPHEIGHT", // == 64
152 "FIFREAFFIRMED", // == 65
153 "FUNKEEPACTION", // == 66
154 "FIFTARGETISONOTHERTEAM", // == 67
155
156 /// Scripted AI functions (v0.50)
157 "FIFTARGETISONHATEDTEAM", // == 68
158 "FPRESSLATCHBUTTON", // == 69
159 "FSETTARGETTOTARGETOFLEADER", // == 70
160 "FIFLEADERKILLED", // == 71
161 "FBECOMELEADER", // == 72
162
163 /// Scripted AI functions (v0.60)
164 "FCHANGETARGETARMOR", // == 73
165 "FGIVEMONEYTOTARGET", // == 74
166 "FDROPKEYS", // == 75
167 "FIFLEADERISALIVE", // == 76
168 "FIFTARGETISOLDTARGET", // == 77
169 "FSETTARGETTOLEADER", // == 78
170 "FSPAWNCHARACTER", // == 79
171 "FRESPAWNCHARACTER", // == 80
172 "FCHANGETILE", // == 81
173 "FIFUSED", // == 82
174 "FDROPMONEY", // == 83
175 "FSETOLDTARGET", // == 84
176 "FDETACHFROMHOLDER", // == 85
177 "FIFTARGETHASVULNERABILITYID", // == 86
178 "FCLEANUP", // == 87
179 "FIFCLEANEDUP", // == 88
180 "FIFSITTING", // == 89
181 "FIFTARGETISHURT", // == 90
182 "FIFTARGETISAPLAYER", // == 91
183 "FPLAYSOUND", // == 92
184 "FSPAWNPARTICLE", // == 93
185 "FIFTARGETISALIVE", // == 94
186 "FSTOP", // == 95
187 "FDISAFFIRMCHARACTER", // == 96
188 "FREAFFIRMCHARACTER", // == 97
189 "FIFTARGETISSELF", // == 98
190 "FIFTARGETISMALE", // == 99
191 "FIFTARGETISFEMALE", // == 100
192
193 // Scripted AI functions (v0.70)
194 "FSETTARGETTOSELF", // == 101
195 "FSETTARGETTORIDER", // == 102
196 "FGETATTACKTURN", // == 103
197 "FGETDAMAGETYPE", // == 104
198 "FBECOMESPELL", // == 105
199 "FBECOMESPELLBOOK", // == 106
200 "FIFSCOREDAHIT", // == 107
201 "FIFDISAFFIRMED", // == 108
202 "FTRANSLATEORDER", // == 109
203 "FSETTARGETTOWHOEVERWASHIT", // == 110
204 "FSETTARGETTOWIDEENEMY", // == 111
205 "FIFCHANGED", // == 112
206 "FIFINWATER", // == 113
207 "FIFBORED", // == 114
208 "FIFTOOMUCHBAGGAGE", // == 115
209 "FIFGROGGED", // == 116
210 "FIFDAZED", // == 117
211 "FIFTARGETHASSPECIALID", // == 118
212 "FPRESSTARGETLATCHBUTTON", // == 119
213 "FIFINVISIBLE", // == 120
214 "FIFARMORIS", // == 121
215 "FGETTARGETGROGTIME", // == 122
216 "FGETTARGETDAZETIME", // == 123
217 "FSETDAMAGETYPE", // == 124
218 "FSETWATERLEVEL", // == 125
219 "FENCHANTTARGET", // == 126
220 "FENCHANTCHILD", // == 127
221 "FTELEPORTTARGET", // == 128
222 "FGIVEEXPERIENCETOTARGET", // == 129
223 "FINCREASEAMMO", // == 130
224 "FUNKURSETARGET", // == 131
225 "FGIVEEXPERIENCETOTARGETTEAM", // == 132
226 "FIFUNARMED", // == 133
227 "FRESTOCKTARGETAMMOIDALL", // == 134
228 "FRESTOCKTARGETAMMOIDFIRST", // == 135
229 "FFLASHTARGET", // == 136
230 "FSETREDSHIFT", // == 137
231 "FSETGREENSHIFT", // == 138
232 "FSETBLUESHIFT", // == 139
233 "FSETLIGHT", // == 140
234 "FSETALPHA", // == 141
235 "FIFHITFROMBEHIND", // == 142
236 "FIFHITFROMFRONT", // == 143
237 "FIFHITFROMLEFT", // == 144
238 "FIFHITFROMRIGHT", // == 145
239 "FIFTARGETISONSAMETEAM", // == 146
240 "FKILLTARGET", // == 147
241 "FUNDOENCHANT", // == 148
242 "FGETWATERLEVEL", // == 149
243 "FCOSTTARGETMANA", // == 150
244 "FIFTARGETHASANYID", // == 151
245 "FSETBUMPSIZE", // == 152
246 "FIFNOTDROPPED", // == 153
247 "FIFYISLESSTHANX", // == 154
248 "FSETFLYHEIGHT", // == 155
249 "FIFBLOCKED", // == 156
250 "FIFTARGETISDEFENDING", // == 157
251 "FIFTARGETISATTACKING", // == 158
252 "FIFSTATEIS0", // == 159
253 "FIFSTATEIS1", // == 160
254 "FIFSTATEIS2", // == 161
255 "FIFSTATEIS3", // == 162
256 "FIFSTATEIS4", // == 163
257 "FIFSTATEIS5", // == 164
258 "FIFSTATEIS6", // == 165
259 "FIFSTATEIS7", // == 166
260 "FIFCONTENTIS", // == 167
261 "FSETTURNMODETOWATCHTARGET", // == 168
262 "FIFSTATEISNOT", // == 169
263 "FIFXISEQUALTOY", // == 170
264 "FDEBUGMESSAGE", // == 171
265
266 /// Scripted AI functions (v0.80)
267 "FBLACKTARGET", // == 172
268 "FSENDMESSAGENEAR", // == 173
269 "FIFHITGROUND", // == 174
270 "FIFNAMEISKNOWN", // == 175
271 "FIFUSAGEISKNOWN", // == 176
272 "FIFHOLDINGITEMID", // == 177
273 "FIFHOLDINGRANGEDWEAPON", // == 178
274 "FIFHOLDINGMELEEWEAPON", // == 179
275 "FIFHOLDINGSHIELD", // == 180
276 "FIFKURSED", // == 181
277 "FIFTARGETISKURSED", // == 182
278 "FIFTARGETISDRESSEDUP", // == 183
279 "FIFOVERWATER", // == 184
280 "FIFTHROWN", // == 185
281 "FMAKENAMEKNOWN", // == 186
282 "FMAKEUSAGEKNOWN", // == 187
283 "FSTOPTARGETMOVEMENT", // == 188
284 "FSETXY", // == 189
285 "FGETXY", // == 190
286 "FADDXY", // == 191
287 "FMAKEAMMOKNOWN", // == 192
288 "FSPAWNATTACHEDPARTICLE", // == 193
289 "FSPAWNEXACTPARTICLE", // == 194
290 "FACCELERATETARGET", // == 195
291 "FIFDISTANCEISMORETHANTURN", // == 196
292 "FIFCRUSHED", // == 197
293 "FMAKECRUSHVALID", // == 198
294 "FSETTARGETTOLOWESTTARGET", // == 199
295 "FIFNOTPUTAWAY", // == 200
296 "FIFTAKENOUT", // == 201
297 "FIFAMMOOUT", // == 202
298 "FPLAYSOUNDLOOPED", // == 203
299 "FSTOPSOUND", // == 204
300 "FHEALSELF", // == 205
301 "FEQUIP", // == 206
302 "FIFTARGETHASITEMIDEQUIPPED", // == 207
303 "FSETOWNERTOTARGET", // == 208
304 "FSETTARGETTOOWNER", // == 209
305 "FSETFRAME", // == 210
306 "FBREAKPASSAGE", // == 211
307 "FSETRELOADTIME", // == 212
308 "FSETTARGETTOWIDEBLAHID", // == 213
309 "FPOOFTARGET", // == 214
310 "FCHILDDOACTIONOVERRIDE", // == 215
311 "FSPAWNPOOF", // == 216
312 "FSETSPEEDPERCENT", // == 217
313 "FSETCHILDSTATE", // == 218
314 "FSPAWNATTACHEDSIZEDPARTICLE", // == 219
315 "FCHANGEARMOR", // == 220
316 "FSHOWTIMER", // == 221
317 "FIFFACINGTARGET", // == 222
318 "FPLAYSOUNDVOLUME", // == 223
319 "FSPAWNATTACHEDFACEDPARTICLE", // == 224
320 "FIFSTATEISODD", // == 225
321 "FSETTARGETTODISTANTENEMY", // == 226
322 "FTELEPORT", // == 227
323 "FGIVESTRENGTHTOTARGET", // == 228
324 "FGIVEWISDOMTOTARGET", // == 229
325 "FGIVEINTELLIGENCETOTARGET", // == 230
326 "FGIVEDEXTERITYTOTARGET", // == 231
327 "FGIVELIFETOTARGET", // == 232
328 "FGIVEMANATOTARGET", // == 233
329 "FSHOWMAP", // == 234
330 "FSHOWYOUAREHERE", // == 235
331 "FSHOWBLIPXY", // == 236
332 "FHEALTARGET", // == 237
333 "FPUMPTARGET", // == 238
334 "FCOSTAMMO", // == 239
335 "FMAKESIMILARNAMESKNOWN", // == 240
336 "FSPAWNATTACHEDHOLDERPARTICLE", // == 241
337 "FSETTARGETRELOADTIME", // == 242
338 "FSETFOGLEVEL", // == 243
339 "FGETFOGLEVEL", // == 244
340 "FSETFOGTAD", // == 245
341 "FSETFOGBOTTOMLEVEL", // == 246
342 "FGETFOGBOTTOMLEVEL", // == 247
343 "FCORRECTACTIONFORHAND", // == 248
344 "FIFTARGETISMOUNTED", // == 249
345 "FSPARKLEICON", // == 250
346 "FUNSPARKLEICON", // == 251
347 "FGETTILEXY", // == 252
348 "FSETTILEXY", // == 253
349 "FSETSHADOWSIZE", // == 254
350 "FORDERTARGET", // == 255
351 "FSETTARGETTOWHOEVERISINPASSAGE", // == 256
352 "FIFCHARACTERWASABOOK", // == 257
353
354 /// Scripted AI functions (v0.90)
355 "FSETENCHANTBOOSTVALUES", // == 258
356 "FSPAWNCHARACTERXYZ", // == 259
357 "FSPAWNEXACTCHARACTERXYZ", // == 260
358 "FCHANGETARGETCLASS", // == 261
359 "FPLAYFULLSOUND", // == 262
360 "FSPAWNEXACTCHASEPARTICLE", // == 263
361 "FCREATEORDER", // == 264
362 "FORDERSPECIALID", // == 265
363 "FUNKURSETARGETINVENTORY", // == 266
364 "FIFTARGETISSNEAKING", // == 267
365 "FDROPITEMS", // == 268
366 "FRESPAWNTARGET", // == 269
367 "FTARGETDOACTIONSETFRAME", // == 270
368 "FIFTARGETCANSEEINVISIBLE", // == 271
369 "FSETTARGETTONEARESTBLAHID", // == 272
370 "FSETTARGETTONEARESTENEMY", // == 273
371 "FSETTARGETTONEARESTFRIEND", // == 274
372 "FSETTARGETTONEARESTLIFEFORM", // == 275
373 "FFLASHPASSAGE", // == 276
374 "FFINDTILEINPASSAGE", // == 277
375 "FIFHELDINLEFTHAND", // == 278
376 "FNOTANITEM", // == 279
377 "FSETCHILDAMMO", // == 280
378 "FIFHITVULNERABLE", // == 281
379 "FIFTARGETISFLYING", // == 282
380 "FIDENTIFYTARGET", // == 283
381 "FBEATMODULE", // == 284
382 "FENDMODULE", // == 285
383 "FDISABLEEXPORT", // == 286
384 "FENABLEEXPORT", // == 287
385 "FGETTARGETSTATE", // == 288
386
387 /// Redone in v 0.95
388 "FIFEQUIPPED", // == 289
389 "FDROPTARGETMONEY", // == 290
390 "FGETTARGETCONTENT", // == 291
391 "FDROPTARGETKEYS", // == 292
392 "FJOINTEAM", // == 293
393 "FTARGETJOINTEAM", // == 294
394
395 /// Below is original code again
396 "FCLEARMUSICPASSAGE", // == 295
397 "FCLEARENDMESSAGE", // == 296
398 "FADDENDMESSAGE", // == 297
399 "FPLAYMUSIC", // == 298
400 "FSETMUSICPASSAGE", // == 299
401 "FMAKECRUSHINVALID", // == 300
402 "FSTOPMUSIC", // == 301
403 "FFLASHVARIABLE", // == 302
404 "FACCELERATEUP", // == 303
405 "FFLASHVARIABLEHEIGHT", // == 304
406 "FSETDAMAGETIME", // == 305
407 "FIFSTATEIS8", // == 306
408 "FIFSTATEIS9", // == 307
409 "FIFSTATEIS10", // == 308
410 "FIFSTATEIS11", // == 309
411 "FIFSTATEIS12", // == 310
412 "FIFSTATEIS13", // == 311
413 "FIFSTATEIS14", // == 312
414 "FIFSTATEIS15", // == 313
415 "FIFTARGETISAMOUNT", // == 314
416 "FIFTARGETISAPLATFORM", // == 315
417 "FADDSTAT", // == 316
418 "FDISENCHANTTARGET", // == 317
419 "FDISENCHANTALL", // == 318
420 "FSETVOLUMENEARESTTEAMMATE", // == 319
421 "FADDSHOPPASSAGE", // == 320
422 "FTARGETPAYFORARMOR", // == 321
423 "FJOINEVILTEAM", // == 322
424 "FJOINNULLTEAM", // == 323
425 "FJOINGOODTEAM", // == 324
426 "FPITSKILL", // == 325
427 "FSETTARGETTOPASSAGEID", // == 326
428 "FMAKENAMEUNKNOWN", // == 327
429 "FSPAWNEXACTPARTICLEENDSPAWN", // == 328
430 "FSPAWNPOOFSPEEDSPACINGDAMAGE", // == 329
431 "FGIVEEXPERIENCETOGOODTEAM", // == 330
432
433 /// Scripted AI functions (v0.95)
434 "FDONOTHING", // == 331
435 "FGROGTARGET", // == 332
436 "FDAZETARGET", // == 333
437 "FENABLERESPAWN", // == 334
438 "FDISABLERESPAWN", // == 335
439
440 /// Redone in v 1.10
441 "FDISPELTARGETENCHANTID", // == 336
442 "FIFHOLDERBLOCKED", // == 337
443 "FGETSKILLLEVEL", // == 338
444 "FIFTARGETHASNOTFULLMANA", // == 339
445 "FENABLELISTENSKILL", // == 340
446 "FSETTARGETTOLASTITEMUSED", // == 341
447 "FFOLLOWLINK", // == 342 Scripted AI functions (v1.00)
448 "FIFOPERATORISLINUX", // == 343
449 "FIFTARGETISAWEAPON", // == 344
450 "FIFSOMEONEISSTEALING", // == 345
451 "FIFTARGETISASPELL", // == 346
452 "FIFBACKSTABBED", // == 347
453 "FGETTARGETDAMAGETYPE", // == 348
454 "FADDQUEST", // == 349
455 "FBEATQUESTALLPLAYERS", // == 350
456 "FIFTARGETHASQUEST", // == 351
457 "FSETQUESTLEVEL", // == 352
458 "FADDQUESTALLPLAYERS", // == 353
459 "FADDBLIPALLENEMIES", // == 354
460 "FPITSFALL", // == 355
461 "FIFTARGETISOWNER", // == 356
462
463 /// adding in the "speech" thing so the script can define its "ouch" sound, for instance
464 "FSETSPEECH", // == 357
465 "FSETMOVESPEECH", // == 358
466 "FSETSECONDMOVESPEECH", // == 359
467 "FSETATTACKSPEECH", // == 360
468 "FSETASSISTSPEECH", // == 361
469 "FSETTERRAINSPEECH", // == 362
470 "FSETSELECTSPEECH", // == 363
471
472 /// Scripted AI functions (v1.10)
473 "FTAKEPICTURE", // == 364
474 "FIFOPERATORISMACINTOSH", // == 365
475 "FIFMODULEHASIDSZ", // == 366
476 "FMORPHTOTARGET", // == 367
477 "FGIVEMANAFLOWTOTARGET", // == 368
478 "FGIVEMANARETURNTOTARGET", // == 369
479 "FSETMONEY", // == 370
480 "FIFTARGETCANSEEKURSES", // == 371
481 "FSPAWNATTACHEDCHARACTER", // == 372
482 "FKURSETARGET", // == 373
483 "FSETCHILDCONTENT", // == 374
484 "FSETTARGETTOCHILD", // == 375
485 "FSETDAMAGETHRESHOLD", // == 376
486 "FACCELERATETARGETUP", // == 377
487 "FSETTARGETAMMO", // == 378
488 "FENABLEINVICTUS", // == 379
489 "FDISABLEINVICTUS", // == 380
490 "FTARGETDAMAGESELF", // == 381
491 "FSETTARGETSIZE", // == 382
492 "FIFTARGETISFACINGSELF", // == 383
493 "FDRAWBILLBOARD", // == 384
494 "FSETTARGETTOBLAHINPASSAGE" // == 385
495 };
496
497 //--------------------------------------------------------------------------------------------
498 //--------------------------------------------------------------------------------------------
499 static void insert_space( int position );
500 static int load_one_line( int read );
501 static void surround_space( int position );
502 static int get_indentation();
503 static void fix_operators();
504 static int parse_token( int read );
505 static void emit_opcode( BIT_FIELD highbits );
506 static void parse_line_by_line();
507 static Uint32 jump_goto( int index, int index_end );
508 static void parse_jumps( int ainumber );
509 static int ai_goto_colon( int read );
510 static void get_code( int read );
511
512 static void load_ai_codes_vfs( const char* loadname );
513
514 // functions for debugging the scripts
515 #if (DEBUG_SCRIPT_LEVEL > 2) && defined(_DEBUG)
516 static void print_token();
517 static void print_line();
518 #else
519 # define print_token()
520 # define print_line()
521 #endif
522
523 //--------------------------------------------------------------------------------------------
524 //--------------------------------------------------------------------------------------------
script_compiler_init()525 void script_compiler_init()
526 {
527 /// @details BB@> initalize the sctipt compiling module
528
529 // necessary for loading up the ai script
530 init_all_ai_scripts();
531
532 load_ai_codes_vfs( "mp_data/aicodes.txt" );
533
534 debug_script_file = fopen( vfs_resolveWriteFilename( "/debug/script_debug.txt" ), "wt" );
535 }
536
537 //--------------------------------------------------------------------------------------------
538 //--------------------------------------------------------------------------------------------
insert_space(int position)539 void insert_space( int position )
540 {
541 /// @details ZZ@> This function adds a space into the load line if there isn't one
542 /// there already
543
544 char cTmp, cSwap;
545 if ( !isspace( cLineBuffer[position] ) )
546 {
547 cTmp = cLineBuffer[position];
548 cLineBuffer[position] = ' ';
549 position++;
550 iLineSize++;
551
552 while ( position < iLineSize )
553 {
554 cSwap = cLineBuffer[position];
555 cLineBuffer[position] = cTmp;
556 cTmp = cSwap;
557 position++;
558 }
559
560 cLineBuffer[position] = CSTR_END; // or cTmp as cTmp == CSTR_END
561 }
562 }
563
564 //--------------------------------------------------------------------------------------------
load_one_line(int read)565 int load_one_line( int read )
566 {
567 /// @details ZZ@> This function loads a line into the line buffer
568
569 int stillgoing, foundtext;
570 char cTmp;
571 bool_t tabs_warning_needed;
572
573 // Parse to start to maintain indentation
574 cLineBuffer[0] = CSTR_END;
575 iLineSize = 0;
576 stillgoing = btrue;
577
578 // try to trap all end of line conditions so we can properly count the lines
579 tabs_warning_needed = bfalse;
580 while ( read < iLoadSize )
581 {
582 cTmp = cLoadBuffer[read];
583
584 if ( ASCII_LINEFEED_CHAR == cTmp && C_CARRIAGE_RETURN_CHAR == cLoadBuffer[read+1] )
585 {
586 iLineSize = 0;
587 cLineBuffer[0] = CSTR_END;
588 return read + 2;
589 }
590
591 if ( C_CARRIAGE_RETURN_CHAR == cTmp && ASCII_LINEFEED_CHAR == cLoadBuffer[read+1] )
592 {
593 iLineSize = 0;
594 cLineBuffer[0] = CSTR_END;
595 return read + 2;
596 }
597
598 if ( ASCII_LINEFEED_CHAR == cTmp || C_CARRIAGE_RETURN_CHAR == cTmp )
599 {
600 iLineSize = 0;
601 cLineBuffer[0] = CSTR_END;
602 return read + 1;
603 }
604
605 if ( C_TAB_CHAR == cTmp )
606 {
607 tabs_warning_needed = btrue;
608 cTmp = ' ';
609 }
610
611 if ( !isspace( cTmp ) )
612 {
613 break;
614 }
615
616 cLineBuffer[iLineSize] = ' ';
617 cLineBuffer[iLineSize+1] = CSTR_END;
618
619 read++;
620 iLineSize++;
621 }
622
623 // Parse to comment or end of line
624 foundtext = bfalse;
625 while ( read < iLoadSize )
626 {
627 cTmp = cLoadBuffer[read];
628 if ( C_CARRIAGE_RETURN_CHAR == cTmp || ASCII_LINEFEED_CHAR == cTmp )
629 {
630 break;
631 }
632
633 if ( '/' == cTmp && '/' == cLoadBuffer[read + 1] )
634 {
635 break;
636 }
637
638 read++;
639
640 if ( iscntrl( cTmp ) )
641 {
642 cTmp = ' ';
643 }
644
645 if ( !isspace( cTmp ) )
646 {
647 foundtext = btrue;
648
649 cLineBuffer[iLineSize] = cTmp;
650 cLineBuffer[iLineSize+1] = CSTR_END;
651 iLineSize++;
652 }
653 }
654 if ( !foundtext )
655 {
656 iLineSize = 0;
657 }
658
659 // terminate the line buffer properly
660 cLineBuffer[iLineSize] = CSTR_END;
661
662 if ( iLineSize > 0 && tabs_warning_needed )
663 {
664 log_warning( "Tab character used to define spacing will cause an error \"%s\"(%d) - \n \"%s\"\n", globalparsename, Token.iLine, cLineBuffer );
665 }
666
667 // Parse to end of line
668 while ( read < iLoadSize )
669 {
670 if ( ASCII_LINEFEED_CHAR == cLoadBuffer[read] && C_CARRIAGE_RETURN_CHAR == cLoadBuffer[read+1] )
671 {
672 read += 2;
673 break;
674 }
675 else if ( C_CARRIAGE_RETURN_CHAR == cLoadBuffer[read] && ASCII_LINEFEED_CHAR == cLoadBuffer[read+1] )
676 {
677 read += 2;
678 break;
679 }
680 else if ( CSTR_END == cLoadBuffer[read] || ASCII_LINEFEED_CHAR == cLoadBuffer[read] || C_CARRIAGE_RETURN_CHAR == cLoadBuffer[read] )
681 {
682 read += 1;
683 break;
684 }
685
686 read++;
687 }
688
689 return read;
690 }
691
692 //--------------------------------------------------------------------------------------------
surround_space(int position)693 void surround_space( int position )
694 {
695 insert_space( position + 1 );
696 if ( position > 0 )
697 {
698 if ( !isspace( cLineBuffer[position-1] ) )
699 {
700 insert_space( position );
701 }
702 }
703 }
704
705 //--------------------------------------------------------------------------------------------
get_indentation()706 int get_indentation()
707 {
708 /// @details ZZ@> This function returns the number of starting spaces in a line
709
710 int cnt;
711 char cTmp;
712
713 cnt = 0;
714 cTmp = cLineBuffer[cnt];
715 while ( isspace( cTmp ) )
716 {
717 cnt++;
718 cTmp = cLineBuffer[cnt];
719 }
720 if ( HAS_SOME_BITS( cnt, 1 ) )
721 {
722 log_warning( "Invalid indentation \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, cLineBuffer );
723 parseerror = btrue;
724 }
725
726 cnt >>= 1;
727 if ( cnt > 15 )
728 {
729 log_warning( "Too many levels of indentation \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, cLineBuffer );
730 parseerror = btrue;
731 cnt = 15;
732 }
733
734 return cnt;
735 }
736
737 //--------------------------------------------------------------------------------------------
fix_operators()738 void fix_operators()
739 {
740 /// @details ZZ@> This function puts spaces around operators to seperate words
741 /// better
742
743 int cnt;
744 char cTmp;
745
746 cnt = 0;
747
748 while ( cnt < iLineSize )
749 {
750 cTmp = cLineBuffer[cnt];
751 if ( '+' == cTmp || '-' == cTmp || '/' == cTmp || '*' == cTmp ||
752 '%' == cTmp || '>' == cTmp || '<' == cTmp || '&' == cTmp ||
753 '=' == cTmp )
754 {
755 surround_space( cnt );
756 cnt++;
757 }
758
759 cnt++;
760 }
761 }
762
763 //--------------------------------------------------------------------------------------------
parse_token(int read)764 int parse_token( int read )
765 {
766 /// @details ZZ@> This function tells what code is being indexed by read, it
767 /// will return the next spot to read from and stick the code number
768 /// in Token.iIndex
769
770 int cnt, wordsize;
771 char cTmp;
772 IDSZ idsz;
773
774 // Reset the token
775 Token.iIndex = MAX_OPCODE;
776 Token.iValue = 0;
777 Token.cType = '?';
778 Token.cWord[0] = CSTR_END;
779
780 // Check bounds
781 if ( read >= iLineSize )
782 return iLineSize;
783
784 // Skip spaces
785 cTmp = cLineBuffer[read];
786 while ( isspace( cTmp ) && read < iLineSize )
787 {
788 read++;
789 cTmp = cLineBuffer[read];
790 }
791 if ( read >= iLineSize ) { print_token(); return read; }
792
793 // Load the word into the other buffer
794 wordsize = 0;
795 while ( !isspace( cTmp ) && CSTR_END != cTmp )
796 {
797 Token.cWord[wordsize] = cTmp; wordsize++;
798 read++;
799 cTmp = cLineBuffer[read];
800 }
801 Token.cWord[wordsize] = CSTR_END;
802
803 // Check for numeric constant
804 if ( 0 != isdigit( Token.cWord[0] ) )
805 {
806 sscanf( Token.cWord, "%d", &Token.iValue );
807 Token.cType = 'C';
808 Token.iIndex = MAX_OPCODE;
809 { print_token(); return read; }
810 }
811
812 // Check for IDSZ constant
813 if ( '[' == Token.cWord[0] )
814 {
815 idsz = MAKE_IDSZ( Token.cWord[1], Token.cWord[2], Token.cWord[3], Token.cWord[4] );
816
817 Token.iValue = idsz;
818 Token.cType = 'C';
819 Token.iIndex = MAX_OPCODE;
820
821 { print_token(); return read; }
822 }
823
824 for ( cnt = 0; cnt < OpList.count; cnt++ )
825 {
826 if ( 0 == strncmp( Token.cWord, OpList.ary[cnt].cName, MAXCODENAMESIZE ) )
827 {
828 break;
829 }
830 }
831 if ( cnt < OpList.count )
832 {
833 Token.iValue = OpList.ary[cnt].iValue;
834 Token.cType = OpList.ary[cnt].cType;
835 Token.iIndex = cnt;
836 }
837 else if ( 0 == strcmp( Token.cWord, "=" ) )
838 {
839 Token.iValue = -1;
840 Token.cType = 'O';
841 Token.iIndex = MAX_OPCODE;
842 }
843 else
844 {
845 // Throw out an error code if we're loggin' 'em
846 log_message( "SCRIPT ERROR: \"%s\"(%d) - unknown opcode \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
847
848 Token.iValue = -1;
849 Token.cType = '?';
850 Token.iIndex = MAX_OPCODE;
851
852 parseerror = btrue;
853 }
854
855 { print_token(); return read; }
856 }
857
858 //--------------------------------------------------------------------------------------------
emit_opcode(BIT_FIELD highbits)859 void emit_opcode( BIT_FIELD highbits )
860 {
861 // detect a constant value
862 if ( 'C' == Token.cType || 'F' == Token.cType )
863 {
864 SET_BIT( highbits, FUNCTION_BIT );
865 }
866 if ( AisCompiled_offset < AISMAXCOMPILESIZE )
867 {
868 AisCompiled_buffer[AisCompiled_offset] = highbits | Token.iValue;
869 AisCompiled_offset++;
870 }
871 else
872 {
873 log_warning( "Script index larger than array\n" );
874 }
875 }
876
877 //--------------------------------------------------------------------------------------------
parse_line_by_line()878 void parse_line_by_line()
879 {
880 /// @details ZZ@> This function removes comments and endline codes, replacing
881 /// them with a 0
882
883 int read;
884 Uint32 highbits;
885 int parseposition;
886
887 read = 0;
888 for ( Token.iLine = 0; read < iLoadSize; Token.iLine++ )
889 {
890 read = load_one_line( read );
891 if ( 0 == iLineSize ) continue;
892
893 #if (DEBUG_SCRIPT_LEVEL > 2) && defined(_DEBUG)
894 print_line();
895 #endif
896
897 fix_operators();
898 parseposition = 0;
899
900 //------------------------------
901 // grab the first opcode
902
903 highbits = SET_DATA_BITS( get_indentation() );
904 parseposition = parse_token( parseposition );
905 if ( 'F' == Token.cType )
906 {
907 if ( FEND == Token.iValue && 0 == highbits )
908 {
909 // stop processing the lines, since we're finished
910 break;
911 }
912
913 //------------------------------
914 // the code type is a function
915
916 // save the opcode
917 emit_opcode( highbits );
918
919 // leave a space for the control code
920 Token.iValue = 0;
921 emit_opcode( 0 );
922
923 }
924 else if ( 'V' == Token.cType )
925 {
926 //------------------------------
927 // the code type is a math operation
928
929 int operand_index;
930 int operands = 0;
931
932 // save in the value's opcode
933 emit_opcode( highbits );
934
935 // save a position for the operand count
936 Token.iValue = 0;
937 operand_index = AisCompiled_offset;
938 emit_opcode( 0 );
939
940 // handle the "="
941 highbits = 0;
942 parseposition = parse_token( parseposition ); // EQUALS
943 if ( 'O' != Token.cType || 0 != strcmp( Token.cWord, "=" ) )
944 {
945 log_warning( "Invalid equation \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, cLineBuffer );
946 }
947
948 //------------------------------
949 // grab the next opcode
950
951 parseposition = parse_token( parseposition );
952 if ( 'V' == Token.cType || 'C' == Token.cType )
953 {
954 // this is a value or a constant
955 emit_opcode( 0 );
956 operands++;
957
958 parseposition = parse_token( parseposition );
959 }
960 else if ( 'O' != Token.cType )
961 {
962 // this is a function or an unknown value. do not break the script.
963 log_warning( "Invalid operand \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
964
965 emit_opcode( 0 );
966 operands++;
967
968 parseposition = parse_token( parseposition );
969 }
970
971 // expects a OPERATOR VALUE OPERATOR VALUE OPERATOR VALUE pattern
972 while ( parseposition < iLineSize )
973 {
974 // the current token should be an operator
975 if ( 'O' != Token.cType )
976 {
977 // problem with the loop
978 log_warning( "Expected an operator \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, cLineBuffer );
979 break;
980 }
981
982 // the highbits are the operator's value
983 highbits = SET_DATA_BITS( Token.iValue );
984
985 // VALUE
986 parseposition = parse_token( parseposition );
987 if ( 'C' != Token.cType && 'V' != Token.cType )
988 {
989 // not having a constant or a value here breaks the function. stop processing
990 log_warning( "Invalid operand \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
991 break;
992 }
993
994 emit_opcode( highbits );
995 operands++;
996
997 // OPERATOR
998 parseposition = parse_token( parseposition );
999 }
1000
1001 AisCompiled_buffer[operand_index] = operands; // Number of operands
1002 }
1003 else if ( 'C' == Token.cType )
1004 {
1005 log_warning( "Invalid constant \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
1006 }
1007 else if ( '?' == Token.cType )
1008 {
1009 // unknown opcode, do not process this line
1010 log_warning( "Invalid operand \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
1011 }
1012 else
1013 {
1014 log_warning( "Compiler is broken \"%s\"(%d) - \"%s\"\n", globalparsename, Token.iLine, Token.cWord );
1015 break;
1016 }
1017 }
1018
1019 Token.iValue = FEND;
1020 Token.cType = 'F';
1021 emit_opcode( 0 );
1022 Token.iValue = AisCompiled_offset + 1;
1023 emit_opcode( 0 );
1024 }
1025
1026 //--------------------------------------------------------------------------------------------
jump_goto(int index,int index_end)1027 Uint32 jump_goto( int index, int index_end )
1028 {
1029 /// @details ZZ@> This function figures out where to jump to on a fail based on the
1030 /// starting location and the following code. The starting location
1031 /// should always be a function code with indentation
1032
1033 Uint32 value;
1034 int targetindent, indent;
1035
1036 value = AisCompiled_buffer[index]; index += 2;
1037 targetindent = GET_DATA_BITS( value );
1038 indent = 100;
1039
1040 while ( indent > targetindent && index < index_end )
1041 {
1042 value = AisCompiled_buffer[index];
1043 indent = GET_DATA_BITS( value );
1044 if ( indent > targetindent )
1045 {
1046 // Was it a function
1047 if ( HAS_SOME_BITS( value, FUNCTION_BIT ) )
1048 {
1049 // Each function needs a jump
1050 index++;
1051 index++;
1052 }
1053 else
1054 {
1055 // Operations cover each operand
1056 index++;
1057 value = AisCompiled_buffer[index];
1058 index++;
1059 index += ( value & 255 );
1060 }
1061 }
1062 }
1063
1064 return MIN( index, index_end );
1065 }
1066
1067 //--------------------------------------------------------------------------------------------
parse_jumps(int ainumber)1068 void parse_jumps( int ainumber )
1069 {
1070 /// @details ZZ@> This function sets up the fail jumps for the down and dirty code
1071
1072 int index, index_end;
1073 Uint32 value, iTmp;
1074
1075 index = AisStorage.ary[ainumber].iStartPosition;
1076 index_end = AisStorage.ary[ainumber].iEndPosition;
1077
1078 value = AisCompiled_buffer[index];
1079 while ( index < index_end )
1080 {
1081 value = AisCompiled_buffer[index];
1082
1083 // Was it a function
1084 if ( HAS_SOME_BITS( value, FUNCTION_BIT ) )
1085 {
1086 // Each function needs a jump
1087 iTmp = jump_goto( index, index_end );
1088 index++;
1089 AisCompiled_buffer[index] = iTmp;
1090 index++;
1091 }
1092 else
1093 {
1094 // Operations cover each operand
1095 index++;
1096 iTmp = AisCompiled_buffer[index];
1097 index++;
1098 index += CLIP_TO_08BITS( iTmp );
1099 }
1100 }
1101 }
1102
1103 //--------------------------------------------------------------------------------------------
ai_goto_colon(int read)1104 int ai_goto_colon( int read )
1105 {
1106 /// @details ZZ@> This function goes to spot after the next colon
1107
1108 char cTmp;
1109
1110 cTmp = cLoadBuffer[read];
1111
1112 while ( ':' != cTmp && read < iLoadSize )
1113 {
1114 read++; cTmp = cLoadBuffer[read];
1115 }
1116 if ( read < iLoadSize ) read++;
1117
1118 return read;
1119 }
1120
1121 //--------------------------------------------------------------------------------------------
get_code(int read)1122 void get_code( int read )
1123 {
1124 /// @details ZZ@> This function gets code names and other goodies
1125
1126 char cTmp;
1127 int iTmp;
1128 STRING sTmp;
1129
1130 sscanf(( char* )( cLoadBuffer + read ), "%c%d%255s", &cTmp, &iTmp, sTmp );
1131
1132 strncpy( OpList.ary[OpList.count].cName, sTmp, SDL_arraysize( OpList.ary[OpList.count].cName ) );
1133 OpList.ary[OpList.count].cType = toupper( cTmp );
1134 OpList.ary[OpList.count].iValue = iTmp;
1135 }
1136
1137 //--------------------------------------------------------------------------------------------
load_ai_codes_vfs(const char * loadname)1138 void load_ai_codes_vfs( const char* loadname )
1139 {
1140 /// @details ZZ@> This function loads all of the function and variable names
1141
1142 vfs_FILE* fileread;
1143 int read;
1144
1145 OpList.count = 0;
1146 fileread = vfs_openRead( loadname );
1147 if ( fileread )
1148 {
1149 iLoadSize = ( int )vfs_read( cLoadBuffer, 1, AISMAXLOADSIZE, fileread );
1150 read = 0;
1151 read = ai_goto_colon( read );
1152
1153 while ( read != iLoadSize )
1154 {
1155 get_code( read );
1156 OpList.count++;
1157 read = ai_goto_colon( read );
1158 }
1159
1160 vfs_close( fileread );
1161 }
1162 }
1163
1164 //--------------------------------------------------------------------------------------------
load_ai_script_vfs(const char * loadname)1165 int load_ai_script_vfs( const char *loadname )
1166 {
1167 /// @details ZZ@> This function loads a script to memory and
1168 /// returns the index of the script, returns -1 if it fails
1169
1170 vfs_FILE* fileread;
1171 int retval = -1;
1172
1173 iNumLine = 0;
1174 fileread = vfs_openRead( loadname );
1175
1176 // No such file
1177 if ( NULL == fileread )
1178 {
1179 log_debug( "I am missing a AI script (%s)\n", loadname );
1180 log_message( " Using the default AI script instead (\"mp_data/script.txt\")\n" );
1181 return 0; //0 == default AI script
1182 }
1183 if ( AisStorage.count >= MAX_AI )
1184 {
1185 log_warning( "Too many script files. Cannot load file \"%s\"\n", loadname );
1186 return retval;
1187 }
1188
1189 // load the file
1190 iLoadSize = ( int )vfs_read( cLoadBuffer, 1, AISMAXLOADSIZE, fileread );
1191 vfs_close( fileread );
1192
1193 // if the file is empty, use the default script
1194 if ( 0 == iLoadSize )
1195 {
1196 log_warning( "Script file is empty. \"%s\"\n", loadname );
1197 return retval;
1198 }
1199
1200 // save the filename for error logging
1201 strncpy( AisStorage.ary[AisStorage.count].szName, loadname, sizeof( STRING ) );
1202 globalparsename = loadname;
1203
1204 // initialize the start and end position
1205 AisStorage.ary[AisStorage.count].iStartPosition = AisCompiled_offset;
1206 AisStorage.ary[AisStorage.count].iEndPosition = AisCompiled_offset;
1207
1208 // parse/compile the scripts
1209 // parse_null_terminate_comments();
1210 parse_line_by_line();
1211
1212 // set the end position of the script
1213 AisStorage.ary[AisStorage.count].iEndPosition = AisCompiled_offset;
1214
1215 // determine the correct jumps
1216 parse_jumps( AisStorage.count );
1217
1218 // get the ai script index
1219 retval = AisStorage.count;
1220
1221 // increase the ai script index
1222 AisStorage.count++;
1223
1224 return retval;
1225 }
1226
1227 //--------------------------------------------------------------------------------------------
release_all_ai_scripts()1228 void release_all_ai_scripts()
1229 {
1230 /// @details ZZ@> This function resets the ai script "pointers"
1231
1232 AisCompiled_offset = 0;
1233 AisStorage.count = 0;
1234 }
1235
1236 //--------------------------------------------------------------------------------------------
init_all_ai_scripts()1237 void init_all_ai_scripts()
1238 {
1239 /// @details ZZ@> This function initializes the ai script "pointers"
1240
1241 AisCompiled_offset = 0;
1242 AisStorage.count = 0;
1243 }
1244
1245 //--------------------------------------------------------------------------------------------
1246 #if (DEBUG_SCRIPT_LEVEL > 2) && defined(_DEBUG)
print_token()1247 void print_token()
1248 {
1249 printf( "------------\n", globalparsename, Token.iLine );
1250 printf( "\tToken.iIndex == %d\n", Token.iIndex );
1251 printf( "\tToken.iValue == %d\n", Token.iValue );
1252 printf( "\tToken.cType == \'%c\'\n", Token.cType );
1253 printf( "\tToken.cWord == \"%s\"\n", Token.cWord );
1254 }
1255 #endif
1256
1257 //--------------------------------------------------------------------------------------------
1258 #if (DEBUG_SCRIPT_LEVEL > 2) && defined(_DEBUG)
print_line()1259 void print_line()
1260 {
1261 int i;
1262 char cTmp;
1263
1264 printf( "\n===========\n\tfile == \"%s\"\n\tline == %d\n", globalparsename, Token.iLine );
1265
1266 printf( "\tline == \"" );
1267
1268 for ( i = 0; i < iLineSize; i++ )
1269 {
1270 cTmp = cLineBuffer[i];
1271 if ( isprint( cTmp ) )
1272 {
1273 printf( "%c", cTmp );
1274 }
1275 else
1276 {
1277 printf( "\\%03d", cTmp );
1278 }
1279 };
1280
1281 printf( "\", length == %d\n", iLineSize );
1282 }
1283 #endif
1284
1285 /** Preparation for eliminating aicodes.txt except for introducing aliases
1286 DEFINE_FUNCTION( FIFSPAWNED, "IfSpawned" ) // == 0
1287 DEFINE_FUNCTION( FIFTIMEOUT, "IfTimeOut" ) // == 1
1288 DEFINE_FUNCTION( FIFATWAYPOINT, "IfAtWaypoint" ) // == 2
1289 DEFINE_FUNCTION( FIFATLASTWAYPOINT, "IfAtLastWaypoint" ) // == 3
1290 DEFINE_FUNCTION( FIFATTACKED, "IfAttacked" ) // == 4
1291 DEFINE_FUNCTION( FIFBUMPED, "IfBumped" ) // == 5
1292 DEFINE_FUNCTION( FIFORDERED, "IfOrdered" ) // == 6
1293 DEFINE_FUNCTION( FIFCALLEDFORHELP, "IfCalledForHelp" ) // == 7
1294 DEFINE_FUNCTION( FSETCONTENT, "SetContent" ) // == 8
1295 DEFINE_FUNCTION( FIFKILLED, "IfKilled" ) // == 9
1296 DEFINE_FUNCTION( FIFTARGETKILLED, "IfTargetKilled" ) // == 10
1297 DEFINE_FUNCTION( FCLEARWAYPOINTS, "ClearWaypoints" ) // == 11
1298 DEFINE_FUNCTION( FADDWAYPOINT, "AddWaypoint" ) // == 12
1299 DEFINE_FUNCTION( FFINDPATH, "FindPath" ) // == 13
1300 DEFINE_FUNCTION( FCOMPASS, "Compass" ) // == 14
1301 DEFINE_FUNCTION( FGETTARGETARMORPRICE, "GetTargetArmorPrice" ) // == 15
1302 DEFINE_FUNCTION( FSETTIME, "SetTime" ) // == 16
1303 DEFINE_FUNCTION( FGETCONTENT, "GetContent" ) // == 17
1304 DEFINE_FUNCTION( FJOINTARGETTEAM, "JoinTargetTeam" ) // == 18
1305 DEFINE_FUNCTION( FSETTARGETTONEARBYENEMY, "SetTargetToNearbyEnemy" ) // == 19
1306 DEFINE_FUNCTION( FSETTARGETTOTARGETLEFTHAND, "SetTargetToTargetLeftHand" ) // == 20
1307 DEFINE_FUNCTION( FSETTARGETTOTARGETRIGHTHAND, "SetTargetToTargetRightHand" ) // == 21
1308 DEFINE_FUNCTION( FSETTARGETTOWHOEVERATTACKED, "SetTargetToWhoeverAttacked" ) // == 22
1309 DEFINE_FUNCTION( FSETTARGETTOWHOEVERBUMPED, "SetTargetToWhoeverBumped" ) // == 23
1310 DEFINE_FUNCTION( FSETTARGETTOWHOEVERCALLEDFORHELP, "SetTargetToWhoeverCalledForHelp" ) // == 24
1311 DEFINE_FUNCTION( FSETTARGETTOOLDTARGET, "SetTargetToOldTarget" ) // == 25
1312 DEFINE_FUNCTION( FSETTURNMODETOVELOCITY, "SetTurnModeToVelocity" ) // == 26
1313 DEFINE_FUNCTION( FSETTURNMODETOWATCH, "SetTurnModeToWatch" ) // == 27
1314 DEFINE_FUNCTION( FSETTURNMODETOSPIN, "SetTurnModeToSpin" ) // == 28
1315 DEFINE_FUNCTION( FSETBUMPHEIGHT, "SetBumpHeight" ) // == 29
1316 DEFINE_FUNCTION( FIFTARGETHASID, "IfTargetHasID" ) // == 30
1317 DEFINE_FUNCTION( FIFTARGETHASITEMID, "IfTargetHasItemID" ) // == 31
1318 DEFINE_FUNCTION( FIFTARGETHOLDINGITEMID, "IfTargetHoldingItemID" ) // == 32
1319 DEFINE_FUNCTION( FIFTARGETHASSKILLID, "IfTargetHasSkillID" ) // == 33
1320 DEFINE_FUNCTION( FELSE, "Else" ) // == 34
1321 DEFINE_FUNCTION( FRUN, "Run" ) // == 35
1322 DEFINE_FUNCTION( FWALK, "Walk" ) // == 36
1323 DEFINE_FUNCTION( FSNEAK, "Sneak" ) // == 37
1324 DEFINE_FUNCTION( FDOACTION, "DoAction" ) // == 38
1325 DEFINE_FUNCTION( FKEEPACTION, "KeepAction" ) // == 39
1326 DEFINE_FUNCTION( FISSUEORDER, "IssueOrder" ) // == 40
1327 DEFINE_FUNCTION( FDROPWEAPONS, "DropWeapons" ) // == 41
1328 DEFINE_FUNCTION( FTARGETDOACTION, "TargetDoAction" ) // == 42
1329 DEFINE_FUNCTION( FOPENPASSAGE, "OpenPassage" ) // == 43
1330 DEFINE_FUNCTION( FCLOSEPASSAGE, "ClosePassage" ) // == 44
1331 DEFINE_FUNCTION( FIFPASSAGEOPEN, "IfPassageOpen" ) // == 45
1332 DEFINE_FUNCTION( FGOPOOF, "GoPoof" ) // == 46
1333 DEFINE_FUNCTION( FCOSTTARGETITEMID, "CostTargetItemID" ) // == 47
1334 DEFINE_FUNCTION( FDOACTIONOVERRIDE, "DoActionOverride" ) // == 48
1335 DEFINE_FUNCTION( FIFHEALED, "IfHealed" ) // == 49
1336 DEFINE_FUNCTION( FSENDMESSAGE, "SendMessage" ) // == 50
1337 DEFINE_FUNCTION( FCALLFORHELP, "CallForHelp" ) // == 51
1338 DEFINE_FUNCTION( FADDIDSZ, "AddIDSZ" ) // == 52
1339 DEFINE_FUNCTION( FEND, "End" ) // == 53
1340 DEFINE_FUNCTION( FSETSTATE, "SetState" ) // == 54
1341 DEFINE_FUNCTION( FGETSTATE, "GetState" ) // == 55
1342 DEFINE_FUNCTION( FIFSTATEIS, "IfStateIs" ) // == 56
1343 DEFINE_FUNCTION( FIFTARGETCANOPENSTUFF, "IfTargetCanOpenStuff" ) // == 57
1344 DEFINE_FUNCTION( FIFGRABBED, "IfGrabbed" ) // == 58
1345 DEFINE_FUNCTION( FIFDROPPED, "IfDropped" ) // == 59
1346 DEFINE_FUNCTION( FSETTARGETTOWHOEVERISHOLDING, "SetTargetToWhoeverIsHolding" ) // == 60
1347 DEFINE_FUNCTION( FDAMAGETARGET, "DamageTarget" ) // == 61
1348 DEFINE_FUNCTION( FIFXISLESSTHANY, "IfXIsLessThanY" ) // == 62
1349 DEFINE_FUNCTION( FSETWEATHERTIME, "SetWeatherTime" ) // == 63
1350 DEFINE_FUNCTION( FGETBUMPHEIGHT, "GetBumpHeight" ) // == 64
1351 DEFINE_FUNCTION( FIFREAFFIRMED, "IfReaffirmed" ) // == 65
1352 DEFINE_FUNCTION( FUNKEEPACTION, "UnkeepAction" ) // == 66
1353 DEFINE_FUNCTION( FIFTARGETISONOTHERTEAM, "IfTargetIsOnOtherTeam" ) // == 67
1354 DEFINE_FUNCTION( FIFTARGETISONHATEDTEAM, "IfTargetIsOnHatedTeam" ) // == 68
1355 DEFINE_FUNCTION( FPRESSLATCHBUTTON, "PressLatchButton" ) // == 69
1356 DEFINE_FUNCTION( FSETTARGETTOTARGETOFLEADER, "SetTargetToTargetOfLeader" ) // == 70
1357 DEFINE_FUNCTION( FIFLEADERKILLED, "IfLeaderKilled" ) // == 71
1358 DEFINE_FUNCTION( FBECOMELEADER, "BecomeLeader" ) // == 72
1359 DEFINE_FUNCTION( FCHANGETARGETARMOR, "ChangeTargetArmor" ) // == 73
1360 DEFINE_FUNCTION( FGIVEMONEYTOTARGET, "GiveMoneyToTarget" ) // == 74
1361 DEFINE_FUNCTION( FDROPKEYS, "DropKeys" ) // == 75
1362 DEFINE_FUNCTION( FIFLEADERISALIVE, "IfLeaderIsAlive" ) // == 76
1363 DEFINE_FUNCTION( FIFTARGETISOLDTARGET, "IfTargetIsOldTarget" ) // == 77
1364 DEFINE_FUNCTION( FSETTARGETTOLEADER, "SetTargetToLeader" ) // == 78
1365 DEFINE_FUNCTION( FSPAWNCHARACTER, "SpawnCharacter" ) // == 79
1366 DEFINE_FUNCTION( FRESPAWNCHARACTER, "RespawnCharacter" ) // == 80
1367 DEFINE_FUNCTION( FCHANGETILE, "ChangeTile" ) // == 81
1368 DEFINE_FUNCTION( FIFUSED, "IfUsed" ) // == 82
1369 DEFINE_FUNCTION( FDROPMONEY, "DropMoney" ) // == 83
1370 DEFINE_FUNCTION( FSETOLDTARGET, "SetOldTarget" ) // == 84
1371 DEFINE_FUNCTION( FDETACHFROMHOLDER, "DetachFromHolder" ) // == 85
1372 DEFINE_FUNCTION( FIFTARGETHASVULNERABILITYID, "IfTargetHasVulnerabilityID" ) // == 86
1373 DEFINE_FUNCTION( FCLEANUP, "CleanUp" ) // == 87
1374 DEFINE_FUNCTION( FIFCLEANEDUP, "IfCleanedUp" ) // == 88
1375 DEFINE_FUNCTION( FIFSITTING, "IfSitting" ) // == 89
1376 DEFINE_FUNCTION( FIFTARGETISHURT, "IfTargetIsHurt" ) // == 90
1377 DEFINE_FUNCTION( FIFTARGETISAPLAYER, "IfTargetIsAPlayer" ) // == 91
1378 DEFINE_FUNCTION( FPLAYSOUND, "PlaySound" ) // == 92
1379 DEFINE_FUNCTION( FSPAWNPARTICLE, "SpawnParticle" ) // == 93
1380 DEFINE_FUNCTION( FIFTARGETISALIVE, "IfTargetIsAlive" ) // == 94
1381 DEFINE_FUNCTION( FSTOP, "Stop" ) // == 95
1382 DEFINE_FUNCTION( FDISAFFIRMCHARACTER, "DisaffirmCharacter" ) // == 96
1383 DEFINE_FUNCTION( FREAFFIRMCHARACTER, "ReaffirmCharacter" ) // == 97
1384 DEFINE_FUNCTION( FIFTARGETISSELF, "IfTargetIsSelf" ) // == 98
1385 DEFINE_FUNCTION( FIFTARGETISMALE, "IfTargetIsMale" ) // == 99
1386 DEFINE_FUNCTION( FIFTARGETISFEMALE, "IfTargetIsFemale" ) // == 100
1387 DEFINE_FUNCTION( FSETTARGETTOSELF, "SetTargetToSelf" ) // == 101
1388 DEFINE_FUNCTION( FSETTARGETTORIDER, "SetTargetToRider" ) // == 102
1389 DEFINE_FUNCTION( FGETATTACKTURN, "GetAttackTurn" ) // == 103
1390 DEFINE_FUNCTION( FGETDAMAGETYPE, "GetDamageType" ) // == 104
1391 DEFINE_FUNCTION( FBECOMESPELL, "BecomeSpell" ) // == 105
1392 DEFINE_FUNCTION( FBECOMESPELLBOOK, "BecomeSpellbook" ) // == 106
1393 DEFINE_FUNCTION( FIFSCOREDAHIT, "IfScoredAHit" ) // == 107
1394 DEFINE_FUNCTION( FIFDISAFFIRMED, "IfDisaffirmed" ) // == 108
1395 DEFINE_FUNCTION( FTRANSLATEORDER, "TranslateOrder" ) // == 109
1396 DEFINE_FUNCTION( FSETTARGETTOWHOEVERWASHIT, "SetTargetToWhoeverWasHit" ) // == 110
1397 DEFINE_FUNCTION( FSETTARGETTOWIDEENEMY, "SetTargetToWideEnemy" ) // == 111
1398 DEFINE_FUNCTION( FIFCHANGED, "IfChanged" ) // == 112
1399 DEFINE_FUNCTION( FIFINWATER, "IfInWater" ) // == 113
1400 DEFINE_FUNCTION( FIFBORED, "IfBored" ) // == 114
1401 DEFINE_FUNCTION( FIFTOOMUCHBAGGAGE, "IfTooMuchBaggage" ) // == 115
1402 DEFINE_FUNCTION( FIFGROGGED, "IfGrogged" ) // == 116
1403 DEFINE_FUNCTION( FIFDAZED, "IfDazed" ) // == 117
1404 DEFINE_FUNCTION( FIFTARGETHASSPECIALID, "IfTargetHasSpecialID" ) // == 118
1405 DEFINE_FUNCTION( FPRESSTARGETLATCHBUTTON, "PressTargetLatchButton" ) // == 119
1406 DEFINE_FUNCTION( FIFINVISIBLE, "IfInvisible" ) // == 120
1407 DEFINE_FUNCTION( FIFARMORIS, "IfArmorIs" ) // == 121
1408 DEFINE_FUNCTION( FGETTARGETGROGTIME, "GetTargetGrogTime" ) // == 122
1409 DEFINE_FUNCTION( FGETTARGETDAZETIME, "GetTargetDazeTime" ) // == 123
1410 DEFINE_FUNCTION( FSETDAMAGETYPE, "SetDamageType" ) // == 124
1411 DEFINE_FUNCTION( FSETWATERLEVEL, "SetWaterLevel" ) // == 125
1412 DEFINE_FUNCTION( FENCHANTTARGET, "EnchantTarget" ) // == 126
1413 DEFINE_FUNCTION( FENCHANTCHILD, "EnchantChild" ) // == 127
1414 DEFINE_FUNCTION( FTELEPORTTARGET, "TeleportTarget" ) // == 128
1415 DEFINE_FUNCTION( FGIVEEXPERIENCETOTARGET, "GiveExperienceToTarget" ) // == 129
1416 DEFINE_FUNCTION( FINCREASEAMMO, "IncreaseAmmo" ) // == 130
1417 DEFINE_FUNCTION( FUNKURSETARGET, "UnkurseTarget" ) // == 131
1418 DEFINE_FUNCTION( FGIVEEXPERIENCETOTARGETTEAM, "GiveExperienceToTargetTeam" ) // == 132
1419 DEFINE_FUNCTION( FIFUNARMED, "IfUnarmed" ) // == 133
1420 DEFINE_FUNCTION( FRESTOCKTARGETAMMOIDALL, "RestockTargetAmmoIDAll" ) // == 134
1421 DEFINE_FUNCTION( FRESTOCKTARGETAMMOIDFIRST, "RestockTargetAmmoIDFirst" ) // == 135
1422 DEFINE_FUNCTION( FFLASHTARGET, "FlashTarget" ) // == 136
1423 DEFINE_FUNCTION( FSETREDSHIFT, "SetRedShift" ) // == 137
1424 DEFINE_FUNCTION( FSETGREENSHIFT, "SetGreenShift" ) // == 138
1425 DEFINE_FUNCTION( FSETBLUESHIFT, "SetBlueShift" ) // == 139
1426 DEFINE_FUNCTION( FSETLIGHT, "SetLight" ) // == 140
1427 DEFINE_FUNCTION( FSETALPHA, "SetAlpha" ) // == 141
1428 DEFINE_FUNCTION( FIFHITFROMBEHIND, "IfHitFromBehind" ) // == 142
1429 DEFINE_FUNCTION( FIFHITFROMFRONT, "IfHitFromFront" ) // == 143
1430 DEFINE_FUNCTION( FIFHITFROMLEFT, "IfHitFromLeft" ) // == 144
1431 DEFINE_FUNCTION( FIFHITFROMRIGHT, "IfHitFromRight" ) // == 145
1432 DEFINE_FUNCTION( FIFTARGETISONSAMETEAM, "IfTargetIsOnSameTeam" ) // == 146
1433 DEFINE_FUNCTION( FKILLTARGET, "KillTarget" ) // == 147
1434 DEFINE_FUNCTION( FUNDOENCHANT, "UndoEnchant" ) // == 148
1435 DEFINE_FUNCTION( FGETWATERLEVEL, "GetWaterLevel" ) // == 149
1436 DEFINE_FUNCTION( FCOSTTARGETMANA, "CostTargetMana" ) // == 150
1437 DEFINE_FUNCTION( FIFTARGETHASANYID, "IfTargetHasAnyID" ) // == 151
1438 DEFINE_FUNCTION( FSETBUMPSIZE, "SetBumpSize" ) // == 152
1439 DEFINE_FUNCTION( FIFNOTDROPPED, "IfNotDropped" ) // == 153
1440 DEFINE_FUNCTION( FIFYISLESSTHANX, "IfYIsLessThanX" ) // == 154
1441 DEFINE_FUNCTION( FSETFLYHEIGHT, "SetFlyHeight" ) // == 155
1442 DEFINE_FUNCTION( FIFBLOCKED, "IfBlocked" ) // == 156
1443 DEFINE_FUNCTION( FIFTARGETISDEFENDING, "IfTargetIsDefending" ) // == 157
1444 DEFINE_FUNCTION( FIFTARGETISATTACKING, "IfTargetIsAttacking" ) // == 158
1445 DEFINE_FUNCTION( FIFSTATEIS0, "IfStateIs0" ) // == 159
1446 DEFINE_FUNCTION( FIFSTATEIS1, "IfStateIs1" ) // == 160
1447 DEFINE_FUNCTION( FIFSTATEIS2, "IfStateIs2" ) // == 161
1448 DEFINE_FUNCTION( FIFSTATEIS3, "IfStateIs3" ) // == 162
1449 DEFINE_FUNCTION( FIFSTATEIS4, "IfStateIs4" ) // == 163
1450 DEFINE_FUNCTION( FIFSTATEIS5, "IfStateIs5" ) // == 164
1451 DEFINE_FUNCTION( FIFSTATEIS6, "IfStateIs6" ) // == 165
1452 DEFINE_FUNCTION( FIFSTATEIS7, "IfStateIs7" ) // == 166
1453 DEFINE_FUNCTION( FIFCONTENTIS, "IfContentIs" ) // == 167
1454 DEFINE_FUNCTION( FSETTURNMODETOWATCHTARGET, "SetTurnModeToWatchTarget" ) // == 168
1455 DEFINE_FUNCTION( FIFSTATEISNOT, "IfStateIsNot" ) // == 169
1456 DEFINE_FUNCTION( FIFXISEQUALTOY, "IfXIsEqualToY" ) // == 170
1457 DEFINE_FUNCTION( FDEBUGMESSAGE, "DebugMessage" ) // == 171
1458 DEFINE_FUNCTION( FBLACKTARGET, "BlackTarget" ) // == 172
1459 DEFINE_FUNCTION( FSENDMESSAGENEAR, "SendMessageNear" ) // == 173
1460 DEFINE_FUNCTION( FIFHITGROUND, "IfHitGround" ) // == 174
1461 DEFINE_FUNCTION( FIFNAMEISKNOWN, "IfNameIsKnown" ) // == 175
1462 DEFINE_FUNCTION( FIFUSAGEISKNOWN, "IfUsageIsKnown" ) // == 176
1463 DEFINE_FUNCTION( FIFHOLDINGITEMID, "IfHoldingItemID" ) // == 177
1464 DEFINE_FUNCTION( FIFHOLDINGRANGEDWEAPON, "IfHoldingRangedWeapon" ) // == 178
1465 DEFINE_FUNCTION( FIFHOLDINGMELEEWEAPON, "IfHoldingMeleeWeapon" ) // == 179
1466 DEFINE_FUNCTION( FIFHOLDINGSHIELD, "IfHoldingShield" ) // == 180
1467 DEFINE_FUNCTION( FIFKURSED, "IfKursed" ) // == 181
1468 DEFINE_FUNCTION( FIFTARGETISKURSED, "IfTargetIsKursed" ) // == 182
1469 DEFINE_FUNCTION( FIFTARGETISDRESSEDUP, "IfTargetIsDressedUp" ) // == 183
1470 DEFINE_FUNCTION( FIFOVERWATER, "IfOverWater" ) // == 184
1471 DEFINE_FUNCTION( FIFTHROWN, "IfThrown" ) // == 185
1472 DEFINE_FUNCTION( FMAKENAMEKNOWN, "MakeNameKnown" ) // == 186
1473 DEFINE_FUNCTION( FMAKEUSAGEKNOWN, "MakeUsageKnown" ) // == 187
1474 DEFINE_FUNCTION( FSTOPTARGETMOVEMENT, "StopTargetMovement" ) // == 188
1475 DEFINE_FUNCTION( FSETXY, "SetXY" ) // == 189
1476 DEFINE_FUNCTION( FGETXY, "GetXY" ) // == 190
1477 DEFINE_FUNCTION( FADDXY, "AddXY" ) // == 191
1478 DEFINE_FUNCTION( FMAKEAMMOKNOWN, "MakeAmmoKnown" ) // == 192
1479 DEFINE_FUNCTION( FSPAWNATTACHEDPARTICLE, "SpawnAttachedParticle" ) // == 193
1480 DEFINE_FUNCTION( FSPAWNEXACTPARTICLE, "SpawnExactParticle" ) // == 194
1481 DEFINE_FUNCTION( FACCELERATETARGET, "AccelerateTarget" ) // == 195
1482 DEFINE_FUNCTION( FIFDISTANCEISMORETHANTURN, "IfDistanceIsMoreThanTurn" ) // == 196
1483 DEFINE_FUNCTION( FIFCRUSHED, "IfCrushed" ) // == 197
1484 DEFINE_FUNCTION( FMAKECRUSHVALID, "MakeCrushValid" ) // == 198
1485 DEFINE_FUNCTION( FSETTARGETTOLOWESTTARGET, "SetTargetToLowestTarget" ) // == 199
1486 DEFINE_FUNCTION( FIFNOTPUTAWAY, "IfNotPutAway" ) // == 200
1487 DEFINE_FUNCTION( FIFTAKENOUT, "IfTakenOut" ) // == 201
1488 DEFINE_FUNCTION( FIFAMMOOUT, "IfAmmoOut" ) // == 202
1489 DEFINE_FUNCTION( FPLAYSOUNDLOOPED, "PlaySoundLooped" ) // == 203
1490 DEFINE_FUNCTION( FSTOPSOUND, "StopSound" ) // == 204
1491 DEFINE_FUNCTION( FHEALSELF, "HealSelf" ) // == 205
1492 DEFINE_FUNCTION( FEQUIP, "Equip" ) // == 206
1493 DEFINE_FUNCTION( FIFTARGETHASITEMIDEQUIPPED, "IfTargetHasItemIDEquipped" ) // == 207
1494 DEFINE_FUNCTION( FSETOWNERTOTARGET, "SetOwnerToTarget" ) // == 208
1495 DEFINE_FUNCTION( FSETTARGETTOOWNER, "SetTargetToOwner" ) // == 209
1496 DEFINE_FUNCTION( FSETFRAME, "SetFrame" ) // == 210
1497 DEFINE_FUNCTION( FBREAKPASSAGE, "BreakPassage" ) // == 211
1498 DEFINE_FUNCTION( FSETRELOADTIME, "SetReloadTime" ) // == 212
1499 DEFINE_FUNCTION( FSETTARGETTOWIDEBLAHID, "SetTargetToWideBlahID" ) // == 213
1500 DEFINE_FUNCTION( FPOOFTARGET, "PoofTarget" ) // == 214
1501 DEFINE_FUNCTION( FCHILDDOACTIONOVERRIDE, "ChildDoActionOverride" ) // == 215
1502 DEFINE_FUNCTION( FSPAWNPOOF, "SpawnPoof" ) // == 216
1503 DEFINE_FUNCTION( FSETSPEEDPERCENT, "SetSpeedPercent" ) // == 217
1504 DEFINE_FUNCTION( FSETCHILDSTATE, "SetChildState" ) // == 218
1505 DEFINE_FUNCTION( FSPAWNATTACHEDSIZEDPARTICLE, "SpawnAttachedSizedParticle" ) // == 219
1506 DEFINE_FUNCTION( FCHANGEARMOR, "ChangeArmor" ) // == 220
1507 DEFINE_FUNCTION( FSHOWTIMER, "ShowTimer" ) // == 221
1508 DEFINE_FUNCTION( FIFFACINGTARGET, "IfFacingTarget" ) // == 222
1509 DEFINE_FUNCTION( FPLAYSOUNDVOLUME, "PlaySoundVolume" ) // == 223
1510 DEFINE_FUNCTION( FSPAWNATTACHEDFACEDPARTICLE, "SpawnAttachedFacedParticle" ) // == 224
1511 DEFINE_FUNCTION( FIFSTATEISODD, "IfStateIsOdd" ) // == 225
1512 DEFINE_FUNCTION( FSETTARGETTODISTANTENEMY, "SetTargetToDistantEnemy" ) // == 226
1513 DEFINE_FUNCTION( FTELEPORT, "Teleport" ) // == 227
1514 DEFINE_FUNCTION( FGIVESTRENGTHTOTARGET, "GiveStrengthToTarget" ) // == 228
1515 DEFINE_FUNCTION( FGIVEWISDOMTOTARGET, "GiveWisdomToTarget" ) // == 229
1516 DEFINE_FUNCTION( FGIVEINTELLIGENCETOTARGET, "GiveIntelligenceToTarget" ) // == 230
1517 DEFINE_FUNCTION( FGIVEDEXTERITYTOTARGET, "GiveDexterityToTarget" ) // == 231
1518 DEFINE_FUNCTION( FGIVELIFETOTARGET, "GiveLifeToTarget" ) // == 232
1519 DEFINE_FUNCTION( FGIVEMANATOTARGET, "GiveManaToTarget" ) // == 233
1520 DEFINE_FUNCTION( FSHOWMAP, "ShowMap" ) // == 234
1521 DEFINE_FUNCTION( FSHOWYOUAREHERE, "ShowYouAreHere" ) // == 235
1522 DEFINE_FUNCTION( FSHOWBLIPXY, "ShowBlipXY" ) // == 236
1523 DEFINE_FUNCTION( FHEALTARGET, "HealTarget" ) // == 237
1524 DEFINE_FUNCTION( FPUMPTARGET, "PumpTarget" ) // == 238
1525 DEFINE_FUNCTION( FCOSTAMMO, "CostAmmo" ) // == 239
1526 DEFINE_FUNCTION( FMAKESIMILARNAMESKNOWN, "MakeSimilarNamesKnown" ) // == 240
1527 DEFINE_FUNCTION( FSPAWNATTACHEDHOLDERPARTICLE, "SpawnAttachedHolderParticle" ) // == 241
1528 DEFINE_FUNCTION( FSETTARGETRELOADTIME, "SetTargetReloadTime" ) // == 242
1529 DEFINE_FUNCTION( FSETFOGLEVEL, "SetFogLevel" ) // == 243
1530 DEFINE_FUNCTION( FGETFOGLEVEL, "GetFogLevel" ) // == 244
1531 DEFINE_FUNCTION( FSETFOGTAD, "SetFogTAD" ) // == 245
1532 DEFINE_FUNCTION( FSETFOGBOTTOMLEVEL, "SetFogBottomLevel" ) // == 246
1533 DEFINE_FUNCTION( FGETFOGBOTTOMLEVEL, "GetFogBottomLevel" ) // == 247
1534 DEFINE_FUNCTION( FCORRECTACTIONFORHAND, "CorrectActionForHand" ) // == 248
1535 DEFINE_FUNCTION( FIFTARGETISMOUNTED, "IfTargetIsMounted" ) // == 249
1536 DEFINE_FUNCTION( FSPARKLEICON, "SparkleIcon" ) // == 250
1537 DEFINE_FUNCTION( FUNSPARKLEICON, "UnsparkleIcon" ) // == 251
1538 DEFINE_FUNCTION( FGETTILEXY, "GetTileXY" ) // == 252
1539 DEFINE_FUNCTION( FSETTILEXY, "SetTileXY" ) // == 253
1540 DEFINE_FUNCTION( FSETSHADOWSIZE, "SetShadowSize" ) // == 254
1541 DEFINE_FUNCTION( FORDERTARGET, "OrderTarget" ) // == 255
1542 DEFINE_FUNCTION( FSETTARGETTOWHOEVERISINPASSAGE, "SetTargetToWhoeverIsInPassage" ) // == 256
1543 DEFINE_FUNCTION( FIFCHARACTERWASABOOK, "IfCharacterWasABook" ) // == 257
1544 DEFINE_FUNCTION( FSETENCHANTBOOSTVALUES, "SetEnchantBoostValues" ) // == 258
1545 DEFINE_FUNCTION( FSPAWNCHARACTERXYZ, "SpawnCharacterXYZ" ) // == 259
1546 DEFINE_FUNCTION( FSPAWNEXACTCHARACTERXYZ, "SpawnExactCharacterXYZ" ) // == 260
1547 DEFINE_FUNCTION( FCHANGETARGETCLASS, "ChangeTargetClass" ) // == 261
1548 DEFINE_FUNCTION( FPLAYFULLSOUND, "PlayFullSound" ) // == 262
1549 DEFINE_FUNCTION( FSPAWNEXACTCHASEPARTICLE, "SpawnExactChaseParticle" ) // == 263
1550 DEFINE_FUNCTION( FCREATEORDER, "CreateOrder" ) // == 264
1551 DEFINE_FUNCTION( FORDERSPECIALID, "OrderSpecialID" ) // == 265
1552 DEFINE_FUNCTION( FUNKURSETARGETINVENTORY, "UnkurseTargetInventory" ) // == 266
1553 DEFINE_FUNCTION( FIFTARGETISSNEAKING, "IfTargetIsSneaking" ) // == 267
1554 DEFINE_FUNCTION( FDROPITEMS, "DropItems" ) // == 268
1555 DEFINE_FUNCTION( FRESPAWNTARGET, "RespawnTarget" ) // == 269
1556 DEFINE_FUNCTION( FTARGETDOACTIONSETFRAME, "TargetDoActionSetFrame" ) // == 270
1557 DEFINE_FUNCTION( FIFTARGETCANSEEINVISIBLE, "IfTargetCanSeeInvisible" ) // == 271
1558 DEFINE_FUNCTION( FSETTARGETTONEARESTBLAHID, "SetTargetToNearestBlahID" ) // == 272
1559 DEFINE_FUNCTION( FSETTARGETTONEARESTENEMY, "SetTargetToNearestEnemy" ) // == 273
1560 DEFINE_FUNCTION( FSETTARGETTONEARESTFRIEND, "SetTargetToNearestFriend" ) // == 274
1561 DEFINE_FUNCTION( FSETTARGETTONEARESTLIFEFORM, "SetTargetToNearestLifeform" ) // == 275
1562 DEFINE_FUNCTION( FFLASHPASSAGE, "FlashPassage" ) // == 276
1563 DEFINE_FUNCTION( FFINDTILEINPASSAGE, "FindTileInPassage" ) // == 277
1564 DEFINE_FUNCTION( FIFHELDINLEFTHAND, "IfHeldInLeftHand" ) // == 278
1565 DEFINE_FUNCTION( FNOTANITEM, "NotAnItem" ) // == 279
1566 DEFINE_FUNCTION( FSETCHILDAMMO, "SetChildAmmo" ) // == 280
1567 DEFINE_FUNCTION( FIFHITVULNERABLE, "IfHitVulnerable" ) // == 281
1568 DEFINE_FUNCTION( FIFTARGETISFLYING, "IfTargetIsFlying" ) // == 282
1569 DEFINE_FUNCTION( FIDENTIFYTARGET, "IdentifyTarget" ) // == 283
1570 DEFINE_FUNCTION( FBEATMODULE, "BeatModule" ) // == 284
1571 DEFINE_FUNCTION( FENDMODULE, "EndModule" ) // == 285
1572 DEFINE_FUNCTION( FDISABLEEXPORT, "DisableExport" ) // == 286
1573 DEFINE_FUNCTION( FENABLEEXPORT, "EnableExport" ) // == 287
1574 DEFINE_FUNCTION( FGETTARGETSTATE, "GetTargetState" ) // == 288
1575 DEFINE_FUNCTION( FIFEQUIPPED, "IfEquipped" ) // == 289
1576 DEFINE_FUNCTION( FDROPTARGETMONEY, "DropTargetMoney" ) // == 290
1577 DEFINE_FUNCTION( FGETTARGETCONTENT, "GetTargetContent" ) // == 291
1578 DEFINE_FUNCTION( FDROPTARGETKEYS, "DropTargetKeys" ) // == 292
1579 DEFINE_FUNCTION( FJOINTEAM, "JoinTeam" ) // == 293
1580 DEFINE_FUNCTION( FTARGETJOINTEAM, "TargetJoinTeam" ) // == 294
1581 DEFINE_FUNCTION( FCLEARMUSICPASSAGE, "ClearMusicPassage" ) // == 295
1582 DEFINE_FUNCTION( FCLEARENDMESSAGE, "ClearEndMessage" ) // == 296
1583 DEFINE_FUNCTION( FADDENDMESSAGE, "AddEndMessage" ) // == 297
1584 DEFINE_FUNCTION( FPLAYMUSIC, "PlayMusic" ) // == 298
1585 DEFINE_FUNCTION( FSETMUSICPASSAGE, "SetMusicPassage" ) // == 299
1586 DEFINE_FUNCTION( FMAKECRUSHINVALID, "MakeCrushInvalid" ) // == 300
1587 DEFINE_FUNCTION( FSTOPMUSIC, "StopMusic" ) // == 301
1588 DEFINE_FUNCTION( FFLASHVARIABLE, "FlashVariable" ) // == 302
1589 DEFINE_FUNCTION( FACCELERATEUP, "AccelerateUp" ) // == 303
1590 DEFINE_FUNCTION( FFLASHVARIABLEHEIGHT, "FlashVariableHeight" ) // == 304
1591 DEFINE_FUNCTION( FSETDAMAGETIME, "SetDamageTime" ) // == 305
1592 DEFINE_FUNCTION( FIFSTATEIS8, "IfStateIs8" ) // == 306
1593 DEFINE_FUNCTION( FIFSTATEIS9, "IfStateIs9" ) // == 307
1594 DEFINE_FUNCTION( FIFSTATEIS10, "IfStateIs10" ) // == 308
1595 DEFINE_FUNCTION( FIFSTATEIS11, "IfStateIs11" ) // == 309
1596 DEFINE_FUNCTION( FIFSTATEIS12, "IfStateIs12" ) // == 310
1597 DEFINE_FUNCTION( FIFSTATEIS13, "IfStateIs13" ) // == 311
1598 DEFINE_FUNCTION( FIFSTATEIS14, "IfStateIs14" ) // == 312
1599 DEFINE_FUNCTION( FIFSTATEIS15, "IfStateIs15" ) // == 313
1600 DEFINE_FUNCTION( FIFTARGETISAMOUNT, "IfTargetIsAMount" ) // == 314
1601 DEFINE_FUNCTION( FIFTARGETISAPLATFORM, "IfTargetIsAPlatform" ) // == 315
1602 DEFINE_FUNCTION( FADDSTAT, "AddStat" ) // == 316
1603 DEFINE_FUNCTION( FDISENCHANTTARGET, "DisenchantTarget" ) // == 317
1604 DEFINE_FUNCTION( FDISENCHANTALL, "DisenchantAll" ) // == 318
1605 DEFINE_FUNCTION( FSETVOLUMENEARESTTEAMMATE, "SetVolumeNearestTeammate" ) // == 319
1606 DEFINE_FUNCTION( FADDSHOPPASSAGE, "AddShopPassage" ) // == 320
1607 DEFINE_FUNCTION( FTARGETPAYFORARMOR, "TargetPayForArmor" ) // == 321
1608 DEFINE_FUNCTION( FJOINEVILTEAM, "JoinEvilTeam" ) // == 322
1609 DEFINE_FUNCTION( FJOINNULLTEAM, "JoinNullTeam" ) // == 323
1610 DEFINE_FUNCTION( FJOINGOODTEAM, "JoinGoodTeam" ) // == 324
1611 DEFINE_FUNCTION( FPITSKILL, "PitsKill" ) // == 325
1612 DEFINE_FUNCTION( FSETTARGETTOPASSAGEID, "SetTargetToPassageID" ) // == 326
1613 DEFINE_FUNCTION( FMAKENAMEUNKNOWN, "MakeNameUnknown" ) // == 327
1614 DEFINE_FUNCTION( FSPAWNEXACTPARTICLEENDSPAWN, "SpawnExactParticleEndSpawn" ) // == 328
1615 DEFINE_FUNCTION( FSPAWNPOOFSPEEDSPACINGDAMAGE, "SpawnPoofSpeedSpacingDamage" ) // == 329
1616 DEFINE_FUNCTION( FGIVEEXPERIENCETOGOODTEAM, "GiveExperienceToGoodTeam" ) // == 330
1617 DEFINE_FUNCTION( FDONOTHING, "DoNothing" ) // == 331
1618 DEFINE_FUNCTION( FGROGTARGET, "DazeTarget" ) // == 332
1619 DEFINE_FUNCTION( FDAZETARGET, "GrogTarget" ) // == 333
1620 DEFINE_FUNCTION( FENABLERESPAWN, "EnableRespawn" ) // == 334
1621 DEFINE_FUNCTION( FDISABLERESPAWN, "DisableRespawn" ) // == 335
1622 DEFINE_FUNCTION( FDISPELTARGETENCHANTID, "DispelTargetEnchantID" ) // == 336
1623 DEFINE_FUNCTION( FIFHOLDERBLOCKED, "IfHolderBlocked" ) // == 337
1624 DEFINE_FUNCTION( FGETSKILLLEVEL, "GetTargetShieldProfiency" ) // == 338
1625 DEFINE_FUNCTION( FIFTARGETHASNOTFULLMANA, "IfTargetHasNotFullMana" ) // == 339
1626 DEFINE_FUNCTION( FENABLELISTENSKILL, "EnableListenSkill" ) // == 340
1627 DEFINE_FUNCTION( FSETTARGETTOLASTITEMUSED, "SetTargetToLastItemUsed" ) // == 341
1628 DEFINE_FUNCTION( FFOLLOWLINK, "FollowLink" ) // == 342 Scripted AI functions ( v1.00)
1629 DEFINE_FUNCTION( FIFOPERATORISLINUX, "IfOperatorIsLinux" ) // == 343
1630 DEFINE_FUNCTION( FIFTARGETISAWEAPON, "IfTargetIsAWeapon" ) // == 344
1631 DEFINE_FUNCTION( FIFSOMEONEISSTEALING, "IfSomeoneIsStealing" ) // == 345
1632 DEFINE_FUNCTION( FIFTARGETISASPELL, "IfTargetIsASpell" ) // == 346
1633 DEFINE_FUNCTION( FIFBACKSTABBED, "IfBackstabbed" ) // == 347
1634 DEFINE_FUNCTION( FGETTARGETDAMAGETYPE, "GetTargetDamageType" ) // == 348
1635 DEFINE_FUNCTION( FADDQUEST, "AddTargetQuest" ) // == 349
1636 DEFINE_FUNCTION( FBEATQUESTALLPLAYERS, "BeatQuestAllPlayers" ) // == 350
1637 DEFINE_FUNCTION( FIFTARGETHASQUEST, "IfTargetHasQuest" ) // == 351
1638 DEFINE_FUNCTION( FSETQUESTLEVEL, "SetTargetQuestLevel" ) // == 352
1639 DEFINE_FUNCTION( FADDQUESTALLPLAYERS, "AddQuestAllPlayers" ) // == 353
1640 DEFINE_FUNCTION( FADDBLIPALLENEMIES, "AddBlipAllEnemies" ) // == 354
1641 DEFINE_FUNCTION( FPITSFALL, "PitsFall" ) // == 355
1642 DEFINE_FUNCTION( FIFTARGETISOWNER, "IfTargetIsOwner" ) // == 356
1643 DEFINE_FUNCTION( FSETSPEECH, "SetSpeech" ) // == 357
1644 DEFINE_FUNCTION( FSETMOVESPEECH, "FSETMOVESPEECH" ) // == 358
1645 DEFINE_FUNCTION( FSETSECONDMOVESPEECH, "FSETSECONDMOVESPEECH" ) // == 359
1646 DEFINE_FUNCTION( FSETATTACKSPEECH, "FSETATTACKSPEECH" ) // == 360
1647 DEFINE_FUNCTION( FSETASSISTSPEECH, "FSETASSISTSPEECH" ) // == 361
1648 DEFINE_FUNCTION( FSETTERRAINSPEECH, "FSETTERRAINSPEECH" ) // == 362
1649 DEFINE_FUNCTION( FSETSELECTSPEECH, "FSETSELECTSPEECH" ) // == 363
1650 DEFINE_FUNCTION( FTAKEPICTURE, "TakePicture" ) // == 364
1651 DEFINE_FUNCTION( FIFOPERATORISMACINTOSH, "IfOperatorIsMacintosh" ) // == 365
1652 DEFINE_FUNCTION( FIFMODULEHASIDSZ, "IfModuleHasIDSZ" ) // == 366
1653 DEFINE_FUNCTION( FMORPHTOTARGET, "MorphToTarget" ) // == 367
1654 DEFINE_FUNCTION( FGIVEMANAFLOWTOTARGET, "GiveManaFlowToTarget" ) // == 368
1655 DEFINE_FUNCTION( FGIVEMANARETURNTOTARGET, "GiveManaReturnToTarget" ) // == 369
1656 DEFINE_FUNCTION( FSETMONEY, "SetMoney" ) // == 370
1657 DEFINE_FUNCTION( FIFTARGETCANSEEKURSES, "IfTargetCanSeeKurses" ) // == 371
1658 DEFINE_FUNCTION( FSPAWNATTACHEDCHARACTER, "SpawnAttachedCharacter" ) // == 372
1659 DEFINE_FUNCTION( FKURSETARGET, "KurseTarget" ) // == 373
1660 DEFINE_FUNCTION( FSETCHILDCONTENT, "SetChildContent" ) // == 374
1661 DEFINE_FUNCTION( FSETTARGETTOCHILD, "SetTargetToChild" ) // == 375
1662 DEFINE_FUNCTION( FSETDAMAGETHRESHOLD, "SetDamageThreshold" ) //
1663
1664 DEFINE_CONSTANT(, "BLAHDEAD" ) //
1665 DEFINE_CONSTANT(, "BLAHENEMIES" ) //
1666 DEFINE_CONSTANT(, "BLAHFRIENDS" ) //
1667 DEFINE_CONSTANT(, "BLAHITEMS" ) //
1668 DEFINE_CONSTANT(, "BLAHINVERTID" ) //
1669 DEFINE_CONSTANT(, "BLAHPLAYERS" ) //
1670
1671 DEFINE_CONSTANT(, "STATEPARRY" ) //
1672 DEFINE_CONSTANT(, "STATEWANDER" ) //
1673 DEFINE_CONSTANT(, "STATEGUARD" ) //
1674 DEFINE_CONSTANT(, "STATEFOLLOW" ) //
1675 DEFINE_CONSTANT(, "STATESURROUND" ) //
1676 DEFINE_CONSTANT(, "STATERETREAT" ) //
1677 DEFINE_CONSTANT(, "STATECHARGE" ) //
1678 DEFINE_CONSTANT(, "STATECOMBAT" ) //
1679
1680 DEFINE_CONSTANT( GRIP_ONLY, "GRIPONLY" ) //
1681 DEFINE_CONSTANT( GRIP_LEFT, "GRIPLEFT" ) //
1682 DEFINE_CONSTANT( GRIP_RIGHT, "GRIPRIGHT" ) //
1683 DEFINE_CONSTANT( GRIP_ORIGIN, "SPAWNORIGIN" ) //
1684 DEFINE_CONSTANT( GRIP_LAST, "SPAWNLAST" ) //
1685
1686 DEFINE_CONSTANT( LATCHBUTTON_LEFT, "LATCHLEFT" ) //
1687 DEFINE_CONSTANT( LATCHBUTTON_RIGHT, "LATCHRIGHT" ) //
1688 DEFINE_CONSTANT( LATCHBUTTON_JUMP, "LATCHJUMP" ) //
1689 DEFINE_CONSTANT( LATCHBUTTON_ALTLEFT, "LATCHALTLEFT" ) //
1690 DEFINE_CONSTANT( LATCHBUTTON_ALTRIGHT, "LATCHALTRIGHT" ) //
1691 DEFINE_CONSTANT( LATCHBUTTON_PACKLEFT, "LATCHPACKLEFT" ) //
1692 DEFINE_CONSTANT( LATCHBUTTON_PACKRIGHT, "LATCHPACKRIGHT" ) //
1693
1694 DEFINE_CONSTANT( DAMAGE_SLASH, "DAMAGESLASH" ) //
1695 DEFINE_CONSTANT( DAMAGE_CRUSH, "DAMAGECRUSH" ) //
1696 DEFINE_CONSTANT( DAMAGE_POKE , "DAMAGEPOKE" ) //
1697 DEFINE_CONSTANT( DAMAGE_HOLY , "DAMAGEHOLY" ) //
1698 DEFINE_CONSTANT( DAMAGE_EVIL , "DAMAGEEVIL" ) //
1699 DEFINE_CONSTANT( DAMAGE_FIRE , "DAMAGEFIRE" ) //
1700 DEFINE_CONSTANT( DAMAGE_ICE , "DAMAGEICE" ) //
1701 DEFINE_CONSTANT( DAMAGE_ZAP , "DAMAGEZAP" ) //
1702
1703 DEFINE_CONSTANT( ACTION_DA, "ACTIONDA" ) //
1704 DEFINE_CONSTANT( ACTION_DB, "ACTIONDB" ) //
1705 DEFINE_CONSTANT( ACTION_DC, "ACTIONDC" ) //
1706 DEFINE_CONSTANT( ACTION_DD, "ACTIONDD" ) //
1707 DEFINE_CONSTANT( ACTION_UA, "ACTIONUA" ) //
1708 DEFINE_CONSTANT( ACTION_UB, "ACTIONUB" ) //
1709 DEFINE_CONSTANT( ACTION_UC, "ACTIONUC" ) //
1710 DEFINE_CONSTANT( ACTION_UD, "ACTIONUD" ) //
1711 DEFINE_CONSTANT( ACTION_TA, "ACTIONTA" ) //
1712 DEFINE_CONSTANT( ACTION_TB, "ACTIONTB" ) //
1713 DEFINE_CONSTANT( ACTION_TC, "ACTIONTC" ) //
1714 DEFINE_CONSTANT( ACTION_TD, "ACTIONTD" ) //
1715 DEFINE_CONSTANT( ACTION_CA, "ACTIONCA" ) //
1716 DEFINE_CONSTANT( ACTION_CB, "ACTIONCB" ) //
1717 DEFINE_CONSTANT( ACTION_CC, "ACTIONCC" ) //
1718 DEFINE_CONSTANT( ACTION_CD, "ACTIONCD" ) //
1719 DEFINE_CONSTANT( ACTION_SA, "ACTIONSA" ) //
1720 DEFINE_CONSTANT( ACTION_SB, "ACTIONSB" ) //
1721 DEFINE_CONSTANT( ACTION_SC, "ACTIONSC" ) //
1722 DEFINE_CONSTANT( ACTION_SD, "ACTIONSD" ) //
1723 DEFINE_CONSTANT( ACTION_BA, "ACTIONBA" ) //
1724 DEFINE_CONSTANT( ACTION_BB, "ACTIONBB" ) //
1725 DEFINE_CONSTANT( ACTION_BC, "ACTIONBC" ) //
1726 DEFINE_CONSTANT( ACTION_BD, "ACTIONBD" ) //
1727 DEFINE_CONSTANT( ACTION_LA, "ACTIONLA" ) //
1728 DEFINE_CONSTANT( ACTION_LB, "ACTIONLB" ) //
1729 DEFINE_CONSTANT( ACTION_LC, "ACTIONLC" ) //
1730 DEFINE_CONSTANT( ACTION_LD, "ACTIONLD" ) //
1731 DEFINE_CONSTANT( ACTION_XA, "ACTIONXA" ) //
1732 DEFINE_CONSTANT( ACTION_XB, "ACTIONXB" ) //
1733 DEFINE_CONSTANT( ACTION_XC, "ACTIONXC" ) //
1734 DEFINE_CONSTANT( ACTION_XD, "ACTIONXD" ) //
1735 DEFINE_CONSTANT( ACTION_FA, "ACTIONFA" ) //
1736 DEFINE_CONSTANT( ACTION_FB, "ACTIONFB" ) //
1737 DEFINE_CONSTANT( ACTION_FC, "ACTIONFC" ) //
1738 DEFINE_CONSTANT( ACTION_FD, "ACTIONFD" ) //
1739 DEFINE_CONSTANT( ACTION_PA, "ACTIONPA" ) //
1740 DEFINE_CONSTANT( ACTION_PB, "ACTIONPB" ) //
1741 DEFINE_CONSTANT( ACTION_PC, "ACTIONPC" ) //
1742 DEFINE_CONSTANT( ACTION_PD, "ACTIONPD" ) //
1743 DEFINE_CONSTANT( ACTION_EA, "ACTIONEA" ) //
1744 DEFINE_CONSTANT( ACTION_EB, "ACTIONEB" ) //
1745 DEFINE_CONSTANT( ACTION_RA, "ACTIONRA" ) //
1746 DEFINE_CONSTANT( ACTION_ZA, "ACTIONZA" ) //
1747 DEFINE_CONSTANT( ACTION_ZB, "ACTIONZB" ) //
1748 DEFINE_CONSTANT( ACTION_ZC, "ACTIONZC" ) //
1749 DEFINE_CONSTANT( ACTION_ZD, "ACTIONZD" ) //
1750 DEFINE_CONSTANT( ACTION_WA, "ACTIONWA" ) //
1751 DEFINE_CONSTANT( ACTION_WB, "ACTIONWB" ) //
1752 DEFINE_CONSTANT( ACTION_WC, "ACTIONWC" ) //
1753 DEFINE_CONSTANT( ACTION_WD, "ACTIONWD" ) //
1754 DEFINE_CONSTANT( ACTION_JA, "ACTIONJA" ) //
1755 DEFINE_CONSTANT( ACTION_JB, "ACTIONJB" ) //
1756 DEFINE_CONSTANT( ACTION_JC, "ACTIONJC" ) //
1757 DEFINE_CONSTANT( ACTION_HA, "ACTIONHA" ) //
1758 DEFINE_CONSTANT( ACTION_HB, "ACTIONHB" ) //
1759 DEFINE_CONSTANT( ACTION_HC, "ACTIONHC" ) //
1760 DEFINE_CONSTANT( ACTION_HD, "ACTIONHD" ) //
1761 DEFINE_CONSTANT( ACTION_KA, "ACTIONKA" ) //
1762 DEFINE_CONSTANT( ACTION_KB, "ACTIONKB" ) //
1763 DEFINE_CONSTANT( ACTION_KC, "ACTIONKC" ) //
1764 DEFINE_CONSTANT( ACTION_KD, "ACTIONKD" ) //
1765 DEFINE_CONSTANT( ACTION_MA, "ACTIONMA" ) //
1766 DEFINE_CONSTANT( ACTION_MB, "ACTIONMB" ) //
1767 DEFINE_CONSTANT( ACTION_MC, "ACTIONMC" ) //
1768 DEFINE_CONSTANT( ACTION_MD, "ACTIONMD" ) //
1769 DEFINE_CONSTANT( ACTION_ME, "ACTIONME" ) //
1770 DEFINE_CONSTANT( ACTION_MF, "ACTIONMF" ) //
1771 DEFINE_CONSTANT( ACTION_MG, "ACTIONMG" ) //
1772 DEFINE_CONSTANT( ACTION_MH, "ACTIONMH" ) //
1773 DEFINE_CONSTANT( ACTION_MI, "ACTIONMI" ) //
1774 DEFINE_CONSTANT( ACTION_MJ, "ACTIONMJ" ) //
1775 DEFINE_CONSTANT( ACTION_MK, "ACTIONMK" ) //
1776 DEFINE_CONSTANT( ACTION_ML, "ACTIONML" ) //
1777 DEFINE_CONSTANT( ACTION_MM, "ACTIONMM" ) //
1778 DEFINE_CONSTANT( ACTION_MN, "ACTIONMN" ) //
1779
1780 DEFINE_CONSTANT( XP_FINDSECRET, "EXPSECRET" ) //
1781 DEFINE_CONSTANT( XP_WINQUEST, "EXPQUEST" ) //
1782 DEFINE_CONSTANT( XP_USEDUNKOWN, "EXPDARE" ) //
1783 DEFINE_CONSTANT( XP_KILLENEMY, "EXPKILL" ) //
1784 DEFINE_CONSTANT( XP_KILLSLEEPY, "EXPMURDER" ) //
1785 DEFINE_CONSTANT( XP_KILLHATED, "EXPREVENGE" ) //
1786 DEFINE_CONSTANT( XP_TEAMKILL, "EXPTEAMWORK" ) //
1787 DEFINE_CONSTANT( XP_TALKGOOD, "EXPROLEPLAY" ) //
1788
1789 DEFINE_CONSTANT(, "MESSAGEDEATH" ) //
1790 DEFINE_CONSTANT(, "MESSAGEHATE" ) //
1791 DEFINE_CONSTANT(, "MESSAGEOUCH" ) //
1792 DEFINE_CONSTANT(, "MESSAGEFRAG" ) //
1793 DEFINE_CONSTANT(, "MESSAGEACCIDENT" ) //
1794 DEFINE_CONSTANT(, "MESSAGECOSTUME" ) //
1795
1796 DEFINE_CONSTANT(, "ORDERMOVE" ) //
1797 DEFINE_CONSTANT(, "ORDERATTACK" ) //
1798 DEFINE_CONSTANT(, "ORDERASSIST" ) //
1799 DEFINE_CONSTANT(, "ORDERSTAND" ) //
1800 DEFINE_CONSTANT(, "ORDERTERRAIN" ) //
1801
1802 DEFINE_CONSTANT(, "WHITE" ) //
1803 DEFINE_CONSTANT(, "RED" ) //
1804 DEFINE_CONSTANT(, "YELLOW" ) //
1805 DEFINE_CONSTANT(, "GREEN" ) //
1806 DEFINE_CONSTANT(, "BLUE" ) //
1807 DEFINE_CONSTANT(, "PURPLE" ) //
1808
1809 DEFINE_CONSTANT(, "FXNOREFLECT" ) //
1810 DEFINE_CONSTANT(, "FXDRAWREFLECT" ) //
1811 DEFINE_CONSTANT(, "FXANIM" ) //
1812 DEFINE_CONSTANT(, "FXWATER" ) //
1813 DEFINE_CONSTANT(, "FXBARRIER" ) //
1814 DEFINE_CONSTANT(, "FXIMPASS" ) //
1815 DEFINE_CONSTANT(, "FXDAMAGE" ) //
1816 DEFINE_CONSTANT(, "FXSLIPPY" ) //
1817
1818 DEFINE_CONSTANT(, "MOVEMELEE" ) //
1819 DEFINE_CONSTANT(, "MOVERANGED" ) //
1820 DEFINE_CONSTANT(, "MOVEDISTANCE" ) //
1821 DEFINE_CONSTANT(, "MOVERETREAT" ) //
1822 DEFINE_CONSTANT(, "MOVECHARGE" ) //
1823
1824 DEFINE_CONSTANT(, "TEAMA" ) //
1825 DEFINE_CONSTANT(, "TEAMB" ) //
1826 DEFINE_CONSTANT(, "TEAMC" ) //
1827 DEFINE_CONSTANT(, "TEAMD" ) //
1828 DEFINE_CONSTANT(, "TEAME" ) //
1829 DEFINE_CONSTANT(, "TEAMF" ) //
1830 DEFINE_CONSTANT(, "TEAMG" ) //
1831 DEFINE_CONSTANT(, "TEAMH" ) //
1832 DEFINE_CONSTANT(, "TEAMI" ) //
1833 DEFINE_CONSTANT(, "TEAMJ" ) //
1834 DEFINE_CONSTANT(, "TEAMK" ) //
1835 DEFINE_CONSTANT(, "TEAML" ) //
1836 DEFINE_CONSTANT(, "TEAMM" ) //
1837 DEFINE_CONSTANT(, "TEAMN" ) //
1838 DEFINE_CONSTANT(, "TEAMO" ) //
1839 DEFINE_CONSTANT(, "TEAMP" ) //
1840 DEFINE_CONSTANT(, "TEAMQ" ) //
1841 DEFINE_CONSTANT(, "TEAMR" ) //
1842 DEFINE_CONSTANT(, "TEAMS" ) //
1843 DEFINE_CONSTANT(, "TEAMT" ) //
1844 DEFINE_CONSTANT(, "TEAMV" ) //
1845 DEFINE_CONSTANT(, "TEAMW" ) //
1846 DEFINE_CONSTANT(, "TEAMX" ) //
1847 DEFINE_CONSTANT(, "TEAMY" ) //
1848 DEFINE_CONSTANT(, "TEAMZ" ) //
1849
1850 DEFINE_CONSTANT(, "INVENTORY" ) //
1851 DEFINE_CONSTANT(, "LEFT" ) //
1852 DEFINE_CONSTANT(, "RIGHT" ) //
1853
1854 DEFINE_CONSTANT(, "EASY" ) //
1855 DEFINE_CONSTANT(, "NORMAL" ) //
1856 DEFINE_CONSTANT(, "HARD" ) //
1857
1858 DEFINE_VARIABLE( VARTMPX = 0, "tmpx" ) // == 0
1859 DEFINE_VARIABLE( VARTMPY, "tmpy" ) // == 1
1860 DEFINE_VARIABLE( VARTMPDISTANCE, "tmpdistance" ) // == 2
1861 DEFINE_VARIABLE( VARTMPTURN, "tmpturn" ) // == 3
1862 DEFINE_VARIABLE( VARTMPARGUMENT, "tmpargument" ) // == 4
1863 DEFINE_VARIABLE( VARRAND, "rand" ) // == 5
1864 DEFINE_VARIABLE( VARSELFX, "selfx" ) // == 6
1865 DEFINE_VARIABLE( VARSELFY, "selfy" ) // == 7
1866 DEFINE_VARIABLE( VARSELFTURN, "selfturn" ) // == 8
1867 DEFINE_VARIABLE( VARSELFCOUNTER, "selfcounter" ) // == 9
1868 DEFINE_VARIABLE( VARSELFORDER, "selforder" ) // == 10
1869 DEFINE_VARIABLE( VARSELFMORALE, "selfmorale" ) // == 11
1870 DEFINE_VARIABLE( VARSELFLIFE, "selflife" ) // == 12
1871 DEFINE_VARIABLE( VARTARGETX, "targetx" ) // == 13
1872 DEFINE_VARIABLE( VARTARGETY, "targety" ) // == 14
1873 DEFINE_VARIABLE( VARTARGETDISTANCE, "targetdistance" ) // == 15
1874 DEFINE_VARIABLE( VARTARGETTURN, "targetturn" ) // == 16
1875 DEFINE_VARIABLE( VARLEADERX, "leaderx" ) // == 17
1876 DEFINE_VARIABLE( VARLEADERY, "leadery" ) // == 18
1877 DEFINE_VARIABLE( VARLEADERDISTANCE, "leaderdistance" ) // == 19
1878 DEFINE_VARIABLE( VARLEADERTURN, "leaderturn" ) // == 20
1879 DEFINE_VARIABLE( VARGOTOX, "gotox" ) // == 21
1880 DEFINE_VARIABLE( VARGOTOY, "gotoy" ) // == 22
1881 DEFINE_VARIABLE( VARGOTODISTANCE, "gotodistance" ) // == 23
1882 DEFINE_VARIABLE( VARTARGETTURNTO, "targetturnto" ) // == 24
1883 DEFINE_VARIABLE( VARPASSAGE, "passage" ) // == 25
1884 DEFINE_VARIABLE( VARWEIGHT, "weight" ) // == 26
1885 DEFINE_VARIABLE( VARSELFALTITUDE, "selfaltitude" ) // == 27
1886 DEFINE_VARIABLE( VARSELFID, "selfid" ) // == 28
1887 DEFINE_VARIABLE( VARSELFHATEID, "selfhateid" ) // == 29
1888 DEFINE_VARIABLE( VARSELFMANA, "selfmana" ) // == 30
1889 DEFINE_VARIABLE( VARTARGETSTR, "targetstr" ) // == 31
1890 DEFINE_VARIABLE( VARTARGETWIS, "targetwis" ) // == 32
1891 DEFINE_VARIABLE( VARTARGETINT, "targetint" ) // == 33
1892 DEFINE_VARIABLE( VARTARGETDEX, "targetdex" ) // == 34
1893 DEFINE_VARIABLE( VARTARGETLIFE, "target_life" ) // == 35
1894 DEFINE_VARIABLE( VARTARGETMANA, "target_mana" ) // == 36
1895 DEFINE_VARIABLE( VARTARGETLEVEL, "targetlevel" ) // == 37
1896 DEFINE_VARIABLE( VARTARGETSPEEDX, "targetspeedx" ) // == 38
1897 DEFINE_VARIABLE( VARTARGETSPEEDY, "targetspeedy" ) // == 39
1898 DEFINE_VARIABLE( VARTARGETSPEEDZ, "targetspeedz" ) // == 40
1899 DEFINE_VARIABLE( VARSELFSPAWNX, "selfspawnx" ) // == 41
1900 DEFINE_VARIABLE( VARSELFSPAWNY, "selfspawny" ) // == 42
1901 DEFINE_VARIABLE( VARSELFSTATE, "selfstate" ) // == 43
1902 DEFINE_VARIABLE( VARSELFSTR, "selfstr" ) // == 44
1903 DEFINE_VARIABLE( VARSELFWIS, "selfwis" ) // == 45
1904 DEFINE_VARIABLE( VARSELFINT, "selfint" ) // == 46
1905 DEFINE_VARIABLE( VARSELFDEX, "selfdex" ) // == 47
1906 DEFINE_VARIABLE( VARSELFMANAFLOW, "selfmanaflow" ) // == 48
1907 DEFINE_VARIABLE( VARTARGETMANAFLOW, "targetmanaflow" ) // == 49
1908 DEFINE_VARIABLE( VARSELFATTACHED, "selfattached" ) // == 50
1909 DEFINE_VARIABLE( VARSWINGTURN, "swingturn" ) // == 51
1910 DEFINE_VARIABLE( VARXYDISTANCE, "xydistance" ) // == 52
1911 DEFINE_VARIABLE( VARSELFZ, "selfz" ) // == 53
1912 DEFINE_VARIABLE( VARTARGETALTITUDE, "targetaltitude" ) // == 54
1913 DEFINE_VARIABLE( VARTARGETZ, "targetz" ) // == 55
1914 DEFINE_VARIABLE( VARSELFINDEX, "selfindex" ) // == 56
1915 DEFINE_VARIABLE( VAROWNERX, "ownerx" ) // == 57
1916 DEFINE_VARIABLE( VAROWNERY, "ownery" ) // == 58
1917 DEFINE_VARIABLE( VAROWNERTURN, "ownerturn" ) // == 59
1918 DEFINE_VARIABLE( VAROWNERDISTANCE, "ownerdistance" ) // == 60
1919 DEFINE_VARIABLE( VAROWNERTURNTO, "ownerturnto" ) // == 61
1920 DEFINE_VARIABLE( VARXYTURNTO, "xyturnto" ) // == 62
1921 DEFINE_VARIABLE( VARSELFMONEY, "selfmoney" ) // == 63
1922 DEFINE_VARIABLE( VARSELFACCEL, "selfaccel" ) // == 64
1923 DEFINE_VARIABLE( VARTARGETEXP, "targetexp" ) // == 65
1924 DEFINE_VARIABLE( VARSELFAMMO, "selfammo" ) // == 66
1925 DEFINE_VARIABLE( VARTARGETAMMO, "targetammo" ) // == 67
1926 DEFINE_VARIABLE( VARTARGETMONEY, "targetmoney" ) // == 68
1927 DEFINE_VARIABLE( VARTARGETTURNAWAY, "targetturnfrom" ) // == 69
1928 DEFINE_VARIABLE( VARSELFLEVEL, "selflevel" ) // == 70
1929 DEFINE_VARIABLE( VARTARGETRELOADTIME, "targetreloadtime" ) // == 71
1930 DEFINE_VARIABLE( VARSELFCONTENT, "selfcontent" ) // == 72
1931 DEFINE_VARIABLE( VARSPAWNDISTANCE, "spawndistance" ) // == 73
1932 DEFINE_VARIABLE( VARTARGETMAXLIFE, "targetmaxlife" ) // == 74
1933 DEFINE_VARIABLE( VARTARGETTEAM, "targetteam" ) // == 75
1934 DEFINE_VARIABLE( VARTARGETARMOR, "targetarmor" ) // == 76
1935 DEFINE_VARIABLE( VARDIFFICULTY // == 77, "difficulty" ) //
1936
1937 DEFINE_OPERATOR( OPADD, "+� ) //
1938 DEFINE_OPERATOR( OPSUB, "-" ) //
1939 DEFINE_OPERATOR( OPAND, "&" ) //
1940 DEFINE_OPERATOR( OPSHR, ">" ) //
1941 DEFINE_OPERATOR( OPSHL, "<" ) //
1942 DEFINE_OPERATOR( OPMUL, "*" ) //
1943 DEFINE_OPERATOR( OPDIV, "/" ) //
1944 DEFINE_OPERATOR( OPMOD "%" ) //
1945
1946 // Aliases
1947 DEFINE_FUNCTION( FIFATLASTWAYPOINT, IfPutAway )
1948 DEFINE_FUNCTION( FSETTARGETTOWHOEVERATTACKED, SetTargetToWhoeverHealed )
1949 DEFINE_FUNCTION( FIFGRABBED, IfMounted )
1950 DEFINE_FUNCTION( FIFDROPPED, IfDismounted )
1951 DEFINE_FUNCTION( FIFXISLESSTHANY, IfYIsMoreThanX )
1952 DEFINE_FUNCTION( FIFSITTING, IfHeld )
1953 DEFINE_FUNCTION( FIFYISLESSTHANX, IfXIsMoreThanY )
1954 DEFINE_FUNCTION( FIFSTATEIS0, IfStateIsParry )
1955 DEFINE_FUNCTION( FIFSTATEIS1, IfStateIsWander )
1956 DEFINE_FUNCTION( FIFSTATEIS2, IfStateIsGuard )
1957 DEFINE_FUNCTION( FIFSTATEIS3, IfStateIsFollow )
1958 DEFINE_FUNCTION( FIFSTATEIS4, IfStateIsSurround )
1959 DEFINE_FUNCTION( FIFSTATEIS5, IfStateIsRetreat )
1960 DEFINE_FUNCTION( FIFSTATEIS6, IfStateIsCharge )
1961 DEFINE_FUNCTION( FIFSTATEIS7, IfStateIsCombat )
1962 DEFINE_FUNCTION( FIFXISEQUALTOY, IfYIsEqualToX )
1963 DEFINE_FUNCTION( FIFNOTPUTAWAY, IfNotTakenOut )
1964 */
1965
1966 //--------------------------------------------------------------------------------------------
1967 // int load_parsed_line( int read )
1968 // {
1969 // /// @details ZZ@> This function loads a line into the line buffer
1970 //
1971 // char cTmp;
1972
1973 // // Parse to start to maintain indentation
1974 // iLineSize = 0;
1975 // cTmp = cLoadBuffer[read];
1976
1977 // while ( CSTR_END != cTmp )
1978 // {
1979 // cLineBuffer[iLineSize] = cTmp; iLineSize++;
1980 // read++; cTmp = cLoadBuffer[read];
1981 // }
1982
1983 // cLineBuffer[iLineSize] = CSTR_END;
1984 // read++; // skip terminating zero for next call of load_parsed_line()
1985 // return read;
1986 // }
1987
1988 //--------------------------------------------------------------------------------------------
1989 // void parse_null_terminate_comments()
1990 // {
1991 // /// @details ZZ@> This function removes comments and endline codes, replacing
1992 // /// them with a 0
1993 //
1994 // int read, write;
1995
1996 // read = 0;
1997 // write = 0;
1998
1999 // while ( read < iLoadSize )
2000 // {
2001 // read = load_one_line( read );
2002
2003 // if ( iLineSize > 2 )
2004 // {
2005 // copy_one_line( write );
2006 // write += iLineSize;
2007 // }
2008 // }
2009 // }