Polyphase Game Engine
Loading...
Searching...
No Matches
ScriptMacros.h
Go to the documentation of this file.
1#pragma once
2
3// These macros are ugly, but it makes it easy to expose C++ functions to Lua
4// In your Node class, you just need drop one of these macros based on the function return/params
5// Example in Unit.cpp:
6// OSF_1(AddHealth)
7// OSF_R(GetHealth)
8
9#include "Utilities.h"
11#include "ScriptAutoReg.h"
12#include "ScriptFunc.h"
13
14#define SF_CHECK_NODE(L, arg) CheckNodeLuaType(L, arg, "Node", "cfNode")
15#define SF_CHECK_ASSET(L, Arg) CheckAssetLuaType<Asset>(L, Arg, "Asset", "cfAsset")
16#define SF_CHECK_OBJECT(L, Arg) CheckObjectLuaType(L, Arg)
17
18#define SF_CHECK_NODE_OR_NIL(L, arg) CheckNodeOrNilLuaType(L, arg, "Node", "cfNode")
19#define SF_CHECK_ASSET_OR_NIL(L, Arg) CheckAssetOrNilLuaType<Asset>(L, Arg, "Asset", "cfAsset")
20#define SF_CHECK_OBJECT_OR_NIL(L, Arg) CheckObjectOrNilLuaType(L, Arg)
21
22// Parameter macros
23#define SpNode(idx) SF_CHECK_NODE(L, idx)
24#define SpAsset(idx) SF_CHECK_ASSET(L, idx)
25#define SpNodeOrNil(idx) SF_CHECK_NODE_OR_NIL(L, idx)
26#define SpAssetOrNil(idx) SF_CHECK_ASSET_OR_NIL(L, idx)
27#define SpVector(idx) LuaObjectToDatum(L, idx)
28#define SpInt(idx) lua_tointeger(L, idx)
29#define SpIndex(idx) (lua_tointeger(L, idx) - 1)
30#define SpFloat(idx) lua_tonumber(L, idx)
31#define SpString(idx) lua_tostring(L, idx)
32#define SpBool(idx) lua_toboolean(L, idx)
33#define SpFunction(idx) ScriptFunc(L, idx)
34
35// Return macros
36#define SrReturn
37#define SrNode (Node*)
38#define SrAsset (Asset*)
39#define SrVector
40#define SrInt (int32_t)
41#define SrIndex 1 +
42#define SrFloat
43#define SrString
44#define SrBool
45#define SrFunction
46
47#define SCRIPT_FUNC_X_1(ClassName, FuncName, P0) \
48 static int ScriptFunc_##FuncName(lua_State* L) \
49 { \
50 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
51 object->FuncName(P0(2)); \
52 return 0; \
53 } \
54 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
55
56#define SCRIPT_FUNC_X_2(ClassName, FuncName, P0, P1) \
57 static int ScriptFunc_##FuncName(lua_State* L) \
58 { \
59 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
60 object->FuncName(P0(2), P1(3)); \
61 return 0; \
62 } \
63 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
64
65#define SCRIPT_FUNC_X_3(ClassName, FuncName, P0, P1, P2) \
66 static int ScriptFunc_##FuncName(lua_State* L) \
67 { \
68 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
69 object->FuncName(P0(2), P1(3), P2(4)); \
70 return 0; \
71 } \
72 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
73
74#define SCRIPT_FUNC_X_4(ClassName, FuncName, P0, P1, P2, P3) \
75 static int ScriptFunc_##FuncName(lua_State* L) \
76 { \
77 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
78 object->FuncName(P0(2), P1(3), P2(4), P3(5)); \
79 return 0; \
80 } \
81 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
82
83#define SCRIPT_FUNC_X_5(ClassName, FuncName, P0, P1, P2, P3, P4) \
84 static int ScriptFunc_##FuncName(lua_State* L) \
85 { \
86 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
87 object->FuncName(P0(2), P1(3), P2(4), P3(5), P4(6)); \
88 return 0; \
89 } \
90 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
91
92#define SCRIPT_FUNC_X_R(ClassName, FuncName, RC) \
93 static int ScriptFunc_##FuncName(lua_State* L) \
94 { \
95 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
96 Datum ret = RC object->FuncName(); \
97 LuaPushDatum(L, ret); \
98 return 1; \
99 } \
100 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
101
102#define SCRIPT_FUNC_X_R_1(ClassName, FuncName, RC, P0) \
103 static int ScriptFunc_##FuncName(lua_State* L) \
104 { \
105 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
106 Datum ret = RC object->FuncName(P0(2)); \
107 LuaPushDatum(L, ret); \
108 return 1; \
109 } \
110 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
111
112#define SCRIPT_FUNC_X_R_2(ClassName, FuncName, RC, P0, P1) \
113 static int ScriptFunc_##FuncName(lua_State* L) \
114 { \
115 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
116 Datum ret = RC object->FuncName(P0(2), P1(3)); \
117 LuaPushDatum(L, ret); \
118 return 1; \
119 } \
120 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
121
122#define SCRIPT_FUNC_X_R_3(ClassName, FuncName, RC, P0, P1, P2) \
123 static int ScriptFunc_##FuncName(lua_State* L) \
124 { \
125 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
126 Datum ret = RC object->FuncName(P0(2), P1(3), P2(4)); \
127 LuaPushDatum(L, ret); \
128 return 1; \
129 } \
130 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
131
132#define SCRIPT_FUNC_X_R_4(ClassName, FuncName, RC, P0, P1, P2, P3) \
133 static int ScriptFunc_##FuncName(lua_State* L) \
134 { \
135 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
136 Datum ret = RC object->FuncName(P0(2), P1(3), P2(4), P3(5)); \
137 LuaPushDatum(L, ret); \
138 return 1; \
139 } \
140 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
141
142
143#define GLOBAL_SCRIPT_FUNC_X_1(TableName, FuncName, P0) \
144 static int ScriptFunc_##FuncName(lua_State* L) \
145 { \
146 FuncName(P0(1)); \
147 return 0; \
148 } \
149 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
150
151#define GLOBAL_SCRIPT_FUNC_X_2(TableName, FuncName, P0, P1) \
152 static int ScriptFunc_##FuncName(lua_State* L) \
153 { \
154 FuncName(P0(1), P1(2)); \
155 return 0; \
156 } \
157 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
158
159#define GLOBAL_SCRIPT_FUNC_X_3(TableName, FuncName, P0, P1, P2) \
160 static int ScriptFunc_##FuncName(lua_State* L) \
161 { \
162 FuncName(P0(1), P1(2), P2(3)); \
163 return 0; \
164 } \
165 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
166
167#define GLOBAL_SCRIPT_FUNC_X_4(TableName, FuncName, P0, P1, P2, P3) \
168 static int ScriptFunc_##FuncName(lua_State* L) \
169 { \
170 FuncName(P0(1), P1(2), P2(3), P3(4)); \
171 return 0; \
172 } \
173 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
174
175#define GLOBAL_SCRIPT_FUNC_X_R(TableName, FuncName, RC) \
176 static int ScriptFunc_##FuncName(lua_State* L) \
177 { \
178 Datum ret = RC FuncName(); \
179 LuaPushDatum(L, ret); \
180 return 1; \
181 } \
182 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
183
184#define GLOBAL_SCRIPT_FUNC_X_R_1(TableName, FuncName, RC, P0) \
185 static int ScriptFunc_##FuncName(lua_State* L) \
186 { \
187 Datum ret = RC FuncName(P0(1)); \
188 LuaPushDatum(L, ret); \
189 return 1; \
190 } \
191 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
192
193#define GLOBAL_SCRIPT_FUNC_X_R_2(TableName, FuncName, RC, P0, P1) \
194 static int ScriptFunc_##FuncName(lua_State* L) \
195 { \
196 Datum ret = RC FuncName(P0(1), P1(2)); \
197 LuaPushDatum(L, ret); \
198 return 1; \
199 } \
200 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
201
202#define GLOBAL_SCRIPT_FUNC_X_R_3(TableName, FuncName, RC, P0, P1, P2) \
203 static int ScriptFunc_##FuncName(lua_State* L) \
204 { \
205 Datum ret = RC FuncName(P0(1), P1(2), P2(3)); \
206 LuaPushDatum(L, ret); \
207 return 1; \
208 } \
209 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
210
211#define GLOBAL_SCRIPT_FUNC_X_R_4(TableName, FuncName, RC, P0, P1, P2, P3) \
212 static int ScriptFunc_##FuncName(lua_State* L) \
213 { \
214 Datum ret = RC FuncName(P0(1), P1(2), P2(3), P3(4)); \
215 LuaPushDatum(L, ret); \
216 return 1; \
217 } \
218 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
219
220
221
222#define SCRIPT_FUNC(ClassName, FuncName) \
223 static int ScriptFunc_##FuncName(lua_State* L) \
224 { \
225 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
226 object->FuncName(); \
227 return 0; \
228 } \
229 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
230
231#define SCRIPT_FUNC_1(ClassName, FuncName) \
232 static int ScriptFunc_##FuncName(lua_State* L) \
233 { \
234 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
235 Datum param0; LuaObjectToDatum(L, 2, param0); \
236 object->FuncName(param0); \
237 return 0; \
238 } \
239 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
240
241#define SCRIPT_FUNC_2(ClassName, FuncName) \
242 static int ScriptFunc_##FuncName(lua_State* L) \
243 { \
244 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
245 Datum param0; LuaObjectToDatum(L, 2, param0); \
246 Datum param1; LuaObjectToDatum(L, 3, param1); \
247 object->FuncName(param0, param1); \
248 return 0; \
249 } \
250 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
251
252#define SCRIPT_FUNC_3(ClassName, FuncName) \
253 static int ScriptFunc_##FuncName(lua_State* L) \
254 { \
255 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
256 Datum param0; LuaObjectToDatum(L, 2, param0); \
257 Datum param1; LuaObjectToDatum(L, 3, param1); \
258 Datum param2; LuaObjectToDatum(L, 4, param2); \
259 object->FuncName(param0, param1, param2); \
260 return 0; \
261 } \
262 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
263
264#define SCRIPT_FUNC_4(ClassName, FuncName) \
265 static int ScriptFunc_##FuncName(lua_State* L) \
266 { \
267 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
268 Datum param0; LuaObjectToDatum(L, 2, param0); \
269 Datum param1; LuaObjectToDatum(L, 3, param1); \
270 Datum param2; LuaObjectToDatum(L, 4, param2); \
271 Datum param3; LuaObjectToDatum(L, 5, param3); \
272 object->FuncName(param0, param1, param2, param3); \
273 return 0; \
274 } \
275 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
276
277#define SCRIPT_FUNC_5(ClassName, FuncName) \
278 static int ScriptFunc_##FuncName(lua_State* L) \
279 { \
280 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
281 Datum param0; LuaObjectToDatum(L, 2, param0); \
282 Datum param1; LuaObjectToDatum(L, 3, param1); \
283 Datum param2; LuaObjectToDatum(L, 4, param2); \
284 Datum param3; LuaObjectToDatum(L, 5, param3); \
285 Datum param4; LuaObjectToDatum(L, 6, param4); \
286 object->FuncName(param0, param1, param2, param3, param4); \
287 return 0; \
288 } \
289 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
290
291#define SCRIPT_FUNC_6(ClassName, FuncName) \
292 static int ScriptFunc_##FuncName(lua_State* L) \
293 { \
294 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
295 Datum param0; LuaObjectToDatum(L, 2, param0); \
296 Datum param1; LuaObjectToDatum(L, 3, param1); \
297 Datum param2; LuaObjectToDatum(L, 4, param2); \
298 Datum param3; LuaObjectToDatum(L, 5, param3); \
299 Datum param4; LuaObjectToDatum(L, 6, param4); \
300 Datum param5; LuaObjectToDatum(L, 7, param5); \
301 object->FuncName(param0, param1, param2, param3, param4, param5); \
302 return 0; \
303 } \
304 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
305
306#define SCRIPT_FUNC_7(ClassName, FuncName) \
307 static int ScriptFunc_##FuncName(lua_State* L) \
308 { \
309 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
310 Datum param0; LuaObjectToDatum(L, 2, param0); \
311 Datum param1; LuaObjectToDatum(L, 3, param1); \
312 Datum param2; LuaObjectToDatum(L, 4, param2); \
313 Datum param3; LuaObjectToDatum(L, 5, param3); \
314 Datum param4; LuaObjectToDatum(L, 6, param4); \
315 Datum param5; LuaObjectToDatum(L, 7, param5); \
316 Datum param6; LuaObjectToDatum(L, 8, param6); \
317 object->FuncName(param0, param1, param2, param3, param4, param5, param6); \
318 return 0; \
319 } \
320 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
321
322#define SCRIPT_FUNC_8(ClassName, FuncName) \
323 static int ScriptFunc_##FuncName(lua_State* L) \
324 { \
325 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
326 Datum param0; LuaObjectToDatum(L, 2, param0); \
327 Datum param1; LuaObjectToDatum(L, 3, param1); \
328 Datum param2; LuaObjectToDatum(L, 4, param2); \
329 Datum param3; LuaObjectToDatum(L, 5, param3); \
330 Datum param4; LuaObjectToDatum(L, 6, param4); \
331 Datum param5; LuaObjectToDatum(L, 7, param5); \
332 Datum param6; LuaObjectToDatum(L, 8, param6); \
333 Datum param7; LuaObjectToDatum(L, 9, param7); \
334 object->FuncName(param0, param1, param2, param3, param4, param5, param6, param7); \
335 return 0; \
336 } \
337 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
338
339#define SCRIPT_FUNC_R(ClassName, FuncName) \
340 static int ScriptFunc_##FuncName(lua_State* L) \
341 { \
342 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
343 Datum ret = object->FuncName(); \
344 LuaPushDatum(L, ret); \
345 return 1; \
346 } \
347 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
348
349#define SCRIPT_FUNC_R_1(ClassName, FuncName) \
350 static int ScriptFunc_##FuncName(lua_State* L) \
351 { \
352 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
353 Datum param0; LuaObjectToDatum(L, 2, param0); \
354 Datum ret = object->FuncName(param0); \
355 LuaPushDatum(L, ret); \
356 return 1; \
357 } \
358 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
359
360#define SCRIPT_FUNC_R_2(ClassName, FuncName) \
361 static int ScriptFunc_##FuncName(lua_State* L) \
362 { \
363 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
364 Datum param0; LuaObjectToDatum(L, 2, param0); \
365 Datum param1; LuaObjectToDatum(L, 3, param1); \
366 Datum ret = object->FuncName(param0, param1); \
367 LuaPushDatum(L, ret); \
368 return 1; \
369 } \
370 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
371
372#define SCRIPT_FUNC_R_3(ClassName, FuncName) \
373 static int ScriptFunc_##FuncName(lua_State* L) \
374 { \
375 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
376 Datum param0; LuaObjectToDatum(L, 2, param0); \
377 Datum param1; LuaObjectToDatum(L, 3, param1); \
378 Datum param2; LuaObjectToDatum(L, 4, param2); \
379 Datum ret = object->FuncName(param0, param1, param2); \
380 LuaPushDatum(L, ret); \
381 return 1; \
382 } \
383 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
384
385#define SCRIPT_FUNC_R_4(ClassName, FuncName) \
386 static int ScriptFunc_##FuncName(lua_State* L) \
387 { \
388 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
389 Datum param0; LuaObjectToDatum(L, 2, param0); \
390 Datum param1; LuaObjectToDatum(L, 3, param1); \
391 Datum param2; LuaObjectToDatum(L, 4, param2); \
392 Datum param3; LuaObjectToDatum(L, 5, param3); \
393 Datum ret = object->FuncName(param0, param1, param2, param3); \
394 LuaPushDatum(L, ret); \
395 return 1; \
396 } \
397 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
398
399#define SCRIPT_FUNC_R_5(ClassName, FuncName) \
400 static int ScriptFunc_##FuncName(lua_State* L) \
401 { \
402 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
403 Datum param0; LuaObjectToDatum(L, 2, param0); \
404 Datum param1; LuaObjectToDatum(L, 3, param1); \
405 Datum param2; LuaObjectToDatum(L, 4, param2); \
406 Datum param3; LuaObjectToDatum(L, 5, param3); \
407 Datum param4; LuaObjectToDatum(L, 6, param4); \
408 Datum ret = object->FuncName(param0, param1, param2, param3, param4); \
409 LuaPushDatum(L, ret); \
410 return 1; \
411 } \
412 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
413
414#define SCRIPT_FUNC_R_6(ClassName, FuncName) \
415 static int ScriptFunc_##FuncName(lua_State* L) \
416 { \
417 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
418 Datum param0; LuaObjectToDatum(L, 2, param0); \
419 Datum param1; LuaObjectToDatum(L, 3, param1); \
420 Datum param2; LuaObjectToDatum(L, 4, param2); \
421 Datum param3; LuaObjectToDatum(L, 5, param3); \
422 Datum param4; LuaObjectToDatum(L, 6, param4); \
423 Datum param5; LuaObjectToDatum(L, 7, param5); \
424 Datum ret = object->FuncName(param0, param1, param2, param3, param4, param5); \
425 LuaPushDatum(L, ret); \
426 return 1; \
427 } \
428 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
429
430#define SCRIPT_FUNC_R_7(ClassName, FuncName) \
431 static int ScriptFunc_##FuncName(lua_State* L) \
432 { \
433 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
434 Datum param0; LuaObjectToDatum(L, 2, param0); \
435 Datum param1; LuaObjectToDatum(L, 3, param1); \
436 Datum param2; LuaObjectToDatum(L, 4, param2); \
437 Datum param3; LuaObjectToDatum(L, 5, param3); \
438 Datum param4; LuaObjectToDatum(L, 6, param4); \
439 Datum param5; LuaObjectToDatum(L, 7, param5); \
440 Datum param6; LuaObjectToDatum(L, 8, param6); \
441 Datum ret = object->FuncName(param0, param1, param2, param3, param4, param5, param6); \
442 LuaPushDatum(L, ret); \
443 return 1; \
444 } \
445 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
446
447#define SCRIPT_FUNC_R_8(ClassName, FuncName) \
448 static int ScriptFunc_##FuncName(lua_State* L) \
449 { \
450 ClassName* object = SF_CHECK_OBJECT(L, 1)->As<ClassName>(); \
451 Datum param0; LuaObjectToDatum(L, 2, param0); \
452 Datum param1; LuaObjectToDatum(L, 3, param1); \
453 Datum param2; LuaObjectToDatum(L, 4, param2); \
454 Datum param3; LuaObjectToDatum(L, 5, param3); \
455 Datum param4; LuaObjectToDatum(L, 6, param4); \
456 Datum param5; LuaObjectToDatum(L, 7, param5); \
457 Datum param6; LuaObjectToDatum(L, 8, param6); \
458 Datum param7; LuaObjectToDatum(L, 9, param7); \
459 Datum ret = object->FuncName(param0, param1, param2, param3, param4, param5, param6, param7); \
460 LuaPushDatum(L, ret); \
461 return 1; \
462 } \
463 static ScriptFuncAutoReg AutoReg_##FuncName(sAutoRegs_##ClassName, "", #FuncName, ScriptFunc_##FuncName);
464
465
466
467
468
469
470#define GLOBAL_SCRIPT_FUNC(TableName, FuncName) \
471 static int ScriptFunc_##FuncName(lua_State* L) \
472 { \
473 FuncName(); \
474 return 0; \
475 } \
476 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
477
478#define GLOBAL_SCRIPT_FUNC_1(TableName, FuncName) \
479 static int ScriptFunc_##FuncName(lua_State* L) \
480 { \
481 Datum param0; LuaObjectToDatum(L, 1, param0); \
482 FuncName(param0); \
483 return 0; \
484 } \
485 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
486
487#define GLOBAL_SCRIPT_FUNC_2(TableName, FuncName) \
488 static int ScriptFunc_##FuncName(lua_State* L) \
489 { \
490 Datum param0; LuaObjectToDatum(L, 1, param0); \
491 Datum param1; LuaObjectToDatum(L, 2, param1); \
492 FuncName(param0, param1); \
493 return 0; \
494 } \
495 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
496
497#define GLOBAL_SCRIPT_FUNC_3(TableName, FuncName) \
498 static int ScriptFunc_##FuncName(lua_State* L) \
499 { \
500 Datum param0; LuaObjectToDatum(L, 1, param0); \
501 Datum param1; LuaObjectToDatum(L, 2, param1); \
502 Datum param2; LuaObjectToDatum(L, 3, param2); \
503 FuncName(param0, param1, param2); \
504 return 0; \
505 } \
506 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
507
508#define GLOBAL_SCRIPT_FUNC_4(TableName, FuncName) \
509 static int ScriptFunc_##FuncName(lua_State* L) \
510 { \
511 Datum param0; LuaObjectToDatum(L, 1, param0); \
512 Datum param1; LuaObjectToDatum(L, 2, param1); \
513 Datum param2; LuaObjectToDatum(L, 3, param2); \
514 Datum param3; LuaObjectToDatum(L, 4, param3); \
515 FuncName(param0, param1, param2, param3); \
516 return 0; \
517 } \
518 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
519
520#define GLOBAL_SCRIPT_FUNC_5(TableName, FuncName) \
521 static int ScriptFunc_##FuncName(lua_State* L) \
522 { \
523 Datum param0; LuaObjectToDatum(L, 1, param0); \
524 Datum param1; LuaObjectToDatum(L, 2, param1); \
525 Datum param2; LuaObjectToDatum(L, 3, param2); \
526 Datum param3; LuaObjectToDatum(L, 4, param3); \
527 Datum param4; LuaObjectToDatum(L, 5, param4); \
528 FuncName(param0, param1, param2, param3, param4); \
529 return 0; \
530 } \
531 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
532
533#define GLOBAL_SCRIPT_FUNC_6(TableName, FuncName) \
534 static int ScriptFunc_##FuncName(lua_State* L) \
535 { \
536 Datum param0; LuaObjectToDatum(L, 1, param0); \
537 Datum param1; LuaObjectToDatum(L, 2, param1); \
538 Datum param2; LuaObjectToDatum(L, 3, param2); \
539 Datum param3; LuaObjectToDatum(L, 4, param3); \
540 Datum param4; LuaObjectToDatum(L, 5, param4); \
541 Datum param5; LuaObjectToDatum(L, 6, param5); \
542 FuncName(param0, param1, param2, param3, param4, param5); \
543 return 0; \
544 } \
545 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
546
547#define GLOBAL_SCRIPT_FUNC_7(TableName, FuncName) \
548 static int ScriptFunc_##FuncName(lua_State* L) \
549 { \
550 Datum param0; LuaObjectToDatum(L, 1, param0); \
551 Datum param1; LuaObjectToDatum(L, 2, param1); \
552 Datum param2; LuaObjectToDatum(L, 3, param2); \
553 Datum param3; LuaObjectToDatum(L, 4, param3); \
554 Datum param4; LuaObjectToDatum(L, 5, param4); \
555 Datum param5; LuaObjectToDatum(L, 6, param5); \
556 Datum param6; LuaObjectToDatum(L, 7, param6); \
557 FuncName(param0, param1, param2, param3, param4, param5, param6); \
558 return 0; \
559 } \
560 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
561
562#define GLOBAL_SCRIPT_FUNC_8(TableName, FuncName) \
563 static int ScriptFunc_##FuncName(lua_State* L) \
564 { \
565 Datum param0; LuaObjectToDatum(L, 1, param0); \
566 Datum param1; LuaObjectToDatum(L, 2, param1); \
567 Datum param2; LuaObjectToDatum(L, 3, param2); \
568 Datum param3; LuaObjectToDatum(L, 4, param3); \
569 Datum param4; LuaObjectToDatum(L, 5, param4); \
570 Datum param5; LuaObjectToDatum(L, 6, param5); \
571 Datum param6; LuaObjectToDatum(L, 7, param6); \
572 Datum param7; LuaObjectToDatum(L, 8, param7); \
573 FuncName(param0, param1, param2, param3, param4, param5, param6, param7); \
574 return 0; \
575 } \
576 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
577
578#define GLOBAL_SCRIPT_FUNC_R(TableName, FuncName) \
579 static int ScriptFunc_##FuncName(lua_State* L) \
580 { \
581 Datum ret = FuncName(); \
582 LuaPushDatum(L, ret); \
583 return 1; \
584 } \
585 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
586
587#define GLOBAL_SCRIPT_FUNC_R_1(TableName, FuncName) \
588 static int ScriptFunc_##FuncName(lua_State* L) \
589 { \
590 Datum param0; LuaObjectToDatum(L, 1, param0); \
591 Datum ret = FuncName(param0); \
592 LuaPushDatum(L, ret); \
593 return 1; \
594 } \
595 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
596
597#define GLOBAL_SCRIPT_FUNC_R_2(TableName, FuncName) \
598 static int ScriptFunc_##FuncName(lua_State* L) \
599 { \
600 Datum param0; LuaObjectToDatum(L, 1, param0); \
601 Datum param1; LuaObjectToDatum(L, 2, param1); \
602 Datum ret = FuncName(param0, param1); \
603 LuaPushDatum(L, ret); \
604 return 1; \
605 } \
606 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
607
608#define GLOBAL_SCRIPT_FUNC_R_3(TableName, FuncName) \
609 static int ScriptFunc_##FuncName(lua_State* L) \
610 { \
611 Datum param0; LuaObjectToDatum(L, 1, param0); \
612 Datum param1; LuaObjectToDatum(L, 2, param1); \
613 Datum param2; LuaObjectToDatum(L, 3, param2); \
614 Datum ret = FuncName(param0, param1, param2); \
615 LuaPushDatum(L, ret); \
616 return 1; \
617 } \
618 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
619
620#define GLOBAL_SCRIPT_FUNC_R_4(TableName, FuncName) \
621 static int ScriptFunc_##FuncName(lua_State* L) \
622 { \
623 Datum param0; LuaObjectToDatum(L, 1, param0); \
624 Datum param1; LuaObjectToDatum(L, 2, param1); \
625 Datum param2; LuaObjectToDatum(L, 3, param2); \
626 Datum param3; LuaObjectToDatum(L, 4, param3); \
627 Datum ret = FuncName(param0, param1, param2, param3); \
628 LuaPushDatum(L, ret); \
629 return 1; \
630 } \
631 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
632
633#define GLOBAL_SCRIPT_FUNC_R_5(TableName, FuncName) \
634 static int ScriptFunc_##FuncName(lua_State* L) \
635 { \
636 Datum param0; LuaObjectToDatum(L, 1, param0); \
637 Datum param1; LuaObjectToDatum(L, 2, param1); \
638 Datum param2; LuaObjectToDatum(L, 3, param2); \
639 Datum param3; LuaObjectToDatum(L, 4, param3); \
640 Datum param4; LuaObjectToDatum(L, 5, param4); \
641 Datum ret = FuncName(param0, param1, param2, param3, param4); \
642 LuaPushDatum(L, ret); \
643 return 1; \
644 } \
645 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
646
647#define GLOBAL_SCRIPT_FUNC_R_6(TableName, FuncName) \
648 static int ScriptFunc_##FuncName(lua_State* L) \
649 { \
650 Datum param0; LuaObjectToDatum(L, 1, param0); \
651 Datum param1; LuaObjectToDatum(L, 2, param1); \
652 Datum param2; LuaObjectToDatum(L, 3, param2); \
653 Datum param3; LuaObjectToDatum(L, 4, param3); \
654 Datum param4; LuaObjectToDatum(L, 5, param4); \
655 Datum param5; LuaObjectToDatum(L, 6, param5); \
656 Datum ret = FuncName(param0, param1, param2, param3, param4, param5); \
657 LuaPushDatum(L, ret); \
658 return 1; \
659 } \
660 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
661
662#define GLOBAL_SCRIPT_FUNC_R_7(TableName, FuncName) \
663 static int ScriptFunc_##FuncName(lua_State* L) \
664 { \
665 Datum param0; LuaObjectToDatum(L, 1, param0); \
666 Datum param1; LuaObjectToDatum(L, 2, param1); \
667 Datum param2; LuaObjectToDatum(L, 3, param2); \
668 Datum param3; LuaObjectToDatum(L, 4, param3); \
669 Datum param4; LuaObjectToDatum(L, 5, param4); \
670 Datum param5; LuaObjectToDatum(L, 6, param5); \
671 Datum param6; LuaObjectToDatum(L, 7, param6); \
672 Datum ret = FuncName(param0, param1, param2, param3, param4, param5, param6); \
673 LuaPushDatum(L, ret); \
674 return 1; \
675 } \
676 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
677
678#define GLOBAL_SCRIPT_FUNC_R_8(TableName, FuncName) \
679 static int ScriptFunc_##FuncName(lua_State* L) \
680 { \
681 Datum param0; LuaObjectToDatum(L, 1, param0); \
682 Datum param1; LuaObjectToDatum(L, 2, param1); \
683 Datum param2; LuaObjectToDatum(L, 3, param2); \
684 Datum param3; LuaObjectToDatum(L, 4, param3); \
685 Datum param4; LuaObjectToDatum(L, 5, param4); \
686 Datum param5; LuaObjectToDatum(L, 6, param5); \
687 Datum param6; LuaObjectToDatum(L, 7, param6); \
688 Datum param7; LuaObjectToDatum(L, 8, param7); \
689 Datum ret = FuncName(param0, param1, param2, param3, param4, param5, param6, param7); \
690 LuaPushDatum(L, ret); \
691 return 1; \
692 } \
693 static ScriptFuncAutoReg AutoReg_##FuncName(GetGlobalAutoRegArray(), TableName, #FuncName, ScriptFunc_##FuncName);
694
695// Object Script Functions
696#define OSF(ClassName, FuncName) SCRIPT_FUNC(ClassName, FuncName)
697#define OSF_1(ClassName, FuncName) SCRIPT_FUNC_1(ClassName, FuncName)
698#define OSF_2(ClassName, FuncName) SCRIPT_FUNC_2(ClassName, FuncName)
699#define OSF_3(ClassName, FuncName) SCRIPT_FUNC_3(ClassName, FuncName)
700#define OSF_4(ClassName, FuncName) SCRIPT_FUNC_4(ClassName, FuncName)
701#define OSF_5(ClassName, FuncName) SCRIPT_FUNC_5(ClassName, FuncName)
702#define OSF_6(ClassName, FuncName) SCRIPT_FUNC_6(ClassName, FuncName)
703#define OSF_7(ClassName, FuncName) SCRIPT_FUNC_7(ClassName, FuncName)
704#define OSF_8(ClassName, FuncName) SCRIPT_FUNC_8(ClassName, FuncName)
705#define OSF_R(ClassName, FuncName) SCRIPT_FUNC_R(ClassName, FuncName)
706#define OSF_R_1(ClassName, FuncName) SCRIPT_FUNC_R_1(ClassName, FuncName)
707#define OSF_R_2(ClassName, FuncName) SCRIPT_FUNC_R_2(ClassName, FuncName)
708#define OSF_R_3(ClassName, FuncName) SCRIPT_FUNC_R_3(ClassName, FuncName)
709#define OSF_R_4(ClassName, FuncName) SCRIPT_FUNC_R_4(ClassName, FuncName)
710#define OSF_R_5(ClassName, FuncName) SCRIPT_FUNC_R_5(ClassName, FuncName)
711#define OSF_R_6(ClassName, FuncName) SCRIPT_FUNC_R_6(ClassName, FuncName)
712#define OSF_R_7(ClassName, FuncName) SCRIPT_FUNC_R_7(ClassName, FuncName)
713#define OSF_R_8(ClassName, FuncName) SCRIPT_FUNC_R_8(ClassName, FuncName)
714
715#define TSF(TableName, FuncName) GLOBAL_SCRIPT_FUNC(TableName, FuncName)
716#define TSF_1(TableName, FuncName) GLOBAL_SCRIPT_FUNC_1(TableName, FuncName)
717#define TSF_2(TableName, FuncName) GLOBAL_SCRIPT_FUNC_2(TableName, FuncName)
718#define TSF_3(TableName, FuncName) GLOBAL_SCRIPT_FUNC_3(TableName, FuncName)
719#define TSF_4(TableName, FuncName) GLOBAL_SCRIPT_FUNC_4(TableName, FuncName)
720#define TSF_5(TableName, FuncName) GLOBAL_SCRIPT_FUNC_5(TableName, FuncName)
721#define TSF_6(TableName, FuncName) GLOBAL_SCRIPT_FUNC_6(TableName, FuncName)
722#define TSF_7(TableName, FuncName) GLOBAL_SCRIPT_FUNC_7(TableName, FuncName)
723#define TSF_8(TableName, FuncName) GLOBAL_SCRIPT_FUNC_8(TableName, FuncName)
724#define TSF_R(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R(TableName, FuncName)
725#define TSF_R_1(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_1(TableName, FuncName)
726#define TSF_R_2(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_2(TableName, FuncName)
727#define TSF_R_3(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_3(TableName, FuncName)
728#define TSF_R_4(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_4(TableName, FuncName)
729#define TSF_R_5(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_5(TableName, FuncName)
730#define TSF_R_6(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_6(TableName, FuncName)
731#define TSF_R_7(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_7(TableName, FuncName)
732#define TSF_R_8(TableName, FuncName) GLOBAL_SCRIPT_FUNC_R_8(TableName, FuncName)
733
734#define GSF(FuncName) GLOBAL_SCRIPT_FUNC("", FuncName)
735#define GSF_1(FuncName) GLOBAL_SCRIPT_FUNC_1("", FuncName)
736#define GSF_2(FuncName) GLOBAL_SCRIPT_FUNC_2("", FuncName)
737#define GSF_3(FuncName) GLOBAL_SCRIPT_FUNC_3("", FuncName)
738#define GSF_4(FuncName) GLOBAL_SCRIPT_FUNC_4("", FuncName)
739#define GSF_5(FuncName) GLOBAL_SCRIPT_FUNC_5("", FuncName)
740#define GSF_6(FuncName) GLOBAL_SCRIPT_FUNC_6("", FuncName)
741#define GSF_7(FuncName) GLOBAL_SCRIPT_FUNC_7("", FuncName)
742#define GSF_8(FuncName) GLOBAL_SCRIPT_FUNC_8("", FuncName)
743#define GSF_R(FuncName) GLOBAL_SCRIPT_FUNC_R("", FuncName)
744#define GSF_R_1(FuncName) GLOBAL_SCRIPT_FUNC_R_1("", FuncName)
745#define GSF_R_2(FuncName) GLOBAL_SCRIPT_FUNC_R_2("", FuncName)
746#define GSF_R_3(FuncName) GLOBAL_SCRIPT_FUNC_R_3("", FuncName)
747#define GSF_R_4(FuncName) GLOBAL_SCRIPT_FUNC_R_4("", FuncName)
748#define GSF_R_5(FuncName) GLOBAL_SCRIPT_FUNC_R_5("", FuncName)
749#define GSF_R_6(FuncName) GLOBAL_SCRIPT_FUNC_R_6("", FuncName)
750#define GSF_R_7(FuncName) GLOBAL_SCRIPT_FUNC_R_7("", FuncName)
751#define GSF_R_8(FuncName) GLOBAL_SCRIPT_FUNC_R_8("", FuncName)
752
753// Explicit (needed for pointer conversions and enum to int conversions)
754#define OSFX_1(ClassName, FuncName, P0) SCRIPT_FUNC_X_1(ClassName, FuncName, P0)
755#define OSFX_2(ClassName, FuncName, P0, P1) SCRIPT_FUNC_X_2(ClassName, FuncName, P0, P1)
756#define OSFX_3(ClassName, FuncName, P0, P1, P2) SCRIPT_FUNC_X_3(ClassName, FuncName, P0, P1, P2)
757#define OSFX_4(ClassName, FuncName, P0, P1, P2, P3) SCRIPT_FUNC_X_4(ClassName, FuncName, P0, P1, P2, P3)
758#define OSFX_5(ClassName, FuncName, P0, P1, P2, P3, P4) SCRIPT_FUNC_X_5(ClassName, FuncName, P0, P1, P2, P3, P4)
759#define OSFX_R(ClassName, FuncName, RC) SCRIPT_FUNC_X_R(ClassName, FuncName, RC)
760#define OSFX_R_1(ClassName, FuncName, RC, P0) SCRIPT_FUNC_X_R_1(ClassName, FuncName, RC, P0)
761#define OSFX_R_2(ClassName, FuncName, RC, P0, P1) SCRIPT_FUNC_X_R_2(ClassName, FuncName, RC, P0, P1)
762#define OSFX_R_3(ClassName, FuncName, RC, P0, P1, P2) SCRIPT_FUNC_X_R_3(ClassName, FuncName, RC, P0, P1, P2)
763#define OSFX_R_4(ClassName, FuncName, RC, P0, P1, P2, P3) SCRIPT_FUNC_X_R_4(ClassName, FuncName, RC, P0, P1, P2, P3)
764//#define OSFX_R_5(ClassName, FuncName, RC, P0, P1, P2, P3, P4) SCRIPT_FUNC_X_R_5(ClassName, FuncName, RC, P0, P1, P2, P3, P4)
765
766#define TSFX_1(TableName, FuncName, P0) GLOBAL_SCRIPT_FUNC_X_1(TableName, FuncName, P0)
767#define TSFX_2(TableName, FuncName, P0, P1) GLOBAL_SCRIPT_FUNC_X_2(TableName, FuncName, P0, P1)
768#define TSFX_3(TableName, FuncName, P0, P1, P2) GLOBAL_SCRIPT_FUNC_X_3(TableName, FuncName, P0, P1, P2)
769#define TSFX_4(TableName, FuncName, P0, P1, P2, P3) GLOBAL_SCRIPT_FUNC_X_4(TableName, FuncName, P0, P1, P2, P3)
770#define TSFX_R(TableName, FuncName, RC) GLOBAL_SCRIPT_FUNC_X_R(TableName, FuncName, RC)
771#define TSFX_R_1(TableName, FuncName, RC, P0) GLOBAL_SCRIPT_FUNC_X_R_1(TableName, FuncName, RC, P0)
772#define TSFX_R_2(TableName, FuncName, RC, P0, P1) GLOBAL_SCRIPT_FUNC_X_R_2(TableName, FuncName, RC, P0, P1)
773#define TSFX_R_3(TableName, FuncName, RC, P0, P1, P2) GLOBAL_SCRIPT_FUNC_X_R_3(TableName, FuncName, RC, P0, P1, P2)
774#define TSFX_R_4(TableName, FuncName, RC, P0, P1, P2, P3) GLOBAL_SCRIPT_FUNC_X_R_4(TableName, FuncName, RC, P0, P1, P2, P3)
775
776#define GSFX_1(FuncName, P0) GLOBAL_SCRIPT_FUNC_X_1("", FuncName, P0)
777#define GSFX_2(FuncName, P0, P1) GLOBAL_SCRIPT_FUNC_X_2("", FuncName, P0, P1)
778#define GSFX_3(FuncName, P0, P1, P2) GLOBAL_SCRIPT_FUNC_X_3("", FuncName, P0, P1, P2)
779#define GSFX_4(FuncName, P0, P1, P2, P3) GLOBAL_SCRIPT_FUNC_X_4("", FuncName, P0, P1, P2, P3)
780#define GSFX_R(FuncName, RC) GLOBAL_SCRIPT_FUNC_X_R("", FuncName, RC)
781#define GSFX_R_1(FuncName, RC, P0) GLOBAL_SCRIPT_FUNC_X_R_1("", FuncName, RC, P0)
782#define GSFX_R_2(FuncName, RC, P0, P1) GLOBAL_SCRIPT_FUNC_X_R_2("", FuncName, RC, P0, P1)
783#define GSFX_R_3(FuncName, RC, P0, P1, P2) GLOBAL_SCRIPT_FUNC_X_R_3("", FuncName, RC, P0, P1, P2)
784#define GSFX_R_4(FuncName, RC, P0, P1, P2, P3) GLOBAL_SCRIPT_FUNC_X_R_4("", FuncName, RC, P0, P1, P2, P3)