1 #pragma once
2 
3 //********************************************************************************************
4 //*
5 //*    This file is part of Egoboo.
6 //*
7 //*    Egoboo is free software: you can redistribute it and/or modify it
8 //*    under the terms of the GNU General Public License as published by
9 //*    the Free Software Foundation, either version 3 of the License, or
10 //*    (at your option) any later version.
11 //*
12 //*    Egoboo is distributed in the hope that it will be useful, but
13 //*    WITHOUT ANY WARRANTY; without even the implied warranty of
14 //*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 //*    General Public License for more details.
16 //*
17 //*    You should have received a copy of the GNU General Public License
18 //*    along with Egoboo.  If not, see <http://www.gnu.org/licenses/>.
19 //*
20 //********************************************************************************************
21 
22 #include "egoboo_typedef.h"
23 
24 //--------------------------------------------------------------------------------------------
25 //--------------------------------------------------------------------------------------------
26 
27 /// AI stuff
28 #define AISMAXLOADSIZE      (1024*1024)            ///< For parsing AI scripts
29 #define AISMAXCOMPILESIZE   (MAX_AI*4096/4)        ///< For parsing AI scripts
30 #define MAXLINESIZE         1024
31 #define MAX_OPCODE             1024                ///< Number of lines in AICODES.TXT
32 #define MAXCODENAMESIZE     64
33 
34 #define FUNCTION_BIT 0x80000000
35 #define DATA_BITS    0x78000000
36 #define VALUE_BITS   0x07FFFFFF
37 #define END_VALUE    (FUNCTION_BIT | FEND)
38 
39 #define GET_DATA_BITS(X) ( ( (X) >>   27 ) &  0x0F )
40 #define SET_DATA_BITS(X) ( ( (X) &  0x0F ) <<   27 )
41 
42 //--------------------------------------------------------------------------------------------
43 //--------------------------------------------------------------------------------------------
44 
45 /// The data describing where a script is in AisCompiled_buffer
46 struct s_script_storage_info
47 {
48     STRING szName;
49     Uint32 iStartPosition;
50     Uint32 iEndPosition;
51 };
52 typedef struct s_script_storage_info script_storage_info_t;
53 
54 DECLARE_STATIC_ARY_TYPE( AisStorageAry, script_storage_info_t, MAX_AI );
55 DECLARE_EXTERN_STATIC_ARY( AisStorageAry, AisStorage );
56 
57 //--------------------------------------------------------------------------------------------
58 //--------------------------------------------------------------------------------------------
59 extern int    AisCompiled_offset;
60 extern Uint32 AisCompiled_buffer[AISMAXCOMPILESIZE];
61 
62 extern bool_t debug_scripts;
63 extern FILE * debug_script_file;
64 
65 /// temporary data describing a single egoscript opcode
66 struct s_opcode_data
67 {
68     Uint8  cType;
69     Uint32 iValue;
70     char   cName[MAXCODENAMESIZE];
71 };
72 typedef struct s_opcode_data opcode_data_t;
73 
74 DECLARE_STATIC_ARY_TYPE( OpListAry, opcode_data_t, MAX_OPCODE );
75 DECLARE_EXTERN_STATIC_ARY( OpListAry, OpList );
76 
77 //--------------------------------------------------------------------------------------------
78 //--------------------------------------------------------------------------------------------
79 
80 /// A list of all possible egoscript functions
81 enum e_script_functions
82 {
83     /// Scripted AI functions (v0.10)
84     FIFSPAWNED = 0,                      // == 0
85     FIFTIMEOUT,                          // == 1
86     FIFATWAYPOINT,                       // == 2
87     FIFATLASTWAYPOINT,                   // == 3
88     FIFATTACKED,                         // == 4
89     FIFBUMPED,                           // == 5
90     FIFORDERED,                          // == 6
91     FIFCALLEDFORHELP,                    // == 7
92     FSETCONTENT,                         // == 8
93     FIFKILLED,                           // == 9
94     FIFTARGETKILLED,                     // == 10
95     FCLEARWAYPOINTS,                     // == 11
96     FADDWAYPOINT,                        // == 12
97     FFINDPATH,                           // == 13
98     FCOMPASS,                            // == 14
99     FGETTARGETARMORPRICE,                // == 15
100     FSETTIME,                            // == 16
101     FGETCONTENT,                         // == 17
102     FJOINTARGETTEAM,                     // == 18
103     FSETTARGETTONEARBYENEMY,             // == 19
104     FSETTARGETTOTARGETLEFTHAND,          // == 20
105     FSETTARGETTOTARGETRIGHTHAND,         // == 21
106     FSETTARGETTOWHOEVERATTACKED,         // == 22
107     FSETTARGETTOWHOEVERBUMPED,           // == 23
108     FSETTARGETTOWHOEVERCALLEDFORHELP,    // == 24
109     FSETTARGETTOOLDTARGET,               // == 25
110     FSETTURNMODETOVELOCITY,              // == 26
111     FSETTURNMODETOWATCH,                 // == 27
112     FSETTURNMODETOSPIN,                  // == 28
113     FSETBUMPHEIGHT,                      // == 29
114     FIFTARGETHASID,                      // == 30
115     FIFTARGETHASITEMID,                  // == 31
116     FIFTARGETHOLDINGITEMID,              // == 32
117     FIFTARGETHASSKILLID,                 // == 33
118     FELSE,                               // == 34
119     FRUN,                                // == 35
120     FWALK,                               // == 36
121     FSNEAK,                              // == 37
122     FDOACTION,                           // == 38
123     FKEEPACTION,                         // == 39
124     FISSUEORDER,                         // == 40
125     FDROPWEAPONS,                        // == 41
126     FTARGETDOACTION,                     // == 42
127     FOPENPASSAGE,                        // == 43
128     FCLOSEPASSAGE,                       // == 44
129     FIFPASSAGEOPEN,                      // == 45
130     FGOPOOF,                             // == 46
131     FCOSTTARGETITEMID,                   // == 47
132     FDOACTIONOVERRIDE,                   // == 48
133     FIFHEALED,                           // == 49
134     FSENDMESSAGE,                        // == 50
135     FCALLFORHELP,                        // == 51
136     FADDIDSZ,                            // == 52
137     FEND,                                // == 53
138 
139     /// Scripted AI functions (v0.20)
140     FSETSTATE,                           // == 54
141     FGETSTATE,                           // == 55
142     FIFSTATEIS,                          // == 56
143 
144     /// Scripted AI functions (v0.30)
145     FIFTARGETCANOPENSTUFF,               // == 57
146     FIFGRABBED,                          // == 58
147     FIFDROPPED,                          // == 59
148     FSETTARGETTOWHOEVERISHOLDING,        // == 60
149     FDAMAGETARGET,                       // == 61
150     FIFXISLESSTHANY,                     // == 62
151 
152     /// Scripted AI functions (v0.40)
153     FSETWEATHERTIME,                     // == 63
154     FGETBUMPHEIGHT,                      // == 64
155     FIFREAFFIRMED,                       // == 65
156     FUNKEEPACTION,                       // == 66
157     FIFTARGETISONOTHERTEAM,              // == 67
158 
159     /// Scripted AI functions (v0.50)
160     FIFTARGETISONHATEDTEAM,              // == 68
161     FPRESSLATCHBUTTON,                   // == 69
162     FSETTARGETTOTARGETOFLEADER,          // == 70
163     FIFLEADERKILLED,                     // == 71
164     FBECOMELEADER,                       // == 72
165 
166     /// Scripted AI functions (v0.60)
167     FCHANGETARGETARMOR,                  // == 73
168     FGIVEMONEYTOTARGET,                  // == 74
169     FDROPKEYS,                           // == 75
170     FIFLEADERISALIVE,                    // == 76
171     FIFTARGETISOLDTARGET,                // == 77
172     FSETTARGETTOLEADER,                  // == 78
173     FSPAWNCHARACTER,                     // == 79
174     FRESPAWNCHARACTER,                   // == 80
175     FCHANGETILE,                         // == 81
176     FIFUSED,                             // == 82
177     FDROPMONEY,                          // == 83
178     FSETOLDTARGET,                       // == 84
179     FDETACHFROMHOLDER,                   // == 85
180     FIFTARGETHASVULNERABILITYID,         // == 86
181     FCLEANUP,                            // == 87
182     FIFCLEANEDUP,                        // == 88
183     FIFSITTING,                          // == 89
184     FIFTARGETISHURT,                     // == 90
185     FIFTARGETISAPLAYER,                  // == 91
186     FPLAYSOUND,                          // == 92
187     FSPAWNPARTICLE,                      // == 93
188     FIFTARGETISALIVE,                    // == 94
189     FSTOP,                               // == 95
190     FDISAFFIRMCHARACTER,                 // == 96
191     FREAFFIRMCHARACTER,                  // == 97
192     FIFTARGETISSELF,                     // == 98
193     FIFTARGETISMALE,                     // == 99
194     FIFTARGETISFEMALE,                   // == 100
195 
196     // Scripted AI functions (v0.70)
197     FSETTARGETTOSELF,                    // == 101
198     FSETTARGETTORIDER,                   // == 102
199     FGETATTACKTURN,                      // == 103
200     FGETDAMAGETYPE,                      // == 104
201     FBECOMESPELL,                        // == 105
202     FBECOMESPELLBOOK,                    // == 106
203     FIFSCOREDAHIT,                       // == 107
204     FIFDISAFFIRMED,                      // == 108
205     FTRANSLATEORDER,                     // == 109
206     FSETTARGETTOWHOEVERWASHIT,           // == 110
207     FSETTARGETTOWIDEENEMY,               // == 111
208     FIFCHANGED,                          // == 112
209     FIFINWATER,                          // == 113
210     FIFBORED,                            // == 114
211     FIFTOOMUCHBAGGAGE,                   // == 115
212     FIFGROGGED,                          // == 116
213     FIFDAZED,                            // == 117
214     FIFTARGETHASSPECIALID,               // == 118
215     FPRESSTARGETLATCHBUTTON,             // == 119
216     FIFINVISIBLE,                        // == 120
217     FIFARMORIS,                          // == 121
218     FGETTARGETGROGTIME,                  // == 122
219     FGETTARGETDAZETIME,                  // == 123
220     FSETDAMAGETYPE,                      // == 124
221     FSETWATERLEVEL,                      // == 125
222     FENCHANTTARGET,                      // == 126
223     FENCHANTCHILD,                       // == 127
224     FTELEPORTTARGET,                     // == 128
225     FGIVEEXPERIENCETOTARGET,             // == 129
226     FINCREASEAMMO,                       // == 130
227     FUNKURSETARGET,                      // == 131
228     FGIVEEXPERIENCETOTARGETTEAM,         // == 132
229     FIFUNARMED,                          // == 133
230     FRESTOCKTARGETAMMOIDALL,             // == 134
231     FRESTOCKTARGETAMMOIDFIRST,           // == 135
232     FFLASHTARGET,                        // == 136
233     FSETREDSHIFT,                        // == 137
234     FSETGREENSHIFT,                      // == 138
235     FSETBLUESHIFT,                       // == 139
236     FSETLIGHT,                           // == 140
237     FSETALPHA,                           // == 141
238     FIFHITFROMBEHIND,                    // == 142
239     FIFHITFROMFRONT,                     // == 143
240     FIFHITFROMLEFT,                      // == 144
241     FIFHITFROMRIGHT,                     // == 145
242     FIFTARGETISONSAMETEAM,               // == 146
243     FKILLTARGET,                         // == 147
244     FUNDOENCHANT,                        // == 148
245     FGETWATERLEVEL,                      // == 149
246     FCOSTTARGETMANA,                     // == 150
247     FIFTARGETHASANYID,                   // == 151
248     FSETBUMPSIZE,                        // == 152
249     FIFNOTDROPPED,                       // == 153
250     FIFYISLESSTHANX,                     // == 154
251     FSETFLYHEIGHT,                       // == 155
252     FIFBLOCKED,                          // == 156
253     FIFTARGETISDEFENDING,                // == 157
254     FIFTARGETISATTACKING,                // == 158
255     FIFSTATEIS0,                         // == 159
256     FIFSTATEIS1,                         // == 160
257     FIFSTATEIS2,                         // == 161
258     FIFSTATEIS3,                         // == 162
259     FIFSTATEIS4,                         // == 163
260     FIFSTATEIS5,                         // == 164
261     FIFSTATEIS6,                         // == 165
262     FIFSTATEIS7,                         // == 166
263     FIFCONTENTIS,                        // == 167
264     FSETTURNMODETOWATCHTARGET,           // == 168
265     FIFSTATEISNOT,                       // == 169
266     FIFXISEQUALTOY,                      // == 170
267     FDEBUGMESSAGE,                       // == 171
268 
269     /// Scripted AI functions (v0.80)
270     FBLACKTARGET,                        // == 172
271     FSENDMESSAGENEAR,                    // == 173
272     FIFHITGROUND,                        // == 174
273     FIFNAMEISKNOWN,                      // == 175
274     FIFUSAGEISKNOWN,                     // == 176
275     FIFHOLDINGITEMID,                    // == 177
276     FIFHOLDINGRANGEDWEAPON,              // == 178
277     FIFHOLDINGMELEEWEAPON,               // == 179
278     FIFHOLDINGSHIELD,                    // == 180
279     FIFKURSED,                           // == 181
280     FIFTARGETISKURSED,                   // == 182
281     FIFTARGETISDRESSEDUP,                // == 183
282     FIFOVERWATER,                        // == 184
283     FIFTHROWN,                           // == 185
284     FMAKENAMEKNOWN,                      // == 186
285     FMAKEUSAGEKNOWN,                     // == 187
286     FSTOPTARGETMOVEMENT,                 // == 188
287     FSETXY,                              // == 189
288     FGETXY,                              // == 190
289     FADDXY,                              // == 191
290     FMAKEAMMOKNOWN,                      // == 192
291     FSPAWNATTACHEDPARTICLE,              // == 193
292     FSPAWNEXACTPARTICLE,                 // == 194
293     FACCELERATETARGET,                   // == 195
294     FIFDISTANCEISMORETHANTURN,           // == 196
295     FIFCRUSHED,                          // == 197
296     FMAKECRUSHVALID,                     // == 198
297     FSETTARGETTOLOWESTTARGET,            // == 199
298     FIFNOTPUTAWAY,                       // == 200
299     FIFTAKENOUT,                         // == 201
300     FIFAMMOOUT,                          // == 202
301     FPLAYSOUNDLOOPED,                    // == 203
302     FSTOPSOUND,                          // == 204
303     FHEALSELF,                           // == 205
304     FEQUIP,                              // == 206
305     FIFTARGETHASITEMIDEQUIPPED,          // == 207
306     FSETOWNERTOTARGET,                   // == 208
307     FSETTARGETTOOWNER,                   // == 209
308     FSETFRAME,                           // == 210
309     FBREAKPASSAGE,                       // == 211
310     FSETRELOADTIME,                      // == 212
311     FSETTARGETTOWIDEBLAHID,              // == 213
312     FPOOFTARGET,                         // == 214
313     FCHILDDOACTIONOVERRIDE,              // == 215
314     FSPAWNPOOF,                          // == 216
315     FSETSPEEDPERCENT,                    // == 217
316     FSETCHILDSTATE,                      // == 218
317     FSPAWNATTACHEDSIZEDPARTICLE,         // == 219
318     FCHANGEARMOR,                        // == 220
319     FSHOWTIMER,                          // == 221
320     FIFFACINGTARGET,                     // == 222
321     FPLAYSOUNDVOLUME,                    // == 223
322     FSPAWNATTACHEDFACEDPARTICLE,         // == 224
323     FIFSTATEISODD,                       // == 225
324     FSETTARGETTODISTANTENEMY,            // == 226
325     FTELEPORT,                           // == 227
326     FGIVESTRENGTHTOTARGET,               // == 228
327     FGIVEWISDOMTOTARGET,                 // == 229
328     FGIVEINTELLIGENCETOTARGET,           // == 230
329     FGIVEDEXTERITYTOTARGET,              // == 231
330     FGIVELIFETOTARGET,                   // == 232
331     FGIVEMANATOTARGET,                   // == 233
332     FSHOWMAP,                            // == 234
333     FSHOWYOUAREHERE,                     // == 235
334     FSHOWBLIPXY,                         // == 236
335     FHEALTARGET,                         // == 237
336     FPUMPTARGET,                         // == 238
337     FCOSTAMMO,                           // == 239
338     FMAKESIMILARNAMESKNOWN,              // == 240
339     FSPAWNATTACHEDHOLDERPARTICLE,        // == 241
340     FSETTARGETRELOADTIME,                // == 242
341     FSETFOGLEVEL,                        // == 243
342     FGETFOGLEVEL,                        // == 244
343     FSETFOGTAD,                          // == 245
344     FSETFOGBOTTOMLEVEL,                  // == 246
345     FGETFOGBOTTOMLEVEL,                  // == 247
346     FCORRECTACTIONFORHAND,               // == 248
347     FIFTARGETISMOUNTED,                  // == 249
348     FSPARKLEICON,                        // == 250
349     FUNSPARKLEICON,                      // == 251
350     FGETTILEXY,                          // == 252
351     FSETTILEXY,                          // == 253
352     FSETSHADOWSIZE,                      // == 254
353     FORDERTARGET,                        // == 255
354     FSETTARGETTOWHOEVERISINPASSAGE,      // == 256
355     FIFCHARACTERWASABOOK,                // == 257
356 
357     /// Scripted AI functions (v0.90)
358     FSETENCHANTBOOSTVALUES,              // == 258
359     FSPAWNCHARACTERXYZ,                  // == 259
360     FSPAWNEXACTCHARACTERXYZ,             // == 260
361     FCHANGETARGETCLASS,                  // == 261
362     FPLAYFULLSOUND,                      // == 262
363     FSPAWNEXACTCHASEPARTICLE,            // == 263
364     FCREATEORDER,                        // == 264
365     FORDERSPECIALID,                     // == 265
366     FUNKURSETARGETINVENTORY,             // == 266
367     FIFTARGETISSNEAKING,                 // == 267
368     FDROPITEMS,                          // == 268
369     FRESPAWNTARGET,                      // == 269
370     FTARGETDOACTIONSETFRAME,             // == 270
371     FIFTARGETCANSEEINVISIBLE,            // == 271
372     FSETTARGETTONEARESTBLAHID,           // == 272
373     FSETTARGETTONEARESTENEMY,            // == 273
374     FSETTARGETTONEARESTFRIEND,           // == 274
375     FSETTARGETTONEARESTLIFEFORM,         // == 275
376     FFLASHPASSAGE,                       // == 276
377     FFINDTILEINPASSAGE,                  // == 277
378     FIFHELDINLEFTHAND,                   // == 278
379     FNOTANITEM,                          // == 279
380     FSETCHILDAMMO,                       // == 280
381     FIFHITVULNERABLE,                    // == 281
382     FIFTARGETISFLYING,                   // == 282
383     FIDENTIFYTARGET,                     // == 283
384     FBEATMODULE,                         // == 284
385     FENDMODULE,                          // == 285
386     FDISABLEEXPORT,                      // == 286
387     FENABLEEXPORT,                       // == 287
388     FGETTARGETSTATE,                     // == 288
389 
390     /// Redone in v 0.95
391     FIFEQUIPPED,                         // == 289
392     FDROPTARGETMONEY,                    // == 290
393     FGETTARGETCONTENT,                   // == 291
394     FDROPTARGETKEYS,                     // == 292
395     FJOINTEAM,                           // == 293
396     FTARGETJOINTEAM,                     // == 294
397 
398     /// Below is original code again
399     FCLEARMUSICPASSAGE,                  // == 295
400     FCLEARENDMESSAGE,                    // == 296
401     FADDENDMESSAGE,                      // == 297
402     FPLAYMUSIC,                          // == 298
403     FSETMUSICPASSAGE,                    // == 299
404     FMAKECRUSHINVALID,                   // == 300
405     FSTOPMUSIC,                          // == 301
406     FFLASHVARIABLE,                      // == 302
407     FACCELERATEUP,                       // == 303
408     FFLASHVARIABLEHEIGHT,                // == 304
409     FSETDAMAGETIME,                      // == 305
410     FIFSTATEIS8,                         // == 306
411     FIFSTATEIS9,                         // == 307
412     FIFSTATEIS10,                        // == 308
413     FIFSTATEIS11,                        // == 309
414     FIFSTATEIS12,                        // == 310
415     FIFSTATEIS13,                        // == 311
416     FIFSTATEIS14,                        // == 312
417     FIFSTATEIS15,                        // == 313
418     FIFTARGETISAMOUNT,                   // == 314
419     FIFTARGETISAPLATFORM,                // == 315
420     FADDSTAT,                            // == 316
421     FDISENCHANTTARGET,                   // == 317
422     FDISENCHANTALL,                      // == 318
423     FSETVOLUMENEARESTTEAMMATE,           // == 319
424     FADDSHOPPASSAGE,                     // == 320
425     FTARGETPAYFORARMOR,                  // == 321
426     FJOINEVILTEAM,                       // == 322
427     FJOINNULLTEAM,                       // == 323
428     FJOINGOODTEAM,                       // == 324
429     FPITSKILL,                           // == 325
430     FSETTARGETTOPASSAGEID,               // == 326
431     FMAKENAMEUNKNOWN,                    // == 327
432     FSPAWNEXACTPARTICLEENDSPAWN,         // == 328
433     FSPAWNPOOFSPEEDSPACINGDAMAGE,        // == 329
434     FGIVEEXPERIENCETOGOODTEAM,           // == 330
435 
436     /// Scripted AI functions (v0.95)
437     FDONOTHING,                          // == 331
438     FGROGTARGET,                         // == 332
439     FDAZETARGET,                         // == 333
440     FENABLERESPAWN,                      // == 334
441     FDISABLERESPAWN,                     // == 335
442 
443     /// Redone in v 1.10
444     FDISPELTARGETENCHANTID,              // == 336
445     FIFHOLDERBLOCKED,                    // == 337
446     FGETSKILLLEVEL,                      // == 338
447     FIFTARGETHASNOTFULLMANA,             // == 339
448     FENABLELISTENSKILL,                  // == 340
449     FSETTARGETTOLASTITEMUSED,            // == 341
450     FFOLLOWLINK,                         // == 342  Scripted AI functions (v1.00)
451     FIFOPERATORISLINUX,                  // == 343
452     FIFTARGETISAWEAPON,                  // == 344
453     FIFSOMEONEISSTEALING,                // == 345
454     FIFTARGETISASPELL,                   // == 346
455     FIFBACKSTABBED,                      // == 347
456     FGETTARGETDAMAGETYPE,                // == 348
457     FADDQUEST,                           // == 349
458     FBEATQUESTALLPLAYERS,                // == 350
459     FIFTARGETHASQUEST,                   // == 351
460     FSETQUESTLEVEL,                      // == 352
461     FADDQUESTALLPLAYERS,                 // == 353
462     FADDBLIPALLENEMIES,                  // == 354
463     FPITSFALL,                           // == 355
464     FIFTARGETISOWNER,                    // == 356
465 
466     /// adding in the "speech" thing so the script can define its "ouch" sound, for instance
467     FSETSPEECH,                  // == 357
468     FSETMOVESPEECH,              // == 358
469     FSETSECONDMOVESPEECH,        // == 359
470     FSETATTACKSPEECH,            // == 360
471     FSETASSISTSPEECH,            // == 361
472     FSETTERRAINSPEECH,           // == 362
473     FSETSELECTSPEECH,            // == 363
474 
475     /// Scripted AI functions (v1.10)
476     FTAKEPICTURE,                       // == 364
477     FIFOPERATORISMACINTOSH,             // == 365
478     FIFMODULEHASIDSZ,                   // == 366
479     FMORPHTOTARGET,                     // == 367
480     FGIVEMANAFLOWTOTARGET,              // == 368
481     FGIVEMANARETURNTOTARGET,            // == 369
482     FSETMONEY,                          // == 370
483     FIFTARGETCANSEEKURSES,              // == 371
484     FSPAWNATTACHEDCHARACTER,            // == 372
485     FKURSETARGET,                       // == 373
486     FSETCHILDCONTENT,                   // == 374
487     FSETTARGETTOCHILD,                  // == 375
488     FSETDAMAGETHRESHOLD,                // == 376
489     FACCELERATETARGETUP,                // == 377
490     FSETTARGETAMMO,                     // == 378
491     FENABLEINVICTUS,                    // == 379
492     FDISABLEINVICTUS,                   // == 380
493     FTARGETDAMAGESELF,                  // == 381
494     FSETTARGETSIZE,                     // == 382
495     FIFTARGETISFACINGSELF,              // == 383
496     FDRAWBILLBOARD,                     // == 384
497     FSETTARGETTOFIRSTBLAHINPASSAGE,     // == 385
498 
499     FIFLEVELUP,                         // == 386
500     FGIVESKILLTOTARGET,                 // == 387
501 
502     SCRIPT_FUNCTIONS_COUNT
503 };
504 
505 extern const char * script_function_names[SCRIPT_FUNCTIONS_COUNT];
506 
507 //--------------------------------------------------------------------------------------------
508 //--------------------------------------------------------------------------------------------
509 
510 /// A list of all possible egoscript operators
511 enum e_script_operators
512 {
513     OPADD = 0,            ///< +
514     OPSUB,                ///< -
515     OPAND,                ///< &
516     OPSHR,                ///< >
517     OPSHL,                ///< <
518     OPMUL,                ///< *
519     OPDIV,                ///< /
520     OPMOD                 ///< %
521 };
522 
523 //--------------------------------------------------------------------------------------------
524 //--------------------------------------------------------------------------------------------
525 
526 /// A list of all possible egoscript pre-defined variables
527 enum e_script_variables
528 {
529     VARTMPX = 0,         // == 0
530     VARTMPY,             // == 1
531     VARTMPDISTANCE,      // == 2
532     VARTMPTURN,          // == 3
533     VARTMPARGUMENT,      // == 4
534     VARRAND,             // == 5
535     VARSELFX,            // == 6
536     VARSELFY,            // == 7
537     VARSELFTURN,         // == 8
538     VARSELFCOUNTER,      // == 9
539     VARSELFORDER,        // == 10
540     VARSELFMORALE,       // == 11
541     VARSELFLIFE,         // == 12
542     VARTARGETX,          // == 13
543     VARTARGETY,          // == 14
544     VARTARGETDISTANCE,   // == 15
545     VARTARGETTURN,       // == 16
546     VARLEADERX,          // == 17
547     VARLEADERY,          // == 18
548     VARLEADERDISTANCE,   // == 19
549     VARLEADERTURN,       // == 20
550     VARGOTOX,            // == 21
551     VARGOTOY,            // == 22
552     VARGOTODISTANCE,     // == 23
553     VARTARGETTURNTO,     // == 24
554     VARPASSAGE,          // == 25
555     VARWEIGHT,           // == 26
556     VARSELFALTITUDE,     // == 27
557     VARSELFID,           // == 28
558     VARSELFHATEID,       // == 29
559     VARSELFMANA,         // == 30
560     VARTARGETSTR,        // == 31
561     VARTARGETWIS,        // == 32
562     VARTARGETINT,        // == 33
563     VARTARGETDEX,        // == 34
564     VARTARGETLIFE,       // == 35
565     VARTARGETMANA,       // == 36
566     VARTARGETLEVEL,      // == 37
567     VARTARGETSPEEDX,     // == 38
568     VARTARGETSPEEDY,     // == 39
569     VARTARGETSPEEDZ,     // == 40
570     VARSELFSPAWNX,       // == 41
571     VARSELFSPAWNY,       // == 42
572     VARSELFSTATE,        // == 43
573     VARSELFSTR,          // == 44
574     VARSELFWIS,          // == 45
575     VARSELFINT,          // == 46
576     VARSELFDEX,          // == 47
577     VARSELFMANAFLOW,     // == 48
578     VARTARGETMANAFLOW,   // == 49
579     VARSELFATTACHED,     // == 50
580     VARSWINGTURN,        // == 51
581     VARXYDISTANCE,       // == 52
582     VARSELFZ,            // == 53
583     VARTARGETALTITUDE,   // == 54
584     VARTARGETZ,          // == 55
585     VARSELFINDEX,        // == 56
586     VAROWNERX,           // == 57
587     VAROWNERY,           // == 58
588     VAROWNERTURN,        // == 59
589     VAROWNERDISTANCE,    // == 60
590     VAROWNERTURNTO,      // == 61
591     VARXYTURNTO,         // == 62
592     VARSELFMONEY,        // == 63
593     VARSELFACCEL,        // == 64
594     VARTARGETEXP,        // == 65
595     VARSELFAMMO,         // == 66
596     VARTARGETAMMO,       // == 67
597     VARTARGETMONEY,      // == 68
598     VARTARGETTURNAWAY,   // == 69
599     VARSELFLEVEL,        // == 70
600     VARTARGETRELOADTIME, // == 71
601     VARSELFCONTENT,      // == 72
602     VARSPAWNDISTANCE,    // == 73
603     VARTARGETMAXLIFE,    // == 74
604     VARTARGETTEAM,       // == 75
605     VARTARGETARMOR,      // == 76
606     VARDIFFICULTY,       // == 77
607     VARTIMEHOURS,        // == 78
608     VARTIMEMINUTES,      // == 79
609     VARTIMESECONDS,      // == 80
610     VARDATEMONTH,        // == 81
611     VARDATEDAY           // == 82
612 };
613 
614 //--------------------------------------------------------------------------------------------
615 //--------------------------------------------------------------------------------------------
616 
617 extern bool_t parseerror;
618 
619 //--------------------------------------------------------------------------------------------
620 //--------------------------------------------------------------------------------------------
621 // function prototypes
622 
623 int  load_ai_script_vfs( const char *loadname );
624 
625 void init_all_ai_scripts();
626 void release_all_ai_scripts();
627 
628 void script_compiler_init();
629