1 // BlinkenSisters - Hunt for the Lost Pixels
2 //     Bringing back the fun of the 80s
3 //
4 // (C) 2005-07 Rene Schickbauer, Wolfgang Dautermann
5 //
6 // See License.txt for licensing information
7 //
8 
9 #define NEED_REGISTER_FUNCTION
10 #include "bl_lua.h"
11 #undef NEED_REGISTER_FUNCTION
12 
13 #include "globals.h"
14 #include "bl_lua_bindings.h"
15 #include "fgobjects.h"
16 #include "errorhandler.h"
17 #include "lua.h"
18 #include "sound.h"
19 #include "levelhandler.h"
20 #include "engine.h"
21 #include "showvideo.h"
22 #include "triggers.h"
23 #include "outputfilter.h"
24 
l2bDie(lua_State * L)25 static int l2bDie(lua_State *L) {
26 	if(!lua_isstring(L, 1)) {
27 		LUADIE(L, ERROR_LUAL2BTYPE, "");
28 	} else {
29 		LUADIE(L, ERROR_LUAL2BDIE, (char *)lua_tostring(L, 1));
30 	}
31 	return 0;
32 }
33 
l2bLoadGFX(lua_State * L)34 static int l2bLoadGFX(lua_State *L) {
35 	char tmp[1000];
36 	if(!lua_isstring(L, 1)) {
37 		LUADIE(L, ERROR_LUAL2BTYPE, "");
38 	} else {
39 		sprintf(tmp, "%s", lua_tostring(L, 1));
40 	}
41 
42 	Uint32 idx = addFGObjGFX(tmp);
43 	lua_pushnumber(L, idx);
44 
45 	return 1;
46 }
47 
l2bAddObject(lua_State * L)48 static int l2bAddObject(lua_State *L) {
49 	Uint32 gfxobj, x, y;
50 	gfxobj = x = y = 0;
51 	bool isBlocking = false;
52 	bool isVisible = false;
53 	bool isOnTop = false;
54 	bool isKilling = false;
55 	if(!lua_isnumber(L, 1) ||
56 	   !lua_isnumber(L, 2) ||
57 	   !lua_isnumber(L, 3) ||
58 	   !lua_isnumber(L, 4) ||
59 	   !lua_isnumber(L, 5) ||
60 	   !lua_isnumber(L, 6) ||
61 	   !lua_isnumber(L, 7)) {
62 		LUADIE(L, ERROR_LUAL2BTYPE, "");
63 	} else {
64 		gfxobj = (Uint32)lua_tonumber(L, 1);
65 		x = (Uint32)lua_tonumber(L, 2) * TILESIZE;
66 		y = (Uint32)lua_tonumber(L, 3) * TILESIZE;
67 		if(lua_tonumber(L, 4) > 0) {
68 			isBlocking = true;
69 		}
70 		if(lua_tonumber(L, 5) > 0) {
71 			isVisible = true;
72 		}
73 		if(lua_tonumber(L, 6) > 0) {
74 			isOnTop = true;
75 		}
76 		if(lua_tonumber(L, 7) > 0) {
77 			isKilling = true;
78 		}
79 
80 	}
81 
82 	Uint32 idx = addFGObj(gfxobj, x, y, isBlocking, isVisible, isOnTop, isKilling);
83 	lua_pushnumber(L, idx);
84 
85 	return 1;
86 }
87 
88 
l2bSetVisible(lua_State * L)89 static int l2bSetVisible(lua_State *L) {
90 	Uint32 gfxobj = 0;
91 	bool isVisible = false;
92 	if(!lua_isnumber(L, 1) ||
93 	   !lua_isnumber(L, 2)) {
94 		LUADIE(L, ERROR_LUAL2BTYPE, "");
95 	} else {
96 		gfxobj = (Uint32)lua_tonumber(L, 1);
97 		if(lua_tonumber(L, 2) > 0) {
98 			isVisible = true;
99 		}
100 
101 	}
102 
103 	setFGObjSetVisible(gfxobj, isVisible);
104 
105 	return 0;
106 }
107 
l2bSetBlocking(lua_State * L)108 static int l2bSetBlocking(lua_State *L) {
109 	Uint32 gfxobj = 0;
110 	bool isBlocking = false;
111 	if(!lua_isnumber(L, 1) ||
112 	   !lua_isnumber(L, 2)) {
113 		LUADIE(L, ERROR_LUAL2BTYPE, "");
114 	} else {
115 		gfxobj = (Uint32)lua_tonumber(L, 1);
116 		if(lua_tonumber(L, 2) > 0) {
117 			isBlocking = true;
118 		}
119 
120 	}
121 
122 	setFGObjSetBlocking(gfxobj, isBlocking);
123 
124 	return 0;
125 }
126 
l2bSetOnTop(lua_State * L)127 static int l2bSetOnTop(lua_State *L) {
128 	Uint32 gfxobj = 0;
129 	bool isOnTop = false;
130 	if(!lua_isnumber(L, 1) ||
131 	   !lua_isnumber(L, 2)) {
132 		LUADIE(L, ERROR_LUAL2BTYPE, "");
133 	} else {
134 		gfxobj = (Uint32)lua_tonumber(L, 1);
135 		if(lua_tonumber(L, 2) > 0) {
136 			isOnTop = true;
137 		}
138 
139 	}
140 
141 	setFGObjSetOnTop(gfxobj, isOnTop);
142 
143 	return 0;
144 }
145 
l2bSetElevator(lua_State * L)146 static int l2bSetElevator(lua_State *L) {
147 	Uint32 gfxobj = 0;
148 	bool isElevator = false;
149 	if(!lua_isnumber(L, 1) ||
150 	   !lua_isnumber(L, 2)) {
151 		LUADIE(L, ERROR_LUAL2BTYPE, "");
152 	} else {
153 		gfxobj = (Uint32)lua_tonumber(L, 1);
154 		if(lua_tonumber(L, 2) > 0) {
155 			isElevator = true;
156 		}
157 
158 	}
159 
160 	setFGObjSetElevator(gfxobj, isElevator);
161 
162 	return 0;
163 }
164 
l2bSetKilling(lua_State * L)165 static int l2bSetKilling(lua_State *L) {
166 	Uint32 gfxobj = 0;
167 	bool isKilling = false;
168 	if(!lua_isnumber(L, 1) ||
169 	   !lua_isnumber(L, 2)) {
170 		LUADIE(L, ERROR_LUAL2BTYPE, "");
171 	} else {
172 		gfxobj = (Uint32)lua_tonumber(L, 1);
173 		if(lua_tonumber(L, 2) > 0) {
174 			isKilling = true;
175 		}
176 	}
177 
178 	setFGObjSetKilling(gfxobj, isKilling);
179 
180 	return 0;
181 }
182 
l2bSetPixel(lua_State * L)183 static int l2bSetPixel(lua_State *L) {
184 	Uint32 gfxobj = 0;
185 	bool isPixel = false;
186 	if(!lua_isnumber(L, 1) ||
187 	   !lua_isnumber(L, 2)) {
188 		LUADIE(L, ERROR_LUAL2BTYPE, "");
189 	} else {
190 		gfxobj = (Uint32)lua_tonumber(L, 1);
191 		if(lua_tonumber(L, 2) > 0) {
192 			isPixel = true;
193 		}
194 	}
195 
196 	setFGObjSetPixel(gfxobj, isPixel);
197 
198 	return 0;
199 }
200 
l2bSetGFX(lua_State * L)201 static int l2bSetGFX(lua_State *L) {
202 	Uint32 gfxobj, gfx;
203 	gfxobj = gfx = 0;
204 	if(!lua_isnumber(L, 1) ||
205 	   !lua_isnumber(L, 2)) {
206 		LUADIE(L, ERROR_LUAL2BTYPE, "");
207 	} else {
208 		gfxobj = (Uint32)lua_tonumber(L, 1);
209 		gfx = (Uint32)lua_tonumber(L, 2);
210 	}
211 
212 	setFGObjSetGFX(gfxobj, gfx);
213 
214 	return 0;
215 }
216 
l2bSetObjPos(lua_State * L)217 static int l2bSetObjPos(lua_State *L) {
218 	Uint32 gfxobj, x, y;
219 	gfxobj = x = y = 0;
220 	if(!lua_isnumber(L, 1) ||
221 	   !lua_isnumber(L, 2) ||
222 	   !lua_isnumber(L, 3)) {
223 		LUADIE(L, ERROR_LUAL2BTYPE, "");
224 	} else {
225 		gfxobj = (Uint32)lua_tonumber(L, 1);
226 		x = (Sint32)lua_tonumber(L, 2);
227 		y = (Sint32)lua_tonumber(L, 3);
228 	}
229 
230 	setFGObjSetPos(gfxobj, x, y);
231 
232 	return 0;
233 }
234 
l2bSetPlayerX(lua_State * L)235 static int l2bSetPlayerX(lua_State *L) {
236 	Uint32 x;
237 	x = 0;
238 	if(!lua_isnumber(L, 1)) {
239 		LUADIE(L, ERROR_LUAL2BTYPE, "");
240 	} else {
241 		x = (Uint32)lua_tonumber(L, 1);
242 	}
243 
244 	spritex = (double)x;
245 
246 	return 0;
247 }
248 
l2bGetPlayerX(lua_State * L)249 static int l2bGetPlayerX(lua_State *L) {
250 	Uint32 x = (Uint32)spritex;
251 	lua_pushnumber(L, x);
252 
253 	return 1;
254 }
255 
l2bGetPlayerY(lua_State * L)256 static int l2bGetPlayerY(lua_State *L) {
257 	Uint32 y = (Uint32)spritey;
258 	lua_pushnumber(L, y);
259 
260 	return 1;
261 }
262 
263 
l2bSetPlayerY(lua_State * L)264 static int l2bSetPlayerY(lua_State *L) {
265 	Uint32 y;
266 	y = 0;
267 	if(!lua_isnumber(L, 1)) {
268 		LUADIE(L, ERROR_LUAL2BTYPE, "");
269 	} else {
270 		y = (Uint32)lua_tonumber(L, 1);
271 	}
272 
273 	spritey = (double)y;
274 
275 	return 0;
276 }
277 
l2bSetLockedBG(lua_State * L)278 static int l2bSetLockedBG(lua_State *L) {
279 	if(!lua_isnumber(L, 1)) {
280 		LUADIE(L, ERROR_LUAL2BTYPE, "");
281 	} else {
282 		if(lua_tonumber(L, 1) > 0) {
283 			lockedBG = true;
284 		} else {
285 			lockedBG = false;
286 		}
287 	}
288 
289 	return 0;
290 }
291 
l2bSetGravity(lua_State * L)292 static int l2bSetGravity(lua_State *L) {
293 	if(!lua_isnumber(L, 1)) {
294 		LUADIE(L, ERROR_LUAL2BTYPE, "");
295 	} else {
296 		if(lua_tonumber(L, 1) > 0) {
297 			hasGravity = true;
298 		} else {
299 			hasGravity = false;
300 		}
301 	}
302 
303 	return 0;
304 }
305 
l2bSetSpecialTiles(lua_State * L)306 static int l2bSetSpecialTiles(lua_State *L) {
307 	if(!lua_isnumber(L, 1)) {
308 		LUADIE(L, ERROR_LUAL2BTYPE, "");
309 	} else {
310 		if(lua_tonumber(L, 1) > 0) {
311 			canPaintSpecialTiles = true;
312 		} else {
313 			canPaintSpecialTiles = false;
314 		}
315 	}
316 
317 	return 0;
318 }
319 
l2bSetFreeMovement(lua_State * L)320 static int l2bSetFreeMovement(lua_State *L) {
321 	if(!lua_isnumber(L, 1)) {
322 		LUADIE(L, ERROR_LUAL2BTYPE, "");
323 	} else {
324 		if(lua_tonumber(L, 1) > 0) {
325 			freeMovement = true;
326 		} else {
327 			freeMovement = false;
328 		}
329 	}
330 
331 	return 0;
332 }
333 
334 
l2bLoadSoundFX(lua_State * L)335 static int l2bLoadSoundFX(lua_State *L) {
336 	char tmp[1000];
337 	if(!lua_isstring(L, 1)) {
338 		LUADIE(L, ERROR_LUAL2BTYPE, "");
339 	} else {
340 		sprintf(tmp, "%s", lua_tostring(L, 1));
341 	}
342 
343 	Uint32 idx = addSoundFXLua(tmp);
344 	lua_pushnumber(L, idx);
345 
346 	return 1;
347 }
348 
349 
l2bPlaySoundFX(lua_State * L)350 static int l2bPlaySoundFX(lua_State *L) {
351 	Uint32 fx = 0;
352 	if(!lua_isnumber(L, 1)) {
353 		LUADIE(L, ERROR_LUAL2BTYPE, "");
354 	} else {
355 		fx = (Uint32)lua_tonumber(L, 1);
356 	}
357 
358 	soundPlayFXLua(fx);
359 
360 	return 0;
361 }
362 
l2bIncrementMaxPixels(lua_State * L)363 static int l2bIncrementMaxPixels(lua_State *L) {
364 	Uint32 pixels = 0;
365 	if(!lua_isnumber(L, 1)) {
366 		LUADIE(L, ERROR_LUAL2BTYPE, "");
367 	} else {
368 		pixels = (Uint32)lua_tonumber(L, 1);
369 	}
370 
371 	lhandle.numPixels += pixels ;
372 
373 	return 0;
374 }
375 
l2bAddPixel(lua_State * L)376 static int l2bAddPixel(lua_State *L) {
377 	Uint32 x = 0;
378 	Uint32 y = 0;
379 	if(!lua_isnumber(L, 1) ||
380 	   !lua_isnumber(L, 2)) {
381 		LUADIE(L, ERROR_LUAL2BTYPE, "");
382 	} else {
383 		x = (Uint32)lua_tonumber(L, 1) * TILESIZE;
384 		y = (Uint32)lua_tonumber(L, 2) * TILESIZE;
385 	}
386 
387 	addPixel(x, y, PIXELTYPE_PIXEL);
388 
389 	return 0;
390 }
391 
l2bAddGFXPixel(lua_State * L)392 static int l2bAddGFXPixel(lua_State *L) {
393 	Uint32 gfxobj = 0;
394 	Uint32 x = 0;
395 	Uint32 y = 0;
396 	Uint32 incMaxPixel = 0;
397 
398 	if(!lua_isnumber(L, 1) ||
399 	   !lua_isnumber(L, 2) ||
400 	   !lua_isnumber(L, 3) ||
401 	   !lua_isnumber(L, 4)) {
402 		LUADIE(L, ERROR_LUAL2BTYPE, "");
403 	} else {
404 		gfxobj = (Uint32)lua_tonumber(L, 1);
405 		x = (Uint32)lua_tonumber(L, 2) * TILESIZE;
406 		y = (Uint32)lua_tonumber(L, 3) * TILESIZE;
407 		incMaxPixel = (Uint32)lua_tonumber(L, 4);
408 	}
409 
410 	Uint32 idx = addFGObj(gfxobj, x, y, false, true, false, false);
411 	setFGObjSetPixel(idx, true);
412 	if(incMaxPixel) {
413 		lhandle.numPixels ++ ;
414 	}
415 	lua_pushnumber(L, idx);
416 
417 	return 1;
418 }
419 
l2bAddBonusLive(lua_State * L)420 static int l2bAddBonusLive(lua_State *L) {
421 	Uint32 x = 0;
422 	Uint32 y = 0;
423 	if(!lua_isnumber(L, 1) ||
424 	   !lua_isnumber(L, 2)) {
425 		LUADIE(L, ERROR_LUAL2BTYPE, "");
426 	} else {
427 		x = (Uint32)lua_tonumber(L, 1) * TILESIZE;
428 		y = (Uint32)lua_tonumber(L, 2) * TILESIZE;
429 	}
430 
431 	addPixel(x, y, PIXELTYPE_LIVE);
432 
433 	return 0;
434 }
435 
l2bAddBonusPoints(lua_State * L)436 static int l2bAddBonusPoints(lua_State *L) {
437 	Uint32 x = 0;
438 	Uint32 y = 0;
439 	if(!lua_isnumber(L, 1) ||
440 	   !lua_isnumber(L, 2)) {
441 		LUADIE(L, ERROR_LUAL2BTYPE, "");
442 	} else {
443 		x = (Uint32)lua_tonumber(L, 1) * TILESIZE;
444 		y = (Uint32)lua_tonumber(L, 2) * TILESIZE;
445 	}
446 
447 	addPixel(x, y, PIXELTYPE_POINTS);
448 
449 	return 0;
450 }
451 
l2bPlayVideo(lua_State * L)452 static int l2bPlayVideo(lua_State *L) {
453 	char tmp[1000];
454 	bool trackergui = false;
455 	if(!lua_isstring(L, 1) ||
456 	   !lua_isnumber(L, 2)) {
457 		LUADIE(L, ERROR_LUAL2BTYPE, "");
458 	} else {
459 		sprintf(tmp, "%s", lua_tostring(L, 1));
460 		if(lua_tonumber(L, 2) > 0) {
461 			trackergui = true;
462 		}
463 	}
464 
465 	showVideo(tmp, trackergui, false);
466 	gLastTick = BS_GetTicks();
467 
468 	return 0;
469 }
470 
l2bSetCanExit(lua_State * L)471 static int l2bSetCanExit(lua_State *L) {
472 	if(!lua_isnumber(L, 1)) {
473 		LUADIE(L, ERROR_LUAL2BTYPE, "");
474 	} else {
475 		if(lua_tonumber(L, 1) > 0) {
476 			allowedToExit = true;
477 		} else {
478 			allowedToExit = false;
479 		}
480 	}
481 
482 	return 0;
483 }
484 
l2bGetCanExit(lua_State * L)485 static int l2bGetCanExit(lua_State *L) {
486 	Uint32 yesno = 0;
487 	if(allowedToExit) {
488 		yesno = 1;
489 	}
490 	lua_pushnumber(L, yesno);
491 
492 	return 1;
493 }
494 
l2bAddFGTrigger(lua_State * L)495 static int l2bAddFGTrigger(lua_State *L) {
496 	Uint32 gfxobj = 0;
497 	Uint32 x = 0;
498 	Uint32 y = 0;
499 	char funcname[100];
500 	bool isActive = false;
501 	bool isVisible = false;
502 
503 	if(!lua_isnumber(L, 1) ||
504 	   !lua_isnumber(L, 2) ||
505 	   !lua_isnumber(L, 3) ||
506 	   !lua_isstring(L, 4) ||
507 	   !lua_isnumber(L, 5) ||
508 	   !lua_isnumber(L, 6)) {
509 		LUADIE(L, ERROR_LUAL2BTYPE, "");
510 	} else {
511 		gfxobj = (Uint32)lua_tonumber(L, 1);
512 		x = (Uint32)lua_tonumber(L, 2) * TILESIZE;
513 		y = (Uint32)lua_tonumber(L, 3) * TILESIZE;
514 		sprintf(funcname, "%s", lua_tostring(L, 4));
515 		if(lua_tonumber(L, 5) > 0) {
516 			isActive = true;
517 		}
518 		if(lua_tonumber(L, 6) > 0) {
519 			isVisible = true;
520 		}
521 	}
522 
523 	Uint32 idx = addFGObj(gfxobj, x, y, false, isVisible, false, false);
524 	registerFGTrigger(idx, isActive, funcname);
525 	lua_pushnumber(L, idx);
526 
527 	return 1;
528 }
529 
l2bSetTriggerActive(lua_State * L)530 static int l2bSetTriggerActive(lua_State *L) {
531 	Uint32 objid = 0;
532 	bool isActive = false;
533 	if(!lua_isnumber(L, 1) ||
534 	   !lua_isnumber(L, 2)) {
535 		LUADIE(L, ERROR_LUAL2BTYPE, "");
536 	} else {
537 		if(lua_tonumber(L, 2) > 0) {
538 			isActive = true;
539 		}
540 		objid = (Uint32)lua_tonumber(L, 1);
541 	}
542 	setTriggerActive(objid, isActive);
543 
544 	return 0;
545 }
546 
l2bGetCollectedPixelCount(lua_State * L)547 static int l2bGetCollectedPixelCount(lua_State *L) {
548 	lua_pushnumber(L, foundPixels);
549 	return 1;
550 }
551 
l2bSetCollectedPixelCount(lua_State * L)552 static int l2bSetCollectedPixelCount(lua_State *L) {
553 	if(!lua_isnumber(L, 1)) {
554 		LUADIE(L, ERROR_LUAL2BTYPE, "");
555 	} else {
556 		if(lua_tonumber(L, 1) >= 0) {
557 			foundPixels = (Uint32)lua_tonumber(L, 1);
558 		}
559 	}
560 
561 	return 0;
562 }
563 
l2bGetRequiredPixelCount(lua_State * L)564 static int l2bGetRequiredPixelCount(lua_State *L) {
565 	lua_pushnumber(L, lhandle.numPixels);
566 	return 1;
567 }
568 
l2bSetRequiredPixelCount(lua_State * L)569 static int l2bSetRequiredPixelCount(lua_State *L) {
570 	if(!lua_isnumber(L, 1)) {
571 		LUADIE(L, ERROR_LUAL2BTYPE, "");
572 	} else {
573 		if(lua_tonumber(L, 1) >= 0) {
574 			lhandle.numPixels = (Uint32)lua_tonumber(L, 1);
575 		}
576 	}
577 
578 	return 0;
579 }
580 
l2bSetOutputFilter(lua_State * L)581 static int l2bSetOutputFilter(lua_State *L) {
582 	if(!lua_isnumber(L, 1)) {
583 		LUADIE(L, ERROR_LUAL2BTYPE, "");
584 	} else {
585 		if(lua_tonumber(L, 1) >= 0) {
586 			setOutputFilter((Uint32)lua_tonumber(L, 1));
587 		}
588 	}
589 
590 	return 0;
591 }
592 
l2bSetOutputFilterFading(lua_State * L)593 static int l2bSetOutputFilterFading(lua_State *L) {
594 	if(!lua_isnumber(L, 1)) {
595 		LUADIE(L, ERROR_LUAL2BTYPE, "");
596 	} else {
597 		if(lua_tonumber(L, 1) >= 0 && lua_tonumber(L, 1) <= 255) {
598 			setOutputFilterFading((Uint32)lua_tonumber(L, 1));
599 		}
600 	}
601 
602 	return 0;
603 }
604 
605 
l2bKillPlayer(lua_State * L)606 static int l2bKillPlayer(lua_State *L) {
607 	killPlayer = true;
608 
609 	// Avoid compiler warning about unused argument (because prototype requires it)
610 	if(!L) {
611         return 0;
612     }
613 
614 	return 0;
615 }
616 
blRegisterLuaBindings(lua_State * L)617 void blRegisterLuaBindings(lua_State *L) {
618 	REGISTER(l2bDie, "Die");
619 	REGISTER(l2bLoadGFX, "LoadGFX");
620 	REGISTER(l2bAddObject, "AddObject");
621 	REGISTER(l2bSetVisible, "SetVisible");
622 	REGISTER(l2bSetBlocking, "SetBlocking");
623 	REGISTER(l2bSetOnTop, "SetOnTop");
624 	REGISTER(l2bSetElevator, "SetElevator");
625 	REGISTER(l2bSetKilling, "SetKilling");
626 	REGISTER(l2bSetPixel, "SetPixel");
627 	REGISTER(l2bSetGFX, "SetGFX");
628 	REGISTER(l2bSetObjPos, "SetObjPos");
629 	REGISTER(l2bSetPlayerX, "SetPlayerX");
630 	REGISTER(l2bGetPlayerX, "GetPlayerX");
631 	REGISTER(l2bSetPlayerY, "SetPlayerY");
632 	REGISTER(l2bGetPlayerY, "GetPlayerY");
633 	REGISTER(l2bLoadSoundFX, "LoadSoundFX");
634 	REGISTER(l2bPlaySoundFX, "PlaySoundFX");
635 	REGISTER(l2bIncrementMaxPixels, "IncMaxPixels");
636 	REGISTER(l2bAddPixel, "AddPixel");
637 	REGISTER(l2bAddGFXPixel, "AddGFXPixel");
638 	REGISTER(l2bAddBonusLive, "AddBonusLive");
639 	REGISTER(l2bAddBonusPoints, "AddBonusPoints");
640 	REGISTER(l2bSetLockedBG, "SetLockedBG");
641 	REGISTER(l2bSetGravity, "SetGravity");
642 	REGISTER(l2bSetSpecialTiles, "SetSpecialTiles");
643 	REGISTER(l2bSetFreeMovement, "SetFreeMovement");
644 	REGISTER(l2bPlayVideo, "PlayVideo");
645 	REGISTER(l2bSetCanExit, "SetCanExit");
646 	REGISTER(l2bGetCanExit, "GetCanExit");
647 	REGISTER(l2bAddFGTrigger, "AddFGTrigger");
648 	REGISTER(l2bSetTriggerActive, "SetTriggerActive");
649 	REGISTER(l2bGetCollectedPixelCount, "GetCollectedPixelCount");
650 	REGISTER(l2bGetRequiredPixelCount, "GetRequiredPixelCount");
651 	REGISTER(l2bSetCollectedPixelCount, "SetCollectedPixelCount");
652 	REGISTER(l2bSetRequiredPixelCount, "SetRequiredPixelCount");
653 	REGISTER(l2bSetOutputFilter, "SetOutputFilter");
654 	REGISTER(l2bSetOutputFilterFading, "SetOutputFilterFading");
655 	REGISTER(l2bKillPlayer, "KillPlayer");
656 
657 
658     // Register required GLOBALS
659     REGISTERGLOBAL(OUTPUTFILTER_NONE, "OUTPUTFILTER_NONE");
660     REGISTERGLOBAL(OUTPUTFILTER_GREYSCALE, "OUTPUTFILTER_GREYSCALE");
661     REGISTERGLOBAL(OUTPUTFILTER_COLORINVERT, "OUTPUTFILTER_COLORINVERT");
662     REGISTERGLOBAL(OUTPUTFILTER_NOISERECT, "OUTPUTFILTER_NOISERECT");
663     REGISTERGLOBAL(OUTPUTFILTER_NOISECIRCLE, "OUTPUTFILTER_NOISECIRCLE");
664     REGISTERGLOBAL(OUTPUTFILTER_NOISESTRIPE, "OUTPUTFILTER_NOISESTRIPE");
665 
666 
667 }
668 
669