1 /*
2  * OpenBOR - http://www.LavaLit.com
3  * -----------------------------------------------------------------------
4  * All rights reserved. See LICENSE in OpenBOR root for license details.
5  *
6  * Copyright (c) 2004 - 2011 OpenBOR Team
7  */
8 
9 #ifndef OPENBORSCRIPT_H
10 #define OPENBORSCRIPT_H
11 
12 #include "Interpreter.h"
13 #include "pp_parser.h"
14 
15 #define MAX_GLOBAL_VAR 2048
16 #define MAX_KEY_LEN    24
17 
18 typedef struct
19 {
20 	ScriptVariant value;
21 	char          key[MAX_KEY_LEN];
22 	struct Script* owner;
23 }s_variantnode;
24 
25 //osc
26 #define script_magic ((int)0x73636f)
27 
28 typedef struct Script
29 {
30 	int magic;
31 	Interpreter* pinterpreter;
32 	char* comment; // debug purpose
33 	ScriptVariant* vars;
34 	int initialized;        //flag
35 	int interpreterowner;   //flag
36 }Script;
37 
38 extern s_variantnode** global_var_list;
39 extern List           theFunctionList;
40 extern ScriptVariant* indexed_var_list;
41 extern int            max_indexed_vars;
42 extern int            max_entity_vars;
43 extern int            max_script_vars;
44 extern int            max_global_vars;
45 extern int max_global_var_index ;
46 extern int global_var_count;
47 
48 //these functions can be used by openbor.c
49 void Script_Global_Init();
50 void Script_Global_Clear();
51 ScriptVariant* Script_Get_Global_Variant(char* theName);
52 int Script_Set_Global_Variant(char* theName, ScriptVariant* var);
53 ScriptVariant* Script_Get_Local_Variant(Script* cs, char* theName);
54 int Script_Set_Local_Variant(Script* cs, char* theName, ScriptVariant* var);
55 void Script_Init(Script* pscript, char* theName, char* comment, int first);
56 Script* alloc_script();
57 void Script_Copy(Script* pdest, Script* psrc, int localclear);
58 int Script_IsInitialized(Script* pscript);
59 void Script_Clear(Script* pscript, int localclear);
60 int Script_AppendText(Script* pscript, char* text, char* path);
61 int Script_Compile(Script* pscript);
62 int Script_Execute(Script* pscript);
63 
64 void Script_LoadSystemFunctions();
65 
66 #ifndef COMPILED_SCRIPT
67 int Script_Call(Script* pscript, char* method, ScriptVariant* pretvar);
68 #endif
69 
70 HRESULT system_isempty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
71 HRESULT system_NULL(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
72 HRESULT system_rand(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
73 HRESULT system_maxglobalvarindex(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
74 HRESULT system_getglobalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
75 HRESULT system_setglobalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
76 HRESULT system_getlocalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
77 HRESULT system_setlocalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
78 HRESULT system_clearlocalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
79 HRESULT system_clearglobalvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
80 HRESULT system_clearindexedvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
81 HRESULT system_free(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
82 HRESULT openbor_systemvariant(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
83 HRESULT openbor_changesystemvariant(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
84 HRESULT openbor_drawstring(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
85 HRESULT openbor_drawstringtoscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
86 HRESULT openbor_drawsprite(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
87 HRESULT openbor_drawspritetoscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
88 HRESULT openbor_log(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
89 HRESULT openbor_drawbox(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
90 HRESULT openbor_drawline(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
91 HRESULT openbor_drawdot(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
92 HRESULT openbor_drawboxtoscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
93 HRESULT openbor_drawlinetoscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
94 HRESULT openbor_drawdottoscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
95 HRESULT openbor_drawscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
96 HRESULT openbor_changeplayerproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
97 HRESULT openbor_changeentityproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
98 HRESULT openbor_getplayerproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
99 HRESULT openbor_getentityproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
100 HRESULT openbor_clearspawnentry(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
101 HRESULT openbor_setspawnentry(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
102 HRESULT openbor_spawn(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
103 HRESULT openbor_projectile(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
104 HRESULT openbor_transconst(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
105 HRESULT openbor_tossentity(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
106 HRESULT openbor_playmusic(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
107 HRESULT openbor_fademusic(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
108 HRESULT openbor_setmusicvolume(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
109 HRESULT openbor_setmusictempo(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
110 HRESULT openbor_pausemusic(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
111 HRESULT openbor_playsample(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
112 HRESULT openbor_loadsample(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
113 HRESULT openbor_unloadsample(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
114 HRESULT openbor_fadeout(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
115 HRESULT openbor_playerkeys(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
116 HRESULT openbor_changepalette(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
117 HRESULT openbor_damageentity(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
118 HRESULT openbor_killentity(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
119 HRESULT openbor_findtarget(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
120 HRESULT openbor_checkrange(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
121 HRESULT openbor_gettextobjproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
122 HRESULT openbor_changetextobjproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
123 HRESULT openbor_settextobj(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
124 HRESULT openbor_cleartextobj(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
125 HRESULT openbor_getlayerproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
126 HRESULT openbor_changelayerproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
127 HRESULT openbor_getlevelproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
128 HRESULT openbor_changelevelproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
129 HRESULT openbor_checkhole(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
130 HRESULT openbor_checkwall(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
131 HRESULT openbor_checkplatformbelow(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
132 
133 HRESULT openbor_openfilestream(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
134 HRESULT openbor_getfilestreamline(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
135 HRESULT openbor_getfilestreamargument(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
136 HRESULT openbor_filestreamnextline(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
137 HRESULT openbor_getfilestreamposition(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
138 HRESULT openbor_setfilestreamposition(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
139 
140 HRESULT openbor_filestreamappend(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
141 HRESULT openbor_createfilestream(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
142 HRESULT openbor_closefilestream(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
143 HRESULT openbor_savefilestream(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
144 
145 HRESULT openbor_getindexedvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
146 HRESULT openbor_setindexedvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
147 HRESULT openbor_getscriptvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
148 HRESULT openbor_setscriptvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
149 HRESULT openbor_getentityvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
150 HRESULT openbor_setentityvar(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
151 
152 HRESULT openbor_shutdown(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
153 
154 HRESULT openbor_jumptobranch(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
155 
156 HRESULT openbor_changelight(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
157 HRESULT openbor_changeshadowcolor(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
158 HRESULT openbor_bindentity(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
159 
160 HRESULT openbor_array(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
161 HRESULT openbor_size(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
162 HRESULT openbor_get(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
163 HRESULT openbor_set(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
164 
165 HRESULT openbor_allocscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
166 HRESULT openbor_clearscreen(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
167 HRESULT openbor_setdrawmethod(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
168 HRESULT openbor_updateframe(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
169 HRESULT openbor_performattack(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
170 HRESULT openbor_setidle(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
171 HRESULT openbor_getentity(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
172 
173 HRESULT openbor_loadmodel(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
174 HRESULT openbor_loadsprite(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
175 HRESULT openbor_options(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
176 HRESULT openbor_playgif(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
177 
178 HRESULT openbor_strinfirst(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
179 HRESULT openbor_strinlast(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
180 HRESULT openbor_strleft(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
181 HRESULT openbor_strlength(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
182 HRESULT openbor_strwidth(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
183 HRESULT openbor_strright(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
184 HRESULT openbor_getmodelproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
185 HRESULT openbor_changemodelproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
186 HRESULT openbor_rgbcolor(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
187 HRESULT openbor_settexture(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
188 HRESULT openbor_setvertex(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
189 HRESULT openbor_trianglelist(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
190 
191 HRESULT openbor_aicheckwarp(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
192 HRESULT openbor_aichecklie(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
193 HRESULT openbor_aicheckgrabbed(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
194 HRESULT openbor_aicheckgrab(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
195 HRESULT openbor_aicheckescape(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
196 HRESULT openbor_aicheckbusy(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
197 HRESULT openbor_aicheckattack(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
198 HRESULT openbor_aicheckmove(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
199 HRESULT openbor_aicheckjump(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
200 HRESULT openbor_aicheckpathblocked(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
201 
202 HRESULT openbor_adjustwalkanimation(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
203 HRESULT openbor_finditem(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
204 HRESULT openbor_pickup(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
205 HRESULT openbor_waypoints(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
206 HRESULT openbor_changedrawmethod(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
207 
208 HRESULT openbor_drawspriteq(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
209 HRESULT openbor_clearspriteq(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
210 HRESULT openbor_getgfxproperty(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
211 
212 HRESULT openbor_allocscript(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
213 HRESULT openbor_loadscript(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
214 HRESULT openbor_compilescript(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
215 HRESULT openbor_executescript(ScriptVariant** varlist , ScriptVariant** pretvar, int paramCount);
216 
217 void mapstrings_systemvariant(ScriptVariant** varlist, int paramCount);
218 void mapstrings_getentityproperty(ScriptVariant** varlist, int paramCount);
219 void mapstrings_changeentityproperty(ScriptVariant** varlist, int paramCount);
220 void mapstrings_playerproperty(ScriptVariant** varlist, int paramCount);
221 void mapstrings_setspawnentry(ScriptVariant** varlist, int paramCount);
222 void mapstrings_transconst(ScriptVariant** varlist, int paramCount);
223 void mapstrings_playerkeys(ScriptVariant** varlist, int paramCount);
224 void mapstrings_gettextobjproperty(ScriptVariant** varlist, int paramCount);
225 void mapstrings_changetextobjproperty(ScriptVariant** varlist, int paramCount);
226 void mapstrings_layerproperty(ScriptVariant** varlist, int paramCount);
227 void mapstrings_drawmethodproperty(ScriptVariant** varlist, int paramCount);
228 void mapstrings_gfxproperty(ScriptVariant** varlist, int paramCount);
229 void mapstrings_levelproperty(ScriptVariant** varlist, int paramCount);
230 
231 
232 enum systemvariant_enum
233 {
234 _sv_background,
235 _sv_blockade,
236 _sv_branchname,
237 _sv_count_enemies,
238 _sv_count_entities,
239 _sv_count_npcs,
240 _sv_count_players,
241 _sv_current_branch,
242 _sv_current_level,
243 _sv_current_palette,
244 _sv_current_scene,
245 _sv_current_set,
246 _sv_current_stage,
247 _sv_effectvol,
248 _sv_elapsed_time,
249 _sv_ent_max,
250 _sv_freeram,
251 _sv_game_paused,
252 _sv_game_speed,
253 _sv_gfx_x_offset,
254 _sv_gfx_y_offset,
255 _sv_gfx_y_offset_adj,
256 _sv_hResolution,
257 _sv_in_gameoverscreen,
258 _sv_in_halloffamescreen,
259 _sv_in_level,
260 _sv_in_menuscreen,
261 _sv_in_selectscreen,
262 _sv_in_showcomplete,
263 _sv_in_titlescreen,
264 _sv_lasthita,
265 _sv_lasthitc,
266 _sv_lasthitt,
267 _sv_lasthitx,
268 _sv_lasthitz,
269 _sv_levelheight,
270 _sv_levelpos,
271 _sv_levelwidth,
272 _sv_lightx,
273 _sv_lightz,
274 _sv_maxanimations,
275 _sv_maxattacktypes,
276 _sv_maxentityvars,
277 _sv_maxglobalvars,
278 _sv_maxindexedvars,
279 _sv_maxplayers,
280 _sv_maxscriptvars,
281 _sv_models_cached,
282 _sv_models_loaded,
283 _sv_musicvol,
284 _sv_nofadeout,
285 _sv_nopause,
286 _sv_nosave,
287 _sv_noscreenshot,
288 _sv_numpalettes,
289 _sv_pakname,
290 _sv_pause,
291 _sv_pixelformat,
292 _sv_player,
293 _sv_player1,
294 _sv_player2,
295 _sv_player3,
296 _sv_player4,
297 _sv_player_max_z,
298 _sv_player_min_z,
299 _sv_scrollmaxz,
300 _sv_scrollminz,
301 _sv_self,
302 _sv_shadowalpha,
303 _sv_shadowcolor,
304 _sv_skiptoset,
305 _sv_slowmotion,
306 _sv_slowmotion_duration,
307 _sv_smartbomber,
308 _sv_soundvol,
309 _sv_textbox,
310 _sv_ticks,
311 _sv_totalram,
312 _sv_usedram,
313 _sv_usesave,
314 _sv_vResolution,
315 _sv_viewporth,
316 _sv_viewportw,
317 _sv_viewportx,
318 _sv_viewporty,
319 _sv_vscreen,
320 _sv_waiting,
321 _sv_xpos,
322 _sv_ypos,
323 _sv_the_end,
324  };
325 
326 #endif
327