diff --git a/rcbasic_build/rc_builtin.h b/rcbasic_build/rc_builtin.h index 1c6b5b1..bf18845 100755 --- a/rcbasic_build/rc_builtin.h +++ b/rcbasic_build/rc_builtin.h @@ -1,1448 +1,2526 @@ -#ifndef RC_BUILTIN_H_INCLUDED -#define RC_BUILTIN_H_INCLUDED -#include "identifier.h" - -void init_embedded_functions() -{ - embed_function("FPrint", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("Input$", ID_TYPE_FN_STR); - add_embedded_arg("prompt$", ID_TYPE_STR); - embed_function("ArrayDim", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_NUM); - embed_function("StringArrayDim", ID_TYPE_FN_NUM); - add_embedded_arg("id$", ID_TYPE_BYREF_STR); - embed_function("NumberArrayDim", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_NUM); - embed_function("ArraySize", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_NUM); - add_embedded_arg("array_dim", ID_TYPE_NUM); - embed_function("StringArraySize", ID_TYPE_FN_NUM); - add_embedded_arg("id$", ID_TYPE_BYREF_STR); - add_embedded_arg("array_dim", ID_TYPE_NUM); - embed_function("NumberArraySize", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_NUM); - add_embedded_arg("array_dim", ID_TYPE_NUM); - embed_function("Abs", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("ACos", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("AndBit", ID_TYPE_FN_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("ASin", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("ATan", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Bin$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("CInt32", ID_TYPE_FN_NUM); - add_embedded_arg("i", ID_TYPE_NUM); - embed_function("CInt64", ID_TYPE_FN_NUM); - add_embedded_arg("i", ID_TYPE_NUM); - embed_function("Cos", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Degrees", ID_TYPE_FN_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - embed_function("Exp", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Frac", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Hex$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("HexVal", ID_TYPE_FN_NUM); - add_embedded_arg("n$", ID_TYPE_STR); - embed_function("Int", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Log", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Max", ID_TYPE_FN_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("Min", ID_TYPE_FN_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("OrBit", ID_TYPE_FN_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("Radians", ID_TYPE_FN_NUM); - add_embedded_arg("d", ID_TYPE_NUM); - embed_function("Randomize", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Rand", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Round", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Sign", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Sin", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Sqrt", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Tan", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("XOrBit", ID_TYPE_FN_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("Asc", ID_TYPE_FN_NUM); - add_embedded_arg("c$", ID_TYPE_STR); - embed_function("Chr$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Insert$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("tgt$", ID_TYPE_STR); - add_embedded_arg("pos", ID_TYPE_NUM); - embed_function("InStr", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("substr$", ID_TYPE_STR); - embed_function("LCase$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("Left$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Length", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("Len", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("LTrim$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("Mid$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("start", ID_TYPE_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("ReplaceSubstr$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("rpc$", ID_TYPE_STR); - add_embedded_arg("pos", ID_TYPE_NUM); - embed_function("Replace$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("tgt$", ID_TYPE_STR); - add_embedded_arg("rpc$", ID_TYPE_STR); - embed_function("Reverse$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("Right$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("RTrim$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("StringFill$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Str$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Str_F$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Str_S$", ID_TYPE_FN_STR); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Tally", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("substr$", ID_TYPE_STR); - embed_function("Trim$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("UCase$", ID_TYPE_FN_STR); - add_embedded_arg("src$", ID_TYPE_STR); - embed_function("Val", ID_TYPE_FN_NUM); - add_embedded_arg("n$", ID_TYPE_STR); - embed_function("Stack_N", ID_TYPE_SUB); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Stack_S", ID_TYPE_SUB); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Push_N", ID_TYPE_SUB); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("Pop_N", ID_TYPE_FN_NUM); - embed_function("Push_S", ID_TYPE_SUB); - add_embedded_arg("s$", ID_TYPE_STR); - embed_function("Pop_S$", ID_TYPE_FN_STR); - embed_function("Stack_Size_N", ID_TYPE_FN_NUM); - embed_function("Stack_Size_S", ID_TYPE_FN_NUM); - embed_function("FileOpen", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("fileName$", ID_TYPE_STR); - add_embedded_arg("mode", ID_TYPE_NUM); - embed_function("FileClose", ID_TYPE_SUB); - add_embedded_arg("stream", ID_TYPE_NUM); - embed_function("ReadByte", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - embed_function("WriteByte", ID_TYPE_SUB); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("byte", ID_TYPE_NUM); - embed_function("ReadLine$", ID_TYPE_FN_STR); - add_embedded_arg("stream", ID_TYPE_NUM); - embed_function("Write", ID_TYPE_SUB); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("WriteLine", ID_TYPE_SUB); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("CopyFile", ID_TYPE_SUB); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("dst$", ID_TYPE_STR); - embed_function("RemoveFile", ID_TYPE_FN_NUM); - add_embedded_arg("fileName$", ID_TYPE_STR); - embed_function("FileExists", ID_TYPE_FN_NUM); - add_embedded_arg("fileName$", ID_TYPE_STR); - embed_function("MoveFile", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("dst$", ID_TYPE_STR); - embed_function("RenameFile", ID_TYPE_FN_NUM); - add_embedded_arg("src$", ID_TYPE_STR); - add_embedded_arg("dst$", ID_TYPE_STR); - embed_function("FileLength", ID_TYPE_FN_NUM); - add_embedded_arg("fileName$", ID_TYPE_STR); - embed_function("Tell", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - embed_function("Seek", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("pos", ID_TYPE_NUM); - embed_function("EOF", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - embed_function("FreeFile", ID_TYPE_FN_NUM); - embed_function("ChangeDir", ID_TYPE_SUB); - add_embedded_arg("p$", ID_TYPE_STR); - embed_function("DirExists", ID_TYPE_FN_NUM); - add_embedded_arg("p$", ID_TYPE_STR); - embed_function("DirFirst$", ID_TYPE_FN_STR); - embed_function("Dir$", ID_TYPE_FN_STR); - embed_function("DirNext$", ID_TYPE_FN_STR); - embed_function("MakeDir", ID_TYPE_FN_NUM); - add_embedded_arg("p$", ID_TYPE_STR); - embed_function("RemoveDir", ID_TYPE_FN_NUM); - add_embedded_arg("p$", ID_TYPE_STR); - embed_function("Date$", ID_TYPE_FN_STR); - embed_function("Easter$", ID_TYPE_FN_STR); - add_embedded_arg("year", ID_TYPE_NUM); - embed_function("Ticks", ID_TYPE_FN_NUM); - embed_function("Time$", ID_TYPE_FN_STR); - embed_function("Timer", ID_TYPE_FN_NUM); - embed_function("Wait", ID_TYPE_SUB); - add_embedded_arg("m_sec", ID_TYPE_NUM); - embed_function("WindowOpen", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("title$", ID_TYPE_STR); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - add_embedded_arg("vsync", ID_TYPE_NUM); - embed_function("WindowClose", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("RaiseWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("Window", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("Update", ID_TYPE_SUB); - embed_function("Cls", ID_TYPE_SUB); - embed_function("SetClearColor", ID_TYPE_SUB); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("ShowWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("HideWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("SetWindowTitle", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("title$", ID_TYPE_STR); - embed_function("WindowTitle$", ID_TYPE_FN_STR); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("SetWindowPosition", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("GetWindowPosition", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - embed_function("SetWindowSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("GetWindowSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("SetWindowMinSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("GetWindowMinSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("SetWindowMaxSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("GetWindowMaxSize", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("WindowIsFullscreen", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowIsVisible", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowIsBordered", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowIsResizable", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowIsMinimized", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowIsMaximized", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowHasInputFocus", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowHasMouseFocus", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("SetWindowFullscreen", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("MaximizeWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("MinimizeWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("SetWindowBorder", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("WindowClip", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("WindowExists", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("NumWindows", ID_TYPE_FN_NUM); - embed_function("WindowEvent_Close", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowEvent_Maximize", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("WindowEvent_Minimize", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("ActiveWindow", ID_TYPE_FN_NUM); - embed_function("FPS", ID_TYPE_FN_NUM); - embed_function("SetWindowIcon", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("CanvasOpen", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("viewport_x", ID_TYPE_NUM); - add_embedded_arg("viewport_y", ID_TYPE_NUM); - add_embedded_arg("viewport_w", ID_TYPE_NUM); - add_embedded_arg("viewport_h", ID_TYPE_NUM); - add_embedded_arg("mode", ID_TYPE_NUM); - embed_function("CanvasClose", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("SetCanvasVisible", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("CanvasIsVisible", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("SetCanvasViewport", ID_TYPE_SUB); - add_embedded_arg("cnum", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("GetCanvasViewport", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("Canvas", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("SetCanvasOffset", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("GetCanvasOffset", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - embed_function("GetCanvasSize", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("ClearCanvas", ID_TYPE_SUB); - embed_function("SetCanvasAlpha", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - embed_function("CanvasAlpha", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("SetCanvasBlendMode", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("blend_mode", ID_TYPE_NUM); - embed_function("CanvasBlendMode", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("SetCanvasColorMod", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("CanvasColorMod", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("CopyCanvas", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("dst", ID_TYPE_NUM); - add_embedded_arg("dx", ID_TYPE_NUM); - add_embedded_arg("dy", ID_TYPE_NUM); - embed_function("CloneCanvas", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_NUM); - add_embedded_arg("dst", ID_TYPE_NUM); - embed_function("SetCanvasZ", ID_TYPE_SUB); - add_embedded_arg("c_num", ID_TYPE_NUM); - add_embedded_arg("z", ID_TYPE_NUM); - embed_function("CanvasZ", ID_TYPE_FN_NUM); - add_embedded_arg("c_num", ID_TYPE_NUM); - embed_function("CanvasClip", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("ActiveCanvas", ID_TYPE_FN_NUM); - embed_function("Box", ID_TYPE_SUB); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - embed_function("BoxFill", ID_TYPE_SUB); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - embed_function("Circle", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("radius", ID_TYPE_NUM); - embed_function("CircleFill", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("radius", ID_TYPE_NUM); - embed_function("Ellipse", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("rx", ID_TYPE_NUM); - add_embedded_arg("ry", ID_TYPE_NUM); - embed_function("EllipseFill", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("rx", ID_TYPE_NUM); - add_embedded_arg("ry", ID_TYPE_NUM); - embed_function("FloodFill", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("GetPixel", ID_TYPE_FN_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("SetColor", ID_TYPE_SUB); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("Line", ID_TYPE_SUB); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - embed_function("Poly", ID_TYPE_SUB); - add_embedded_arg("n", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - embed_function("PolyFill", ID_TYPE_SUB); - add_embedded_arg("n", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - embed_function("Rect", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("RectFill", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("RoundRect", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - embed_function("RoundRectFill", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - embed_function("RGB", ID_TYPE_FN_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("g", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - embed_function("RGBA", ID_TYPE_FN_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("g", ID_TYPE_NUM); - add_embedded_arg("b", ID_TYPE_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - embed_function("PSet", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("LoadImage", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("img$", ID_TYPE_STR); - embed_function("LoadImage_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("img$", ID_TYPE_STR); - add_embedded_arg("colkey", ID_TYPE_NUM); - embed_function("ImageFromBuffer", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - embed_function("ImageFromBuffer_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - add_embedded_arg("colkey", ID_TYPE_NUM); - embed_function("BufferFromImage", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - embed_function("ImageExists", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("ColorKey", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("CopyImage", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_NUM); - add_embedded_arg("dst", ID_TYPE_NUM); - embed_function("DeleteImage", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("SetImageAlpha", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("a", ID_TYPE_NUM); - embed_function("ImageAlpha", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("GetImageSize", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("SetImageBlendMode", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("blend_mode", ID_TYPE_NUM); - embed_function("ImageBlendMode", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("SetImageColorMod", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("ImageColorMod", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("DrawImage", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("DrawImage_Blit", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - embed_function("DrawImage_Blit_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - embed_function("DrawImage_Rotate", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - embed_function("DrawImage_Rotate_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - embed_function("DrawImage_Zoom", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("zx", ID_TYPE_NUM); - add_embedded_arg("zy", ID_TYPE_NUM); - embed_function("DrawImage_Zoom_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - add_embedded_arg("zx", ID_TYPE_NUM); - add_embedded_arg("zy", ID_TYPE_NUM); - embed_function("DrawImage_Rotozoom", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - add_embedded_arg("zx", ID_TYPE_NUM); - add_embedded_arg("zy", ID_TYPE_NUM); - embed_function("DrawImage_Rotozoom_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - add_embedded_arg("zx", ID_TYPE_NUM); - add_embedded_arg("zy", ID_TYPE_NUM); - embed_function("DrawImage_Flip", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("DrawImage_Flip_Ex", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("InKey", ID_TYPE_FN_NUM); - embed_function("Key", ID_TYPE_FN_NUM); - add_embedded_arg("key_code", ID_TYPE_NUM); - embed_function("WaitKey", ID_TYPE_FN_NUM); - embed_function("HideMouse", ID_TYPE_SUB); - embed_function("ShowMouse", ID_TYPE_SUB); - embed_function("MouseIsVisible", ID_TYPE_FN_NUM); - embed_function("GetMouse", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); - embed_function("MouseX", ID_TYPE_FN_NUM); - embed_function("MouseY", ID_TYPE_FN_NUM); - embed_function("MouseButton", ID_TYPE_FN_NUM); - add_embedded_arg("mb", ID_TYPE_NUM); - embed_function("GetMouseWheel", ID_TYPE_SUB); - add_embedded_arg("x_axis", ID_TYPE_BYREF_NUM); - add_embedded_arg("y_axis", ID_TYPE_BYREF_NUM); - embed_function("MouseWheelX", ID_TYPE_FN_NUM); - embed_function("MouseWheelY", ID_TYPE_FN_NUM); - embed_function("SoundFromBuffer", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - add_embedded_arg("buffer_size", ID_TYPE_NUM); - add_embedded_arg("vol", ID_TYPE_NUM); - embed_function("LoadSound", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("snd_file$", ID_TYPE_STR); - embed_function("LoadMusic", ID_TYPE_SUB); - add_embedded_arg("music_file$", ID_TYPE_STR); - embed_function("PlaySound", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("loops", ID_TYPE_NUM); - embed_function("PlaySoundTimed", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("loops", ID_TYPE_NUM); - add_embedded_arg("ms", ID_TYPE_NUM); - embed_function("PlayMusic", ID_TYPE_SUB); - add_embedded_arg("mLoops", ID_TYPE_NUM); - embed_function("PauseSound", ID_TYPE_SUB); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("ResumeSound", ID_TYPE_SUB); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("PauseMusic", ID_TYPE_SUB); - embed_function("ResumeMusic", ID_TYPE_SUB); - embed_function("DeleteSound", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("DeleteMusic", ID_TYPE_SUB); - embed_function("FadeMusicIn", ID_TYPE_SUB); - add_embedded_arg("fade_time", ID_TYPE_NUM); - add_embedded_arg("loops", ID_TYPE_NUM); - embed_function("FadeMusicOut", ID_TYPE_SUB); - add_embedded_arg("fade_time", ID_TYPE_NUM); - embed_function("MusicExists", ID_TYPE_FN_NUM); - embed_function("SetMusicVolume", ID_TYPE_SUB); - add_embedded_arg("vol", ID_TYPE_NUM); - embed_function("MusicVolume", ID_TYPE_FN_NUM); - embed_function("SetMusicPosition", ID_TYPE_SUB); - add_embedded_arg("pos", ID_TYPE_NUM); - embed_function("MusicPosition", ID_TYPE_FN_NUM); - embed_function("RewindMusic", ID_TYPE_SUB); - embed_function("SetSoundChannels", ID_TYPE_SUB); - add_embedded_arg("max_channels", ID_TYPE_NUM); - embed_function("NumSoundChannels", ID_TYPE_FN_NUM); - embed_function("SoundIsEnabled", ID_TYPE_FN_NUM); - embed_function("SoundExists", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("SetChannelVolume", ID_TYPE_SUB); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("vol", ID_TYPE_NUM); - embed_function("ChannelVolume", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("SetSoundVolume", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("vol", ID_TYPE_NUM); - embed_function("SoundVolume", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("StopMusic", ID_TYPE_SUB); - embed_function("StopSound", ID_TYPE_SUB); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("SetChannelPanning", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("left_value", ID_TYPE_NUM); - add_embedded_arg("right_value", ID_TYPE_NUM); - embed_function("SetChannelDistance", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("dist_value", ID_TYPE_NUM); - embed_function("ChannelIsPlaying", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("ChannelIsPaused", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - embed_function("NumJoysticks", ID_TYPE_FN_NUM); - embed_function("NumJoyAxes", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("NumJoyButtons", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("NumJoyHats", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("NumJoyTrackBalls", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("JoyAxis", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - add_embedded_arg("joy_axis", ID_TYPE_NUM); - embed_function("JoyButton", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - add_embedded_arg("joy_button", ID_TYPE_NUM); - embed_function("JoyHat", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - add_embedded_arg("joy_hat", ID_TYPE_NUM); - embed_function("GetJoyTrackBall", ID_TYPE_SUB); - add_embedded_arg("joy_num", ID_TYPE_NUM); - add_embedded_arg("ball", ID_TYPE_NUM); - add_embedded_arg("dx", ID_TYPE_BYREF_NUM); - add_embedded_arg("dy", ID_TYPE_BYREF_NUM); - embed_function("JoyName$", ID_TYPE_FN_STR); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("JoystickIsConnected", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("GetCursor", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - embed_function("PrintS", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("InputS$", ID_TYPE_FN_STR); - add_embedded_arg("prompt$", ID_TYPE_STR); - embed_function("ZoneInputS$", ID_TYPE_FN_STR); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("Locate", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("ReadInput_Start", ID_TYPE_SUB); - embed_function("ReadInput_Stop", ID_TYPE_SUB); - embed_function("ReadInput_Text$", ID_TYPE_FN_STR); - embed_function("ReadInput_SetText", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("ReadInput_ToggleBackspace", ID_TYPE_SUB); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("LoadFont", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("fnt_file$", ID_TYPE_STR); - add_embedded_arg("size", ID_TYPE_NUM); - embed_function("DeleteFont", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("FontIsLoaded", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("Font", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - embed_function("SetFontStyle", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("style", ID_TYPE_NUM); - embed_function("DrawText", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("DrawText_Shaded", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("fg_color", ID_TYPE_NUM); - add_embedded_arg("bg_color", ID_TYPE_NUM); - embed_function("DrawText_Blended", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("RenderText", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("GetTextSize", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("txt$", ID_TYPE_STR); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("TouchPressure", ID_TYPE_FN_NUM); - embed_function("GetTouch", ID_TYPE_SUB); - add_embedded_arg("status", ID_TYPE_BYREF_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("dx", ID_TYPE_BYREF_NUM); - add_embedded_arg("dy", ID_TYPE_BYREF_NUM); - embed_function("GetMultiTouch", ID_TYPE_SUB); - add_embedded_arg("status", ID_TYPE_BYREF_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("fingers", ID_TYPE_BYREF_NUM); - add_embedded_arg("dist", ID_TYPE_BYREF_NUM); - add_embedded_arg("theta", ID_TYPE_BYREF_NUM); - embed_function("GetTouchFinger", ID_TYPE_SUB); - add_embedded_arg("finger", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("pressure", ID_TYPE_BYREF_NUM); - embed_function("NumFingers", ID_TYPE_FN_NUM); - embed_function("CheckSockets", ID_TYPE_FN_NUM); - add_embedded_arg("timeout_ms", ID_TYPE_NUM); - embed_function("TCP_SocketReady", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("UDP_SocketReady", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("TCP_SocketOpen", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("host$", ID_TYPE_STR); - add_embedded_arg("port", ID_TYPE_NUM); - embed_function("TCP_SocketClose", ID_TYPE_SUB); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("TCP_RemoteHost", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("TCP_RemotePort", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("TCP_GetData", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("sData$", ID_TYPE_BYREF_STR); - add_embedded_arg("numBytes", ID_TYPE_NUM); - embed_function("TCP_SendData", ID_TYPE_SUB); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("sData$", ID_TYPE_STR); - embed_function("TCP_AcceptSocket", ID_TYPE_FN_NUM); - add_embedded_arg("server", ID_TYPE_NUM); - add_embedded_arg("client", ID_TYPE_NUM); - embed_function("UDP_SocketOpen", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("port", ID_TYPE_NUM); - embed_function("UDP_SocketClose", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("UDP_GetData", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("sData$", ID_TYPE_BYREF_STR); - add_embedded_arg("host$", ID_TYPE_BYREF_STR); - add_embedded_arg("port", ID_TYPE_BYREF_NUM); - embed_function("UDP_Length", ID_TYPE_FN_NUM); - embed_function("UDP_MaxLength", ID_TYPE_FN_NUM); - embed_function("UDP_RemoteHost$", ID_TYPE_FN_STR); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("UDP_RemotePort", ID_TYPE_FN_NUM); - add_embedded_arg("socket", ID_TYPE_NUM); - embed_function("UDP_SendData", ID_TYPE_SUB); - add_embedded_arg("socket", ID_TYPE_NUM); - add_embedded_arg("sData$", ID_TYPE_STR); - add_embedded_arg("host$", ID_TYPE_STR); - add_embedded_arg("port", ID_TYPE_NUM); - embed_function("LoadVideo", ID_TYPE_SUB); - add_embedded_arg("vid$", ID_TYPE_STR); - embed_function("PlayVideo", ID_TYPE_SUB); - add_embedded_arg("vLoops", ID_TYPE_NUM); - embed_function("PauseVideo", ID_TYPE_SUB); - embed_function("StopVideo", ID_TYPE_SUB); - embed_function("SetVideoPosition", ID_TYPE_SUB); - add_embedded_arg("pos", ID_TYPE_NUM); - embed_function("ResumeVideo", ID_TYPE_SUB); - embed_function("VideoPosition", ID_TYPE_FN_NUM); - embed_function("DeleteVideo", ID_TYPE_SUB); - embed_function("VideoIsPlaying", ID_TYPE_FN_NUM); - embed_function("VideoEnd", ID_TYPE_FN_NUM); - embed_function("GetVideoStats", ID_TYPE_SUB); - add_embedded_arg("vFile$", ID_TYPE_STR); - add_embedded_arg("vLen", ID_TYPE_BYREF_NUM); - add_embedded_arg("vfps", ID_TYPE_BYREF_NUM); - add_embedded_arg("frame_w", ID_TYPE_BYREF_NUM); - add_embedded_arg("frame_h", ID_TYPE_BYREF_NUM); - embed_function("SetVideoDrawRect", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("GetVideoDrawRect", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("GetVideoSize", ID_TYPE_SUB); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - embed_function("VideoExists", ID_TYPE_FN_NUM); - embed_function("SetVideoAlpha", ID_TYPE_SUB); - add_embedded_arg("a", ID_TYPE_NUM); - embed_function("System", ID_TYPE_FN_NUM); - add_embedded_arg("cmd$", ID_TYPE_STR); - embed_function("OS$", ID_TYPE_FN_STR); - embed_function("Command$", ID_TYPE_FN_STR); - add_embedded_arg("arg", ID_TYPE_NUM); - embed_function("NumCommands", ID_TYPE_FN_NUM); - embed_function("Env$", ID_TYPE_FN_STR); - add_embedded_arg("v$", ID_TYPE_STR); - embed_function("SetEnv", ID_TYPE_SUB); - add_embedded_arg("var$", ID_TYPE_STR); - add_embedded_arg("value$", ID_TYPE_STR); - add_embedded_arg("overwrite", ID_TYPE_NUM); - embed_function("PrefPath$", ID_TYPE_FN_STR); - add_embedded_arg("org_name$", ID_TYPE_STR); - add_embedded_arg("app_name$", ID_TYPE_STR); - embed_function("Android_GetExternalStoragePath$", ID_TYPE_FN_STR); - embed_function("Android_GetExternalStorageState", ID_TYPE_FN_NUM); - embed_function("Android_GetInternalStoragePath$", ID_TYPE_FN_STR); - embed_function("Android_JNI_Message$", ID_TYPE_FN_STR); - add_embedded_arg("arg$", ID_TYPE_STR); - embed_function("Runtime_Utility_Message$", ID_TYPE_FN_STR); - add_embedded_arg("arg$", ID_TYPE_STR); - embed_function("ClipboardText$", ID_TYPE_FN_STR); - embed_function("SetClipboardText", ID_TYPE_SUB); - add_embedded_arg("txt$", ID_TYPE_STR); - embed_function("HasClipboardText", ID_TYPE_FN_NUM); - embed_function("GetDesktopDisplayMode", ID_TYPE_SUB); - add_embedded_arg("index", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_BYREF_NUM); - add_embedded_arg("h", ID_TYPE_BYREF_NUM); - add_embedded_arg("freq", ID_TYPE_BYREF_NUM); - embed_function("DrawImage_Transform", ID_TYPE_SUB); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - add_embedded_arg("src_x", ID_TYPE_NUM); - add_embedded_arg("src_y", ID_TYPE_NUM); - add_embedded_arg("src_w", ID_TYPE_NUM); - add_embedded_arg("src_h", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - add_embedded_arg("center_x", ID_TYPE_NUM); - add_embedded_arg("center_y", ID_TYPE_NUM); - add_embedded_arg("flip_h", ID_TYPE_NUM); - add_embedded_arg("flip_v", ID_TYPE_NUM); - embed_function("GetPowerInfo", ID_TYPE_SUB); - add_embedded_arg("status", ID_TYPE_BYREF_NUM); - add_embedded_arg("secs", ID_TYPE_BYREF_NUM); - add_embedded_arg("pct", ID_TYPE_BYREF_NUM); - embed_function("SystemRam", ID_TYPE_FN_NUM); - embed_function("SetRenderScaleQuality", ID_TYPE_FN_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("EvalJS$", ID_TYPE_FN_STR); - add_embedded_arg("js_code$", ID_TYPE_STR); - embed_function("GetRenderScaleQuality", ID_TYPE_FN_NUM); - embed_function("GetGlobalMouse", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); - add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); - embed_function("GlobalMouseX", ID_TYPE_FN_NUM); - embed_function("GlobalMouseY", ID_TYPE_FN_NUM); - embed_function("GetAccel", ID_TYPE_SUB); - add_embedded_arg("accel_num", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("z", ID_TYPE_BYREF_NUM); - embed_function("AccelName$", ID_TYPE_FN_STR); - add_embedded_arg("accel_num", ID_TYPE_NUM); - embed_function("NumAccels", ID_TYPE_FN_NUM); - embed_function("GetGyro", ID_TYPE_SUB); - add_embedded_arg("gyro_num", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_BYREF_NUM); - add_embedded_arg("y", ID_TYPE_BYREF_NUM); - add_embedded_arg("z", ID_TYPE_BYREF_NUM); - embed_function("GyroName$", ID_TYPE_FN_STR); - add_embedded_arg("gyro_num", ID_TYPE_NUM); - embed_function("NumGyros", ID_TYPE_FN_NUM); - embed_function("JoyRumblePlay", ID_TYPE_SUB); - add_embedded_arg("joy_num", ID_TYPE_NUM); - add_embedded_arg("strength", ID_TYPE_NUM); - add_embedded_arg("duration", ID_TYPE_NUM); - embed_function("JoyRumbleStop", ID_TYPE_SUB); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("JoystickIsHaptic", ID_TYPE_FN_NUM); - add_embedded_arg("joy_num", ID_TYPE_NUM); - embed_function("WriteByteBuffer", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("buf", ID_TYPE_BYREF_NUM); - add_embedded_arg("buf_size", ID_TYPE_NUM); - embed_function("ReadByteBuffer", ID_TYPE_FN_NUM); - add_embedded_arg("stream", ID_TYPE_NUM); - add_embedded_arg("buf", ID_TYPE_BYREF_NUM); - add_embedded_arg("buf_size", ID_TYPE_NUM); - embed_function("WindowEvent_Resize", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("SetWindowAutoClose", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("exit_on_close", ID_TYPE_NUM); - embed_function("SetWindowResizable", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("SystemReturnStdOut$", ID_TYPE_FN_STR); - add_embedded_arg("cmd$", ID_TYPE_STR); - embed_function("WindowMode", ID_TYPE_FN_NUM); - add_embedded_arg("visible", ID_TYPE_NUM); - add_embedded_arg("fullscreen", ID_TYPE_NUM); - add_embedded_arg("resizable", ID_TYPE_NUM); - add_embedded_arg("borderless", ID_TYPE_NUM); - add_embedded_arg("highDPI", ID_TYPE_NUM); - embed_function("WindowFlags", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("RestoreWindow", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("UpdateAllWindows", ID_TYPE_SUB); - embed_function("QueryAudioSpec", ID_TYPE_FN_NUM); - add_embedded_arg("freq", ID_TYPE_BYREF_NUM); - add_embedded_arg("format", ID_TYPE_BYREF_NUM); - add_embedded_arg("channels", ID_TYPE_BYREF_NUM); - embed_function("MusicIsPlaying", ID_TYPE_FN_NUM); - embed_function("DrawGeometry", ID_TYPE_FN_NUM); - add_embedded_arg("slot", ID_TYPE_NUM); - add_embedded_arg("num_vertices", ID_TYPE_NUM); - add_embedded_arg("vertices", ID_TYPE_BYREF_NUM); - add_embedded_arg("num_indices", ID_TYPE_NUM); - add_embedded_arg("Indices", ID_TYPE_BYREF_NUM); - embed_function("Size", ID_TYPE_FN_NUM); - add_embedded_arg("s$", ID_TYPE_STR); - embed_function("BufferFromString", ID_TYPE_FN_NUM); - add_embedded_arg("s$", ID_TYPE_STR); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - embed_function("StringFromBuffer$", ID_TYPE_FN_STR); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - add_embedded_arg("buffer_size", ID_TYPE_NUM); - embed_function("GrabInput", ID_TYPE_SUB); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("GrabbedWindow", ID_TYPE_FN_NUM); - embed_function("WarpMouse", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("WarpMouseGlobal", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - embed_function("SetMouseZone", ID_TYPE_SUB); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("w", ID_TYPE_NUM); - add_embedded_arg("h", ID_TYPE_NUM); - embed_function("ClearMouseZone", ID_TYPE_SUB); - embed_function("SetWindowAlwaysOnTop", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("SetMouseRelative", ID_TYPE_SUB); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("SetWindowVSync", ID_TYPE_SUB); - add_embedded_arg("win", ID_TYPE_NUM); - add_embedded_arg("flag", ID_TYPE_NUM); - embed_function("OpenURL", ID_TYPE_FN_NUM); - add_embedded_arg("url$", ID_TYPE_STR); - embed_function("APIVersion$", ID_TYPE_FN_STR); - embed_function("FlashWindow", ID_TYPE_FN_NUM); - add_embedded_arg("win", ID_TYPE_NUM); - embed_function("MessageBox", ID_TYPE_FN_NUM); - add_embedded_arg("title$", ID_TYPE_STR); - add_embedded_arg("msg$", ID_TYPE_STR); - embed_function("NumberArrayCopy", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_NUM); - add_embedded_arg("dst", ID_TYPE_BYREF_NUM); - embed_function("StringArrayCopy", ID_TYPE_SUB); - add_embedded_arg("src$", ID_TYPE_BYREF_STR); - add_embedded_arg("dst$", ID_TYPE_BYREF_STR); - embed_function("ArrayCopy", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_NUM); - add_embedded_arg("dst", ID_TYPE_BYREF_NUM); - embed_function("NumberArrayFill", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_NUM); - add_embedded_arg("fdata", ID_TYPE_NUM); - embed_function("StringArrayFill", ID_TYPE_SUB); - add_embedded_arg("src$", ID_TYPE_BYREF_STR); - add_embedded_arg("fdata$", ID_TYPE_STR); - embed_function("ArrayFill", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_NUM); - add_embedded_arg("fdata", ID_TYPE_NUM); - embed_function("Runtime$", ID_TYPE_FN_STR); - embed_function("DimMatrix", ID_TYPE_SUB); - add_embedded_arg("m", ID_TYPE_NUM); - add_embedded_arg("m_rows", ID_TYPE_NUM); - add_embedded_arg("m_cols", ID_TYPE_NUM); - add_embedded_arg("preserve_flag", ID_TYPE_NUM); - embed_function("AddMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("AugmentMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("CopyMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("InsertMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - embed_function("InsertMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - embed_function("MultiplyMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("CubeMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("DeleteMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - embed_function("DeleteMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - embed_function("ClearMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - embed_function("ClearMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - embed_function("ClearMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - embed_function("FillMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("FillMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("FillMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("CopyMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - embed_function("CopyMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - embed_function("IdentityMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("n", ID_TYPE_NUM); - embed_function("SolveMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("IsEqualMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("tolerance", ID_TYPE_NUM); - embed_function("Determinant", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - embed_function("AdjointMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("InvertMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("MatrixFromBuffer", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - embed_function("GetMatrix", ID_TYPE_SUB); - add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - embed_function("RandomizeMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("vmin", ID_TYPE_NUM); - add_embedded_arg("vmax", ID_TYPE_NUM); - embed_function("MatrixValue", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("SetMatrixValue", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("v", ID_TYPE_NUM); - embed_function("ScalarMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("s_value", ID_TYPE_NUM); - embed_function("ScalarMatrixColumns", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - add_embedded_arg("s_value", ID_TYPE_NUM); - embed_function("ScalarMatrixRows", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - add_embedded_arg("s_value", ID_TYPE_NUM); - embed_function("SquareMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("SubMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - embed_function("SubtractMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("SwapMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("SwapMatrixColumn", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("C1", ID_TYPE_NUM); - add_embedded_arg("C2", ID_TYPE_NUM); - embed_function("SwapMatrixRow", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("R1", ID_TYPE_NUM); - add_embedded_arg("R2", ID_TYPE_NUM); - embed_function("TransposeMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - embed_function("UnAugmentMatrix", ID_TYPE_FN_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("ZeroMatrix", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - embed_function("GetMatrixSize", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_BYREF_NUM); - add_embedded_arg("c", ID_TYPE_BYREF_NUM); - embed_function("SetMatrixProcess", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessOpen", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("SetProcessErrorMode", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - add_embedded_arg("error_mode", ID_TYPE_NUM); - embed_function("ProcessError", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessWait", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessWaitAll", ID_TYPE_SUB); - embed_function("ProcessContinue", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessStop", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessClear", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessClose", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessErrorMode", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessSleep", ID_TYPE_SUB); - add_embedded_arg("p_num", ID_TYPE_NUM); - add_embedded_arg("msec", ID_TYPE_NUM); - embed_function("ProcessExists", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("ProcessStopAll", ID_TYPE_SUB); - embed_function("ProcessContinueAll", ID_TYPE_SUB); - embed_function("ProcessQueueSize", ID_TYPE_FN_NUM); - add_embedded_arg("p_num", ID_TYPE_NUM); - embed_function("NumCPUs", ID_TYPE_FN_NUM); - embed_function("GetProjectionGeometry", ID_TYPE_SUB); - add_embedded_arg("cam_dist", ID_TYPE_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("f_vertex_count", ID_TYPE_NUM); - add_embedded_arg("columns", ID_TYPE_BYREF_NUM); - add_embedded_arg("uv", ID_TYPE_BYREF_NUM); - add_embedded_arg("graph_offset_x", ID_TYPE_NUM); - add_embedded_arg("graph_offset_y", ID_TYPE_NUM); - add_embedded_arg("v_color", ID_TYPE_NUM); - add_embedded_arg("vertex_count", ID_TYPE_BYREF_NUM); - add_embedded_arg("vertex2D", ID_TYPE_BYREF_NUM); - add_embedded_arg("index_count", ID_TYPE_BYREF_NUM); - add_embedded_arg("index", ID_TYPE_BYREF_NUM); - add_embedded_arg("clip_dist", ID_TYPE_BYREF_NUM); - add_embedded_arg("min_x", ID_TYPE_BYREF_NUM); - add_embedded_arg("min_y", ID_TYPE_BYREF_NUM); - add_embedded_arg("max_x", ID_TYPE_BYREF_NUM); - add_embedded_arg("max_y", ID_TYPE_BYREF_NUM); - embed_function("CalculateFaceZ", ID_TYPE_FN_NUM); - add_embedded_arg("cam_dist", ID_TYPE_NUM); - add_embedded_arg("graph_offset_x", ID_TYPE_NUM); - add_embedded_arg("graph_offset_y", ID_TYPE_NUM); - add_embedded_arg("view_w", ID_TYPE_NUM); - add_embedded_arg("view_h", ID_TYPE_NUM); - add_embedded_arg("view_depth", ID_TYPE_NUM); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("f_vertex_count", ID_TYPE_NUM); - add_embedded_arg("columns", ID_TYPE_BYREF_NUM); - add_embedded_arg("face_min_z", ID_TYPE_BYREF_NUM); - add_embedded_arg("face_max_z", ID_TYPE_BYREF_NUM); - add_embedded_arg("z_avg", ID_TYPE_BYREF_NUM); - embed_function("SetChannelSpacePosition", ID_TYPE_FN_NUM); - add_embedded_arg("channel", ID_TYPE_NUM); - add_embedded_arg("angle", ID_TYPE_NUM); - add_embedded_arg("distance", ID_TYPE_NUM); - embed_function("SaveBMP", ID_TYPE_FN_NUM); - add_embedded_arg("img", ID_TYPE_NUM); - add_embedded_arg("file$", ID_TYPE_STR); - embed_function("SavePNG", ID_TYPE_FN_NUM); - add_embedded_arg("img", ID_TYPE_NUM); - add_embedded_arg("file$", ID_TYPE_STR); - embed_function("SaveJPG", ID_TYPE_FN_NUM); - add_embedded_arg("img", ID_TYPE_NUM); - add_embedded_arg("file$", ID_TYPE_STR); - embed_function("GetLineIntersection", ID_TYPE_FN_NUM); - add_embedded_arg("p0_x", ID_TYPE_NUM); - add_embedded_arg("p0_y", ID_TYPE_NUM); - add_embedded_arg("p1_x", ID_TYPE_NUM); - add_embedded_arg("p1_y", ID_TYPE_NUM); - add_embedded_arg("p2_x", ID_TYPE_NUM); - add_embedded_arg("p2_y", ID_TYPE_NUM); - add_embedded_arg("p3_x", ID_TYPE_NUM); - add_embedded_arg("p3_y", ID_TYPE_NUM); - add_embedded_arg("i_x", ID_TYPE_BYREF_NUM); - add_embedded_arg("i_y", ID_TYPE_BYREF_NUM); - embed_function("Interpolate", ID_TYPE_FN_NUM); - add_embedded_arg("min_a", ID_TYPE_NUM); - add_embedded_arg("max_a", ID_TYPE_NUM); - add_embedded_arg("mid_a", ID_TYPE_NUM); - add_embedded_arg("min_b", ID_TYPE_NUM); - add_embedded_arg("max_b", ID_TYPE_NUM); - embed_function("ATan2", ID_TYPE_FN_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - embed_function("PointInQuad", ID_TYPE_FN_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - add_embedded_arg("x3", ID_TYPE_NUM); - add_embedded_arg("y3", ID_TYPE_NUM); - add_embedded_arg("x4", ID_TYPE_NUM); - add_embedded_arg("y4", ID_TYPE_NUM); - embed_function("PointInTri", ID_TYPE_FN_NUM); - add_embedded_arg("x", ID_TYPE_NUM); - add_embedded_arg("y", ID_TYPE_NUM); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - add_embedded_arg("x3", ID_TYPE_NUM); - add_embedded_arg("y3", ID_TYPE_NUM); - embed_function("Distance2D", ID_TYPE_FN_NUM); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - embed_function("Distance3D", ID_TYPE_FN_NUM); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("z1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - add_embedded_arg("z2", ID_TYPE_NUM); - embed_function("GetCircleLineIntersection", ID_TYPE_FN_NUM); - add_embedded_arg("circle_x", ID_TYPE_NUM); - add_embedded_arg("circle_y", ID_TYPE_NUM); - add_embedded_arg("radius", ID_TYPE_NUM); - add_embedded_arg("x1", ID_TYPE_NUM); - add_embedded_arg("y1", ID_TYPE_NUM); - add_embedded_arg("x2", ID_TYPE_NUM); - add_embedded_arg("y2", ID_TYPE_NUM); - add_embedded_arg("ix1", ID_TYPE_BYREF_NUM); - add_embedded_arg("iy1", ID_TYPE_BYREF_NUM); - add_embedded_arg("ix2", ID_TYPE_BYREF_NUM); - add_embedded_arg("iy2", ID_TYPE_BYREF_NUM); - embed_function("GetLinePlaneIntersection", ID_TYPE_FN_NUM); - add_embedded_arg("line_point", ID_TYPE_BYREF_NUM); - add_embedded_arg("line_direction", ID_TYPE_BYREF_NUM); - add_embedded_arg("plane_point_1", ID_TYPE_BYREF_NUM); - add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM); - add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM); - add_embedded_arg("intersection", ID_TYPE_BYREF_NUM); - embed_function("IncrementMatrixRows", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("r", ID_TYPE_NUM); - add_embedded_arg("num_rows", ID_TYPE_NUM); - add_embedded_arg("value", ID_TYPE_NUM); - embed_function("IncrementMatrixColumns", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("c", ID_TYPE_NUM); - add_embedded_arg("num_cols", ID_TYPE_NUM); - add_embedded_arg("value", ID_TYPE_NUM); - embed_function("JoinMatrixRows", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("JoinMatrixColumns", ID_TYPE_SUB); - add_embedded_arg("mA", ID_TYPE_NUM); - add_embedded_arg("mB", ID_TYPE_NUM); - add_embedded_arg("mC", ID_TYPE_NUM); - embed_function("TypeArrayDim", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); - embed_function("TypeArraySize", ID_TYPE_FN_NUM); - add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); - add_embedded_arg("array_dim", ID_TYPE_NUM); - embed_function("TypeArrayCopy", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); - add_embedded_arg("dst", ID_TYPE_BYREF_USER, 0); - embed_function("TypeArrayFill", ID_TYPE_SUB); - add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); - add_embedded_arg("fdata", ID_TYPE_USER, 0); - -} +#ifndef RC_BUILTIN_H_INCLUDED +#define RC_BUILTIN_H_INCLUDED +#include "identifier.h" +void init_embedded_functions() +{ + embed_function("Fprint", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("Input$", ID_TYPE_FN_STR); + add_embedded_arg("prompt$", ID_TYPE_STR); + embed_function("ArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + embed_function("StringArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id$", ID_TYPE_BYREF_STR); + embed_function("NumberArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + embed_function("ArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("StringArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id$", ID_TYPE_BYREF_STR); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("NumberArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("NumberArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("dst", ID_TYPE_BYREF_NUM); + embed_function("StringArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_BYREF_STR); + add_embedded_arg("dst$", ID_TYPE_BYREF_STR); + embed_function("ArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("dst", ID_TYPE_BYREF_NUM); + embed_function("NumberArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("fdata", ID_TYPE_NUM); + embed_function("StringArrayFill", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_BYREF_STR); + add_embedded_arg("fdata$", ID_TYPE_STR); + embed_function("ArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("fdata", ID_TYPE_NUM); + embed_function("TypeArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); + embed_function("TypeArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("TypeArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("dst", ID_TYPE_BYREF_USER, 0); + embed_function("TypeArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("fdata", ID_TYPE_USER, 0); + embed_function("Abs", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Acos", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("AndBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Asin", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Atan", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Bin$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("CInt32", ID_TYPE_FN_NUM); + add_embedded_arg("i", ID_TYPE_NUM); + embed_function("CInt64", ID_TYPE_FN_NUM); + add_embedded_arg("i", ID_TYPE_NUM); + embed_function("Cos", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Degrees", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + embed_function("Exp", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Frac", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Hex$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("HexVal", ID_TYPE_FN_NUM); + add_embedded_arg("n$", ID_TYPE_STR); + embed_function("Int", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Log", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Max", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Min", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("OrBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Radians", ID_TYPE_FN_NUM); + add_embedded_arg("d", ID_TYPE_NUM); + embed_function("Randomize", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Rand", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Round", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sign", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sin", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sqrt", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Tan", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("XOrBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("GetLineIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("p0_x", ID_TYPE_NUM); + add_embedded_arg("p0_y", ID_TYPE_NUM); + add_embedded_arg("p1_x", ID_TYPE_NUM); + add_embedded_arg("p1_y", ID_TYPE_NUM); + add_embedded_arg("p2_x", ID_TYPE_NUM); + add_embedded_arg("p2_y", ID_TYPE_NUM); + add_embedded_arg("p3_x", ID_TYPE_NUM); + add_embedded_arg("p3_y", ID_TYPE_NUM); + add_embedded_arg("i_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("i_y", ID_TYPE_BYREF_NUM); + embed_function("Interpolate", ID_TYPE_FN_NUM); + add_embedded_arg("min_a", ID_TYPE_NUM); + add_embedded_arg("max_a", ID_TYPE_NUM); + add_embedded_arg("mid_a", ID_TYPE_NUM); + add_embedded_arg("min_b", ID_TYPE_NUM); + add_embedded_arg("max_b", ID_TYPE_NUM); + embed_function("ATan2", ID_TYPE_FN_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + embed_function("PointInQuad", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("x3", ID_TYPE_NUM); + add_embedded_arg("y3", ID_TYPE_NUM); + add_embedded_arg("x4", ID_TYPE_NUM); + add_embedded_arg("y4", ID_TYPE_NUM); + embed_function("PointInTri", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("x3", ID_TYPE_NUM); + add_embedded_arg("y3", ID_TYPE_NUM); + embed_function("Distance2D", ID_TYPE_FN_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + embed_function("Distance3D", ID_TYPE_FN_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("z1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("z2", ID_TYPE_NUM); + embed_function("GetCircleLineIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("circle_x", ID_TYPE_NUM); + add_embedded_arg("circle_y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("ix1", ID_TYPE_BYREF_NUM); + add_embedded_arg("iy1", ID_TYPE_BYREF_NUM); + add_embedded_arg("ix2", ID_TYPE_BYREF_NUM); + add_embedded_arg("iy2", ID_TYPE_BYREF_NUM); + embed_function("GetLinePlaneIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("line_point", ID_TYPE_BYREF_NUM); + add_embedded_arg("line_direction", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_1", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM); + add_embedded_arg("intersection", ID_TYPE_BYREF_NUM); + embed_function("Asc", ID_TYPE_FN_NUM); + add_embedded_arg("c$", ID_TYPE_STR); + embed_function("Chr$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Insert$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("tgt$", ID_TYPE_STR); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("InStr", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("substr$", ID_TYPE_STR); + embed_function("Lcase$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Left$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Length", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Len", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Ltrim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Mid$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("start", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("ReplaceSubstr$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("rpc$", ID_TYPE_STR); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("Replace$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("tgt$", ID_TYPE_STR); + add_embedded_arg("rpc$", ID_TYPE_STR); + embed_function("Reverse$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Right$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Rtrim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("StringFill$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str_F$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str_S$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Tally", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("substr$", ID_TYPE_STR); + embed_function("Trim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Ucase$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Val", ID_TYPE_FN_NUM); + add_embedded_arg("n$", ID_TYPE_STR); + embed_function("Size", ID_TYPE_FN_NUM); + add_embedded_arg("s$", ID_TYPE_STR); + embed_function("BufferFromString", ID_TYPE_FN_NUM); + add_embedded_arg("s$", ID_TYPE_STR); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("StringFromBuffer$", ID_TYPE_FN_STR); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("buffer_size", ID_TYPE_NUM); + embed_function("CreateStack_N", ID_TYPE_FN_NUM); + embed_function("CreateStack_S", ID_TYPE_FN_NUM); + embed_function("ClearStack_N", ID_TYPE_SUB); + add_embedded_arg("num_stack", ID_TYPE_NUM); + embed_function("ClearStack_S", ID_TYPE_SUB); + add_embedded_arg("str_stack", ID_TYPE_NUM); + embed_function("DeleteStack_N", ID_TYPE_SUB); + add_embedded_arg("num_stack", ID_TYPE_NUM); + embed_function("DeleteStack_S", ID_TYPE_SUB); + add_embedded_arg("str_stack", ID_TYPE_NUM); + embed_function("Push_N", ID_TYPE_SUB); + add_embedded_arg("num_stack", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Pop_N", ID_TYPE_FN_NUM); + add_embedded_arg("num_stack", ID_TYPE_NUM); + embed_function("Push_S", ID_TYPE_SUB); + add_embedded_arg("str_stack", ID_TYPE_NUM); + add_embedded_arg("s$", ID_TYPE_STR); + embed_function("Pop_S$", ID_TYPE_FN_STR); + add_embedded_arg("str_stack", ID_TYPE_NUM); + embed_function("Stack_Size_N", ID_TYPE_FN_NUM); + add_embedded_arg("num_stack", ID_TYPE_NUM); + embed_function("Stack_Size_S", ID_TYPE_FN_NUM); + add_embedded_arg("str_stack", ID_TYPE_NUM); + embed_function("OpenFile", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + add_embedded_arg("mode", ID_TYPE_NUM); + embed_function("CloseFile", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("ReadByte", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("WriteByte", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("byte", ID_TYPE_NUM); + embed_function("ReadLine$", ID_TYPE_FN_STR); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("Write", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("WriteLine", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("CopyFile", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("RemoveFile", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("FileExists", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("MoveFile", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("RenameFile", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("FileLength", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("Tell", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("Seek", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("EOF", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("WriteByteBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("buf", ID_TYPE_BYREF_NUM); + add_embedded_arg("buf_size", ID_TYPE_NUM); + embed_function("ReadByteBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("buf", ID_TYPE_BYREF_NUM); + add_embedded_arg("buf_size", ID_TYPE_NUM); + embed_function("ChangeDir", ID_TYPE_SUB); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("DirExists", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("DirFirst$", ID_TYPE_FN_STR); + embed_function("Dir$", ID_TYPE_FN_STR); + embed_function("DirNext$", ID_TYPE_FN_STR); + embed_function("MakeDir", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("RemoveDir", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("Date$", ID_TYPE_FN_STR); + embed_function("Easter$", ID_TYPE_FN_STR); + add_embedded_arg("year", ID_TYPE_NUM); + embed_function("Ticks", ID_TYPE_FN_NUM); + embed_function("Time$", ID_TYPE_FN_STR); + embed_function("Timer", ID_TYPE_FN_NUM); + embed_function("Wait", ID_TYPE_SUB); + add_embedded_arg("m_sec", ID_TYPE_NUM); + embed_function("OpenWindow", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("fullscreen", ID_TYPE_NUM); + add_embedded_arg("vsync", ID_TYPE_NUM); + embed_function("OpenWindowEx", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("mode", ID_TYPE_NUM); + add_embedded_arg("aa", ID_TYPE_NUM); + add_embedded_arg("stencil_buffer", ID_TYPE_NUM); + add_embedded_arg("vsync", ID_TYPE_NUM); + embed_function("CloseWindow", ID_TYPE_SUB); + embed_function("RaiseWindow", ID_TYPE_SUB); + embed_function("Update", ID_TYPE_SUB); + embed_function("Cls", ID_TYPE_SUB); + embed_function("SetClearColor", ID_TYPE_SUB); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("ShowWindow", ID_TYPE_SUB); + embed_function("HideWindow", ID_TYPE_SUB); + embed_function("SetWindowTitle", ID_TYPE_SUB); + add_embedded_arg("title$", ID_TYPE_STR); + embed_function("WindowTitle$", ID_TYPE_FN_STR); + embed_function("SetWindowPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetWindowPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("SetWindowSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetWindowMinSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowMinSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetWindowMaxSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowMaxSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("WindowIsFullscreen", ID_TYPE_FN_NUM); + embed_function("WindowIsVisible", ID_TYPE_FN_NUM); + embed_function("WindowIsBordered", ID_TYPE_FN_NUM); + embed_function("WindowIsResizable", ID_TYPE_FN_NUM); + embed_function("WindowIsMinimized", ID_TYPE_FN_NUM); + embed_function("WindowIsMaximized", ID_TYPE_FN_NUM); + embed_function("WindowHasInputFocus", ID_TYPE_FN_NUM); + embed_function("WindowHasMouseFocus", ID_TYPE_FN_NUM); + embed_function("SetWindowFullscreen", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("MaximizeWindow", ID_TYPE_SUB); + embed_function("MinimizeWindow", ID_TYPE_SUB); + embed_function("SetWindowBordered", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("WindowClip", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("WindowExists", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Close", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Maximize", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Minimize", ID_TYPE_FN_NUM); + embed_function("FPS", ID_TYPE_FN_NUM); + embed_function("SetWindowIcon", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("WindowEvent_Resize", ID_TYPE_FN_NUM); + embed_function("SetWindowAutoClose", ID_TYPE_SUB); + add_embedded_arg("exit_on_close", ID_TYPE_NUM); + embed_function("SetWindowResizable", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("WindowMode", ID_TYPE_FN_NUM); + add_embedded_arg("visible", ID_TYPE_NUM); + add_embedded_arg("fullscreen", ID_TYPE_NUM); + add_embedded_arg("resizable", ID_TYPE_NUM); + add_embedded_arg("borderless", ID_TYPE_NUM); + add_embedded_arg("highDPI", ID_TYPE_NUM); + embed_function("getWindowMode", ID_TYPE_FN_NUM); + embed_function("RestoreWindow", ID_TYPE_SUB); + embed_function("GrabInput", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetWindowAlwaysOnTop", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetMouseRelative", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetWindowVSync", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("FlashWindow", ID_TYPE_FN_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("WindowIsGrabbed", ID_TYPE_FN_NUM); + embed_function("OpenCanvas", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("viewport_x", ID_TYPE_NUM); + add_embedded_arg("viewport_y", ID_TYPE_NUM); + add_embedded_arg("viewport_w", ID_TYPE_NUM); + add_embedded_arg("viewport_h", ID_TYPE_NUM); + add_embedded_arg("mode", ID_TYPE_NUM); + embed_function("CloseCanvas", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvas3D", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetCanvasVisible", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("CanvasIsVisible", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasViewport", ID_TYPE_SUB); + add_embedded_arg("cnum", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetCanvasViewport", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("Canvas", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasOffset", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetCanvasOffset", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("GetCanvasSize", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("ClearCanvas", ID_TYPE_SUB); + embed_function("SetCanvasAlpha", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("GetCanvasAlpha", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("GetCanvasColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("CloneCanvas", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_NUM); + add_embedded_arg("dst", ID_TYPE_NUM); + embed_function("SetCanvasZ", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCanvasZ", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("CanvasClip", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("ActiveCanvas", ID_TYPE_FN_NUM); + embed_function("Circle", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("CircleFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("Ellipse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("rx", ID_TYPE_NUM); + add_embedded_arg("ry", ID_TYPE_NUM); + embed_function("EllipseFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("rx", ID_TYPE_NUM); + add_embedded_arg("ry", ID_TYPE_NUM); + embed_function("FloodFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetPixel", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("SetColor", ID_TYPE_SUB); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("Line", ID_TYPE_SUB); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + embed_function("Poly", ID_TYPE_SUB); + add_embedded_arg("n", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("Rect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("RectFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("RGB", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("g", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("RGBA", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("g", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("Pset", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("LoadImage", ID_TYPE_FN_NUM); + add_embedded_arg("img$", ID_TYPE_STR); + embed_function("LoadImageEx", ID_TYPE_FN_NUM); + add_embedded_arg("img$", ID_TYPE_STR); + add_embedded_arg("colkey", ID_TYPE_NUM); + embed_function("createImage", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("createImageEx", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getImageBuffer", ID_TYPE_SUB); + add_embedded_arg("img_id", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("ImageExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("ColorKey", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("setBilinearFilter", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getBilinearFilter", ID_TYPE_FN_NUM); + embed_function("CopyImage", ID_TYPE_FN_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("DeleteImage", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetImageAlpha", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("GetImageAlpha", ID_TYPE_FN_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("GetImageSize", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetBlendMode", ID_TYPE_SUB); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("GetBlendMode", ID_TYPE_FN_NUM); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("SetImageColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("ImageColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DrawImage", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("DrawImage_Blit", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + embed_function("DrawImage_BlitEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + embed_function("DrawImage_Rotate", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("DrawImage_RotateEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("DrawImage_Zoom", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_ZoomEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_Rotozoom", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_RotozoomEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_Flip", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("DrawImage_FlipEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("InKey", ID_TYPE_FN_NUM); + embed_function("Key", ID_TYPE_FN_NUM); + add_embedded_arg("key_code", ID_TYPE_NUM); + embed_function("WaitKey", ID_TYPE_FN_NUM); + embed_function("HideMouse", ID_TYPE_SUB); + embed_function("ShowMouse", ID_TYPE_SUB); + embed_function("MouseIsVisible", ID_TYPE_FN_NUM); + embed_function("GetMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); + embed_function("MouseX", ID_TYPE_FN_NUM); + embed_function("MouseY", ID_TYPE_FN_NUM); + embed_function("MouseButton", ID_TYPE_FN_NUM); + add_embedded_arg("mb", ID_TYPE_NUM); + embed_function("GetMouseWheel", ID_TYPE_SUB); + add_embedded_arg("x_axis", ID_TYPE_BYREF_NUM); + add_embedded_arg("y_axis", ID_TYPE_BYREF_NUM); + embed_function("MouseWheelX", ID_TYPE_FN_NUM); + embed_function("MouseWheelY", ID_TYPE_FN_NUM); + embed_function("GetGlobalMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); + embed_function("GlobalMouseX", ID_TYPE_FN_NUM); + embed_function("GlobalMouseY", ID_TYPE_FN_NUM); + embed_function("WarpMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("WarpMouseGlobal", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("SetMouseZone", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("ClearMouseZone", ID_TYPE_SUB); + embed_function("SoundFromBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("buffer_size", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("LoadSound", ID_TYPE_FN_NUM); + add_embedded_arg("snd_file$", ID_TYPE_STR); + embed_function("LoadMusic", ID_TYPE_SUB); + add_embedded_arg("music_file$", ID_TYPE_STR); + embed_function("PlaySound", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + embed_function("PlaySoundTimed", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + add_embedded_arg("ms", ID_TYPE_NUM); + embed_function("PlayMusic", ID_TYPE_SUB); + add_embedded_arg("mLoops", ID_TYPE_NUM); + embed_function("PauseSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("ResumeSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("PauseMusic", ID_TYPE_SUB); + embed_function("ResumeMusic", ID_TYPE_SUB); + embed_function("DeleteSound", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DeleteMusic", ID_TYPE_SUB); + embed_function("FadeMusicIn", ID_TYPE_SUB); + add_embedded_arg("fade_time", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + embed_function("FadeMusicOut", ID_TYPE_SUB); + add_embedded_arg("fade_time", ID_TYPE_NUM); + embed_function("MusicExists", ID_TYPE_FN_NUM); + embed_function("SetMusicVolume", ID_TYPE_SUB); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetMusicVolume", ID_TYPE_FN_NUM); + embed_function("SetMusicPosition", ID_TYPE_SUB); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("GetMusicPosition", ID_TYPE_FN_NUM); + embed_function("RewindMusic", ID_TYPE_SUB); + embed_function("SetSoundChannels", ID_TYPE_SUB); + add_embedded_arg("max_channels", ID_TYPE_NUM); + embed_function("NumSoundChannels", ID_TYPE_FN_NUM); + embed_function("SoundIsEnabled", ID_TYPE_FN_NUM); + embed_function("SoundExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetChannelVolume", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetChannelVolume", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("SetSoundVolume", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetSoundVolume", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("StopMusic", ID_TYPE_SUB); + embed_function("StopSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("SetChannelPanning", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("left_value", ID_TYPE_NUM); + add_embedded_arg("right_value", ID_TYPE_NUM); + embed_function("SetChannelDistance", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("dist_value", ID_TYPE_NUM); + embed_function("ChannelIsPlaying", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("ChannelIsPaused", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("QueryAudioSpec", ID_TYPE_FN_NUM); + add_embedded_arg("freq", ID_TYPE_BYREF_NUM); + add_embedded_arg("format", ID_TYPE_BYREF_NUM); + add_embedded_arg("channels", ID_TYPE_BYREF_NUM); + embed_function("MusicIsPlaying", ID_TYPE_FN_NUM); + embed_function("SetChannelSpacePosition", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("distance", ID_TYPE_NUM); + embed_function("NumJoysticks", ID_TYPE_FN_NUM); + embed_function("NumJoyAxes", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyButtons", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyHats", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyTrackBalls", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoyAxis", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_axis", ID_TYPE_NUM); + embed_function("JoyButton", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_button", ID_TYPE_NUM); + embed_function("JoyHat", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_hat", ID_TYPE_NUM); + embed_function("GetJoyTrackBall", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("ball", ID_TYPE_NUM); + add_embedded_arg("dx", ID_TYPE_BYREF_NUM); + add_embedded_arg("dy", ID_TYPE_BYREF_NUM); + embed_function("JoyName$", ID_TYPE_FN_STR); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoystickIsConnected", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoyRumblePlay", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("strength", ID_TYPE_NUM); + add_embedded_arg("duration", ID_TYPE_NUM); + embed_function("JoyRumbleStop", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoystickIsHaptic", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("LoadFont", ID_TYPE_FN_NUM); + add_embedded_arg("fnt_file$", ID_TYPE_STR); + add_embedded_arg("font_size", ID_TYPE_NUM); + embed_function("DeleteFont", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("FontExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetFont", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DrawText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("RenderText", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("GetTextSize", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("GetTextWidth", ID_TYPE_FN_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("GetTextHeight", ID_TYPE_FN_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("TouchPressure", ID_TYPE_FN_NUM); + embed_function("GetTouch", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("dx", ID_TYPE_BYREF_NUM); + add_embedded_arg("dy", ID_TYPE_BYREF_NUM); + embed_function("GetMultiTouch", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("fingers", ID_TYPE_BYREF_NUM); + add_embedded_arg("dist", ID_TYPE_BYREF_NUM); + add_embedded_arg("theta", ID_TYPE_BYREF_NUM); + embed_function("GetTouchFinger", ID_TYPE_SUB); + add_embedded_arg("finger", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("pressure", ID_TYPE_BYREF_NUM); + embed_function("NumFingers", ID_TYPE_FN_NUM); + embed_function("GetAccel", ID_TYPE_SUB); + add_embedded_arg("accel_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("AccelName$", ID_TYPE_FN_STR); + add_embedded_arg("accel_num", ID_TYPE_NUM); + embed_function("NumAccels", ID_TYPE_FN_NUM); + embed_function("GetGyro", ID_TYPE_SUB); + add_embedded_arg("gyro_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GyroName$", ID_TYPE_FN_STR); + add_embedded_arg("gyro_num", ID_TYPE_NUM); + embed_function("NumGyros", ID_TYPE_FN_NUM); + embed_function("CheckSockets", ID_TYPE_FN_NUM); + add_embedded_arg("timeout_ms", ID_TYPE_NUM); + embed_function("TCP_SocketReady", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_SocketReady", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_OpenSocket", ID_TYPE_FN_NUM); + add_embedded_arg("host$", ID_TYPE_STR); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("TCP_CloseSocket", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_RemoteHost", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_RemotePort", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_GetData", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_BYREF_STR); + add_embedded_arg("numBytes", ID_TYPE_NUM); + embed_function("TCP_SendData", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_STR); + embed_function("TCP_AcceptSocket", ID_TYPE_FN_NUM); + add_embedded_arg("server", ID_TYPE_NUM); + add_embedded_arg("client", ID_TYPE_NUM); + embed_function("UDP_OpenSocket", ID_TYPE_FN_NUM); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("UDP_CloseSocket", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_GetData", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_BYREF_STR); + add_embedded_arg("host$", ID_TYPE_BYREF_STR); + add_embedded_arg("port", ID_TYPE_BYREF_NUM); + embed_function("UDP_Length", ID_TYPE_FN_NUM); + embed_function("UDP_MaxLength", ID_TYPE_FN_NUM); + embed_function("UDP_RemoteHost$", ID_TYPE_FN_STR); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_RemotePort", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_SendData", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_STR); + add_embedded_arg("host$", ID_TYPE_STR); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("LoadVideo", ID_TYPE_SUB); + add_embedded_arg("vid$", ID_TYPE_STR); + embed_function("PlayVideo", ID_TYPE_SUB); + add_embedded_arg("vLoops", ID_TYPE_NUM); + embed_function("PauseVideo", ID_TYPE_SUB); + embed_function("StopVideo", ID_TYPE_SUB); + embed_function("SetVideoPosition", ID_TYPE_SUB); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("ResumeVideo", ID_TYPE_SUB); + embed_function("GetVideoPosition", ID_TYPE_FN_NUM); + embed_function("DeleteVideo", ID_TYPE_SUB); + embed_function("VideoIsPlaying", ID_TYPE_FN_NUM); + embed_function("VideoEnd", ID_TYPE_FN_NUM); + embed_function("GetVideoStats", ID_TYPE_SUB); + add_embedded_arg("vFile$", ID_TYPE_STR); + add_embedded_arg("vLen", ID_TYPE_BYREF_NUM); + add_embedded_arg("vfps", ID_TYPE_BYREF_NUM); + add_embedded_arg("frame_w", ID_TYPE_BYREF_NUM); + add_embedded_arg("frame_h", ID_TYPE_BYREF_NUM); + embed_function("SetVideoDrawRect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetVideoDrawRect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("GetVideoSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("VideoExists", ID_TYPE_FN_NUM); + embed_function("SetVideoAlpha", ID_TYPE_SUB); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("SetVideoVolume", ID_TYPE_SUB); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetVideoVolume", ID_TYPE_FN_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("System", ID_TYPE_FN_NUM); + add_embedded_arg("cmd$", ID_TYPE_STR); + embed_function("OS$", ID_TYPE_FN_STR); + embed_function("Command$", ID_TYPE_FN_STR); + add_embedded_arg("arg", ID_TYPE_NUM); + embed_function("NumCommands", ID_TYPE_FN_NUM); + embed_function("Env$", ID_TYPE_FN_STR); + add_embedded_arg("v$", ID_TYPE_STR); + embed_function("SetEnv", ID_TYPE_SUB); + add_embedded_arg("var$", ID_TYPE_STR); + add_embedded_arg("value$", ID_TYPE_STR); + embed_function("PrefPath$", ID_TYPE_FN_STR); + add_embedded_arg("org_name$", ID_TYPE_STR); + add_embedded_arg("app_name$", ID_TYPE_STR); + embed_function("Android_GetExternalStoragePath$", ID_TYPE_FN_STR); + embed_function("Android_GetExternalStorageState", ID_TYPE_FN_NUM); + embed_function("Android_GetInternalStoragePath$", ID_TYPE_FN_STR); + embed_function("Android_JNI_Message$", ID_TYPE_FN_STR); + add_embedded_arg("arg$", ID_TYPE_STR); + embed_function("Runtime_Utility_Message$", ID_TYPE_FN_STR); + add_embedded_arg("arg$", ID_TYPE_STR); + embed_function("GetDesktopDisplayMode", ID_TYPE_SUB); + add_embedded_arg("index", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + add_embedded_arg("freq", ID_TYPE_BYREF_NUM); + embed_function("GetPowerInfo", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("secs", ID_TYPE_BYREF_NUM); + add_embedded_arg("pct", ID_TYPE_BYREF_NUM); + embed_function("EvalJS$", ID_TYPE_FN_STR); + add_embedded_arg("js_code$", ID_TYPE_STR); + embed_function("SystemReturnStdOut$", ID_TYPE_FN_STR); + add_embedded_arg("cmd$", ID_TYPE_STR); + embed_function("OpenURL", ID_TYPE_FN_NUM); + add_embedded_arg("url$", ID_TYPE_STR); + embed_function("MessageBox", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("msg$", ID_TYPE_STR); + embed_function("Runtime$", ID_TYPE_FN_STR); + embed_function("NumCPUs", ID_TYPE_FN_NUM); + embed_function("DimMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("m_rows", ID_TYPE_NUM); + add_embedded_arg("m_cols", ID_TYPE_NUM); + embed_function("DeleteMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("AddMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("AugmentMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("CopyMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("InsertMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("InsertMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("MultiplyMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("CubeMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("DeleteMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("DeleteMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("ClearMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("ClearMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("ClearMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("FillMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("FillMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("FillMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("CopyMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("CopyMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("IdentityMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("SolveMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("IsEqualMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("tolerance", ID_TYPE_NUM); + embed_function("Determinant", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("AdjointMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("InvertMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("MatrixFromBuffer", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("GetMatrix", ID_TYPE_SUB); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("RandomizeMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("vmin", ID_TYPE_NUM); + add_embedded_arg("vmax", ID_TYPE_NUM); + embed_function("MatrixValue", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("SetMatrixValue", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("ScalarMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("ScalarMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("ScalarMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("SquareMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("CofactorMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("SubtractMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("SwapMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("SwapMatrixColumn", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("C1", ID_TYPE_NUM); + add_embedded_arg("C2", ID_TYPE_NUM); + embed_function("SwapMatrixRow", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("R1", ID_TYPE_NUM); + add_embedded_arg("R2", ID_TYPE_NUM); + embed_function("TransposeMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("UnAugmentMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("ZeroMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("GetMatrixSize", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_BYREF_NUM); + add_embedded_arg("c", ID_TYPE_BYREF_NUM); + embed_function("IncrementMatrixRows", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("value", ID_TYPE_NUM); + embed_function("IncrementMatrixColumns", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("value", ID_TYPE_NUM); + embed_function("JoinMatrixRows", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("JoinMatrixColumns", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("ClipMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("SetMatrixTranslation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetMatrixRotation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetMatrixScale", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetMatrixTranslation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GetMatrixRotation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GetMatrixScale", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("ClipboardText$", ID_TYPE_FN_STR); + embed_function("SetClipboardText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("HasClipboardText", ID_TYPE_FN_NUM); + embed_function("ReadInput_Start", ID_TYPE_SUB); + embed_function("ReadInput_Stop", ID_TYPE_SUB); + embed_function("ReadInput_Text$", ID_TYPE_FN_STR); + embed_function("ReadInput_SetText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("ReadInput_ToggleBackspace", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("CreateSprite", ID_TYPE_FN_NUM); + add_embedded_arg("img", ID_TYPE_NUM); + embed_function("DeleteSprite", ID_TYPE_SUB); + add_embedded_arg("sprite", ID_TYPE_NUM); + embed_function("SetSpritePosition", ID_TYPE_SUB); + add_embedded_arg("sprite", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("LoadMesh", ID_TYPE_FN_NUM); + add_embedded_arg("mesh_file$", ID_TYPE_STR); + embed_function("DeleteMesh", ID_TYPE_SUB); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateMesh", ID_TYPE_FN_NUM); + embed_function("AddMeshBuffer", ID_TYPE_SUB); + add_embedded_arg("mesh", ID_TYPE_NUM); + add_embedded_arg("vertex_count", ID_TYPE_NUM); + add_embedded_arg("vertex_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("normal_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("uv_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("index_count", ID_TYPE_NUM); + add_embedded_arg("index_data", ID_TYPE_BYREF_NUM); + embed_function("LoadMeshFromArchive", ID_TYPE_FN_NUM); + add_embedded_arg("archive$", ID_TYPE_STR); + add_embedded_arg("mesh_file$", ID_TYPE_STR); + embed_function("CreateMeshActor", ID_TYPE_FN_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateMeshOctreeActor", ID_TYPE_FN_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateCubeActor", ID_TYPE_FN_NUM); + add_embedded_arg("cube_size", ID_TYPE_NUM); + embed_function("CreateSphereActor", ID_TYPE_FN_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("CreateWaterPlaneActor", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("CreateLightActor", ID_TYPE_FN_NUM); + embed_function("CreateBillboardActor", ID_TYPE_FN_NUM); + embed_function("CreateTerrainActor", ID_TYPE_FN_NUM); + add_embedded_arg("hmap_file$", ID_TYPE_STR); + embed_function("DeleteActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorTransform", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("matrix", ID_TYPE_NUM); + embed_function("SetActorPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("TranslateActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("TranslateActorWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorScale", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("ScaleActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorScale", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorRotation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("RotateActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorRotation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorVisible", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("ActorIsVisible", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorAutoCulling", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("cull_type", ID_TYPE_NUM); + embed_function("GetActorAutoCulling", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("AddActorShadow", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("RemoveActorShadow", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetGravity3D", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetGravity3D", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorCollisionShape", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("shape_type", ID_TYPE_NUM); + add_embedded_arg("mass", ID_TYPE_NUM); + embed_function("GetActorCollisionShape", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorSolid", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("ActorIsSolid", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorCollision", ID_TYPE_FN_NUM); + add_embedded_arg("actor1", ID_TYPE_NUM); + add_embedded_arg("actor2", ID_TYPE_NUM); + embed_function("SetActorGravity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorGravity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorDamping", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("lin_damping", ID_TYPE_NUM); + add_embedded_arg("ang_damping", ID_TYPE_NUM); + embed_function("getActorLinearDamping", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorAngularDamping", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorLinearSleepThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorAngularSleepThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("applyActorDamping", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("timeStep", ID_TYPE_NUM); + embed_function("setActorMassProperties", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("mass", ID_TYPE_NUM); + add_embedded_arg("inertia_x", ID_TYPE_NUM); + add_embedded_arg("inertia_y", ID_TYPE_NUM); + add_embedded_arg("inertia_z", ID_TYPE_NUM); + embed_function("getActorLinearFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorLinearFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorInverseMass", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("integrateActorVelocities", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("applyActorCentralForceLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorCentralForceWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorTotalForce", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorTotalTorque", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorInverseInertiaDiagLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorInverseInertiaDiagLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorSleepThresholds", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("linear", ID_TYPE_NUM); + add_embedded_arg("angular", ID_TYPE_NUM); + embed_function("applyActorTorqueLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorForceLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorForceWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorCentralImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorCentralImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("clearActorForces", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("updateActorInertiaTensor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorCOMPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorRotationQ", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + embed_function("getActorLinearVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAngularVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorLinearVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorLinearVelocityWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularVelocityWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorLocalPointVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorLinearVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAngularVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAABB", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_z", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_z", ID_TYPE_BYREF_NUM); + embed_function("computeActorImpulseDenominator", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("pos_x", ID_TYPE_NUM); + add_embedded_arg("pos_y", ID_TYPE_NUM); + add_embedded_arg("pos_z", ID_TYPE_NUM); + add_embedded_arg("normal_x", ID_TYPE_NUM); + add_embedded_arg("normal_y", ID_TYPE_NUM); + add_embedded_arg("normal_z", ID_TYPE_NUM); + embed_function("computeActorAngularImpulseDenominator", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorAngularFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("computeActorGyroImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("dt", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("computeActorGyroImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("dt", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorLocalInertia", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("createPointConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + embed_function("createPointConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("pxB", ID_TYPE_NUM); + add_embedded_arg("pyB", ID_TYPE_NUM); + add_embedded_arg("pzB", ID_TYPE_NUM); + embed_function("setConstraintPivotA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setConstraintPivotB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("createHingeConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("axA", ID_TYPE_NUM); + add_embedded_arg("ayA", ID_TYPE_NUM); + add_embedded_arg("azA", ID_TYPE_NUM); + embed_function("createHingeConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("pxB", ID_TYPE_NUM); + add_embedded_arg("pyB", ID_TYPE_NUM); + add_embedded_arg("pzB", ID_TYPE_NUM); + add_embedded_arg("axA", ID_TYPE_NUM); + add_embedded_arg("ayA", ID_TYPE_NUM); + add_embedded_arg("azA", ID_TYPE_NUM); + add_embedded_arg("axB", ID_TYPE_NUM); + add_embedded_arg("ayB", ID_TYPE_NUM); + add_embedded_arg("azB", ID_TYPE_NUM); + embed_function("createSlideConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("frameInB_matrix", ID_TYPE_NUM); + add_embedded_arg("useLinearReferenceFrameA", ID_TYPE_NUM); + embed_function("createSlideConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("frameInA_matrix", ID_TYPE_NUM); + add_embedded_arg("frameInB_matrix", ID_TYPE_NUM); + add_embedded_arg("useLinearReferenceFrameA", ID_TYPE_NUM); + embed_function("createConeConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("rbAFrame_matrix", ID_TYPE_NUM); + embed_function("createConeConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("rbAFrame_matrix", ID_TYPE_NUM); + add_embedded_arg("rbBFrame_matrix", ID_TYPE_NUM); + embed_function("deleteConstraint", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFrameOffsetA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("rx", ID_TYPE_BYREF_NUM); + add_embedded_arg("ry", ID_TYPE_BYREF_NUM); + add_embedded_arg("rz", ID_TYPE_BYREF_NUM); + embed_function("getConstraintFrameOffsetB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("rx", ID_TYPE_BYREF_NUM); + add_embedded_arg("ry", ID_TYPE_BYREF_NUM); + add_embedded_arg("rz", ID_TYPE_BYREF_NUM); + embed_function("useConstraintFrameOffset", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getHingeAngle", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getHingeAngleEx", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("t_matrixA", ID_TYPE_NUM); + add_embedded_arg("t_matrixB", ID_TYPE_NUM); + embed_function("getConstraintBreakingImpulseThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAFrame", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("getConstraintBFrame", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("setConstraintAxis", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setConstraintBreakingImpulseThreshold", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("threshold", ID_TYPE_NUM); + embed_function("setConstraintFrames", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("frameA_matrix", ID_TYPE_NUM); + add_embedded_arg("frameB_matrix", ID_TYPE_NUM); + embed_function("setHingeLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("low", ID_TYPE_NUM); + add_embedded_arg("high", ID_TYPE_NUM); + add_embedded_arg("softness", ID_TYPE_NUM); + add_embedded_arg("bias_factor", ID_TYPE_NUM); + add_embedded_arg("relaxation_factor", ID_TYPE_NUM); + embed_function("setConeLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("swingSpan1", ID_TYPE_NUM); + add_embedded_arg("swingSpan2", ID_TYPE_NUM); + add_embedded_arg("twistSpan", ID_TYPE_NUM); + add_embedded_arg("softness", ID_TYPE_NUM); + add_embedded_arg("bias_factor", ID_TYPE_NUM); + add_embedded_arg("relaxation_factor", ID_TYPE_NUM); + embed_function("getConstraintLimitBiasFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getLimitRelaxationFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLimitSign", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getHingeSolveLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("useHingeReferenceFrameA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getConstraintAppliedImpulse", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFixedActor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintPivotA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintPivotB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintActorA", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintActorB", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintSolverIterations", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("num", ID_TYPE_NUM); + embed_function("getConstraintBiasFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDamping", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFixThresh", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("limit_index", ID_TYPE_NUM); + embed_function("getConstraintLimitSoftness", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolverIterations", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAnglePoint", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("c_len", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAngularOnly", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveSwingLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveTwistLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSwingSpan1", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSwingSpan2", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistAngle", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistLimitSign", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistSpan", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintAngularOnly", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("setConstraintDamping", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("damping", ID_TYPE_NUM); + embed_function("setConstraintFixThresh", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("fixThresh", ID_TYPE_NUM); + embed_function("getConstraintAnchorA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAnchorB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAngDepth", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAngularPos", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLinearPos", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLinDepth", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLowerAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLowerLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUpperAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUpperLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUseFrameOffset", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintDampingDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintLowerAngLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintLowerLinLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintUpperAngLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintUpperLinLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("SetCameraPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCameraPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("TranslateCamera", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetCameraRotation", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCameraRotation", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("RotateCamera", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetCameraFOV", ID_TYPE_SUB); + add_embedded_arg("fov", ID_TYPE_NUM); + embed_function("GetCameraFOV", ID_TYPE_FN_NUM); + embed_function("SetCameraAspectRatio", ID_TYPE_SUB); + add_embedded_arg("aspect", ID_TYPE_NUM); + embed_function("GetCameraAspectRatio", ID_TYPE_FN_NUM); + embed_function("SetCameraFarValue", ID_TYPE_SUB); + add_embedded_arg("zf", ID_TYPE_NUM); + embed_function("GetCameraFarValue", ID_TYPE_FN_NUM); + embed_function("SetCameraNearValue", ID_TYPE_SUB); + add_embedded_arg("zn", ID_TYPE_NUM); + embed_function("GetCameraNearValue", ID_TYPE_FN_NUM); + embed_function("AddSceneSkyBox", ID_TYPE_SUB); + add_embedded_arg("img_top", ID_TYPE_NUM); + add_embedded_arg("img_bottom", ID_TYPE_NUM); + add_embedded_arg("img_left", ID_TYPE_NUM); + add_embedded_arg("img_right", ID_TYPE_NUM); + add_embedded_arg("img_front", ID_TYPE_NUM); + add_embedded_arg("img_back", ID_TYPE_NUM); + embed_function("AddSceneSkyDome", ID_TYPE_SUB); + add_embedded_arg("img", ID_TYPE_NUM); + embed_function("AddSceneSkyDomeEx", ID_TYPE_SUB); + add_embedded_arg("img", ID_TYPE_NUM); + add_embedded_arg("horiRes", ID_TYPE_NUM); + add_embedded_arg("vertRes", ID_TYPE_NUM); + add_embedded_arg("txPercentage", ID_TYPE_NUM); + add_embedded_arg("spherePercentage", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("RemoveSceneSky", ID_TYPE_SUB); + embed_function("SetWorld3DDeltaTime", ID_TYPE_SUB); + add_embedded_arg("dt", ID_TYPE_NUM); + embed_function("SetWorld3DMaxSubSteps", ID_TYPE_SUB); + add_embedded_arg("steps", ID_TYPE_NUM); + embed_function("SetWorld3DTimeStep", ID_TYPE_SUB); + add_embedded_arg("ts", ID_TYPE_NUM); + embed_function("startParticleEmitter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("stopParticleEmitter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("useParticleEveryMeshVertex", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingEveryMeshVertex", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleNormalDirectionMod", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getParticleNormalDirectionMod", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("useParticleNormalDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingNormalDirection", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMesh", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("setParticleMinParticlesPerSecond", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("minParticlesPerSecond", ID_TYPE_NUM); + embed_function("getParticleMinParticlesPerSecond", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxParticlesPerSecond", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxParticlesPerSecond", ID_TYPE_NUM); + embed_function("getParticleMaxParticlesPerSecond", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinStartColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getParticleMinStartColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxStartColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getParticleMaxStartColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinLife", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("minLife", ID_TYPE_NUM); + embed_function("getParticleMinLife", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxLife", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxLife", ID_TYPE_NUM); + embed_function("getParticleMaxLife", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxAngle", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxAngle", ID_TYPE_NUM); + embed_function("getParticleMaxAngle", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getParticleMinStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("setParticleMaxStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getParticleMaxStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("setParticleCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setParticleRadius", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("getParticleRadius", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleRingThickness", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("ringThickness", ID_TYPE_NUM); + embed_function("getParticleRingThickness", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleBox", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_NUM); + add_embedded_arg("min_y", ID_TYPE_NUM); + add_embedded_arg("min_z", ID_TYPE_NUM); + add_embedded_arg("max_x", ID_TYPE_NUM); + add_embedded_arg("max_y", ID_TYPE_NUM); + add_embedded_arg("max_z", ID_TYPE_NUM); + embed_function("getParticleBox", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_z", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_z", ID_TYPE_BYREF_NUM); + embed_function("setParticleNormal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleNormal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setParticleLength", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("p_len", ID_TYPE_NUM); + embed_function("getParticleLength", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("useParticleOutlineOnly", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingOutlineOnly", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("lightIsCastingShadow", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getLightType", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getLightRadius", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setLightType", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("light_type", ID_TYPE_NUM); + embed_function("setLightRadius", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("setLightShadowCast", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetLightAmbientColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightAmbientColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightAttenuation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("l_constant", ID_TYPE_NUM); + add_embedded_arg("l_linear", ID_TYPE_NUM); + add_embedded_arg("l_quadratic", ID_TYPE_NUM); + embed_function("GetLightAttenuation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("constant", ID_TYPE_BYREF_NUM); + add_embedded_arg("linear", ID_TYPE_BYREF_NUM); + add_embedded_arg("quadratic", ID_TYPE_BYREF_NUM); + embed_function("SetLightDiffuseColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightDiffuseColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightFalloff", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("falloff", ID_TYPE_NUM); + embed_function("GetLightFalloff", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightInnerCone", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("GetLightInnerCone", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightOuterCone", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("GetLightOuterCone", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightSpecularColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightSpecularColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetTerrainPatchAABB", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + add_embedded_arg("minX", ID_TYPE_BYREF_NUM); + add_embedded_arg("minY", ID_TYPE_BYREF_NUM); + add_embedded_arg("minZ", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxX", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxY", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxZ", ID_TYPE_BYREF_NUM); + embed_function("GetTerrainPatchLOD", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + embed_function("GetTerrainHeight", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + embed_function("GetTerrainCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetTerrainLODDistance", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("LOD", ID_TYPE_NUM); + add_embedded_arg("distance", ID_TYPE_NUM); + embed_function("ScaleTerrainTexture", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("scale", ID_TYPE_NUM); + add_embedded_arg("scale2", ID_TYPE_NUM); + embed_function("SetTerrainCameraMovementDelta", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("delta", ID_TYPE_NUM); + embed_function("SetTerrainCameraRotationDelta", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("delta", ID_TYPE_NUM); + embed_function("SetTerrainPatchLOD", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + add_embedded_arg("LOD", ID_TYPE_NUM); + embed_function("setWaterWindForce", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("f", ID_TYPE_NUM); + embed_function("getWaterWindForce", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterWaveHeight", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getWaterWaveHeight", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterWindDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getWaterWindDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setWaterColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("getWaterColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterColorBlendFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("cbfactor", ID_TYPE_NUM); + embed_function("getWaterColorBlendFactor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorAnimation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("start_frame", ID_TYPE_NUM); + add_embedded_arg("end_frame", ID_TYPE_NUM); + embed_function("SetActorAnimationSpeed", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("speed", ID_TYPE_NUM); + embed_function("SetActorFrame", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("frame", ID_TYPE_NUM); + embed_function("SetActorMD2Animation", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("anim", ID_TYPE_NUM); + embed_function("SetActorMD2AnimationByName", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("anim_name$", ID_TYPE_STR); + embed_function("GetActorAnimationSpeed", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorEndFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorCurrentFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorStartFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("StartActorTransition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("frame", ID_TYPE_NUM); + add_embedded_arg("transition_time", ID_TYPE_NUM); + embed_function("StopActorTransition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("ActorIsInTransition", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorTransitionTime", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("actorAnimationIsLooped", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("loopActorAnimation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("createMaterial", ID_TYPE_FN_NUM); + embed_function("deleteMaterial", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setActorMaterial", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("getActorMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + embed_function("copyActorMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + embed_function("copyMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("smaterial_id", ID_TYPE_NUM); + embed_function("setMaterialTextureCanvas", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("level", ID_TYPE_NUM); + add_embedded_arg("canvas_id", ID_TYPE_NUM); + embed_function("setMaterialAmbientColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialAmbientColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialAntiAliasing", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("aa", ID_TYPE_NUM); + embed_function("getMaterialAntiAliasing", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBackfaceCulling", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialBackfaceCulling", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBlendFactor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("bf", ID_TYPE_NUM); + embed_function("getMaterialBlendFactor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBlendMode", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("getMaterialBlendMode", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialColorMask", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color_mask", ID_TYPE_NUM); + embed_function("getMaterialColorMask", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialColorMode", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color_mode", ID_TYPE_NUM); + embed_function("getMaterialColorMode", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialDiffuseColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialDiffuseColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialEmissiveColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialEmissiveColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFog", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialFog", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFrontfaceCulling", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialFrontfaceCulling", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialGouraudShading", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialGouraudShading", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("materialIsAplhaBlend", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("materialIsTransparent", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialLighting", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsLit", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialType", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("mat_type", ID_TYPE_NUM); + embed_function("getMaterialType", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialNormalize", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsNormalized", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialPointCloud", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsPointCloud", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFlag", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("material_flag", ID_TYPE_NUM); + add_embedded_arg("f_value", ID_TYPE_NUM); + embed_function("getMaterialFlag", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("material_flag", ID_TYPE_NUM); + embed_function("setMaterialTexture", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("level", ID_TYPE_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("setMaterialShininess", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("shininess", ID_TYPE_NUM); + embed_function("getMaterialShininess", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialSpecularColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialSpecularColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialThickness", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("thickness", ID_TYPE_NUM); + embed_function("getMaterialThickness", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialWireframe", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsWireframe", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setActorTexture", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("layer", ID_TYPE_NUM); + add_embedded_arg("image_id", ID_TYPE_NUM); + embed_function("getActorMaterialCount", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setActorMaterialFlag", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + add_embedded_arg("flag_value", ID_TYPE_NUM); + embed_function("getActorMaterialFlag", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("setActorMaterialType", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_type", ID_TYPE_NUM); + embed_function("getActorMaterialType", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material", ID_TYPE_NUM); +} void init_embedded_types() { - create_type("empty"); + create_type("empty"); } void init_embedded_variables() { -} - -#endif // RC_BUILTIN_H_INCLUDED +} + +#endif // RC_BUILTIN_H_INCLUDED diff --git a/rcbasic_build/rc_builtin2.h b/rcbasic_build/rc_builtin2.h new file mode 100644 index 0000000..b6fb954 --- /dev/null +++ b/rcbasic_build/rc_builtin2.h @@ -0,0 +1,2521 @@ +#ifndef RC_BUILTIN_H_INCLUDED +#define RC_BUILTIN_H_INCLUDED +#include "identifier.h" + +void init_embedded_functions() +{ + embed_function("Fprint", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("Input$", ID_TYPE_FN_STR); + add_embedded_arg("prompt$", ID_TYPE_STR); + embed_function("ArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + embed_function("StringArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id$", ID_TYPE_BYREF_STR); + embed_function("NumberArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + embed_function("ArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("StringArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id$", ID_TYPE_BYREF_STR); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("NumberArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_NUM); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("NumberArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("dst", ID_TYPE_BYREF_NUM); + embed_function("StringArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_BYREF_STR); + add_embedded_arg("dst$", ID_TYPE_BYREF_STR); + embed_function("ArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("dst", ID_TYPE_BYREF_NUM); + embed_function("NumberArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("fdata", ID_TYPE_NUM); + embed_function("StringArrayFill", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_BYREF_STR); + add_embedded_arg("fdata$", ID_TYPE_STR); + embed_function("ArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_NUM); + add_embedded_arg("fdata", ID_TYPE_NUM); + embed_function("TypeArrayDim", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); + embed_function("TypeArraySize", ID_TYPE_FN_NUM); + add_embedded_arg("id", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("array_dim", ID_TYPE_NUM); + embed_function("TypeArrayCopy", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("dst", ID_TYPE_BYREF_USER, 0); + embed_function("TypeArrayFill", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_BYREF_USER, 0); + add_embedded_arg("fdata", ID_TYPE_USER, 0); + embed_function("Abs", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Acos", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("AndBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Asin", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Atan", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Bin$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("CInt32", ID_TYPE_FN_NUM); + add_embedded_arg("i", ID_TYPE_NUM); + embed_function("CInt64", ID_TYPE_FN_NUM); + add_embedded_arg("i", ID_TYPE_NUM); + embed_function("Cos", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Degrees", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + embed_function("Exp", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Frac", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Hex$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("HexVal", ID_TYPE_FN_NUM); + add_embedded_arg("n$", ID_TYPE_STR); + embed_function("Int", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Log", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Max", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Min", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("OrBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("Radians", ID_TYPE_FN_NUM); + add_embedded_arg("d", ID_TYPE_NUM); + embed_function("Randomize", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Rand", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Round", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sign", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sin", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Sqrt", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Tan", ID_TYPE_FN_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("XOrBit", ID_TYPE_FN_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("GetLineIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("p0_x", ID_TYPE_NUM); + add_embedded_arg("p0_y", ID_TYPE_NUM); + add_embedded_arg("p1_x", ID_TYPE_NUM); + add_embedded_arg("p1_y", ID_TYPE_NUM); + add_embedded_arg("p2_x", ID_TYPE_NUM); + add_embedded_arg("p2_y", ID_TYPE_NUM); + add_embedded_arg("p3_x", ID_TYPE_NUM); + add_embedded_arg("p3_y", ID_TYPE_NUM); + add_embedded_arg("i_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("i_y", ID_TYPE_BYREF_NUM); + embed_function("Interpolate", ID_TYPE_FN_NUM); + add_embedded_arg("min_a", ID_TYPE_NUM); + add_embedded_arg("max_a", ID_TYPE_NUM); + add_embedded_arg("mid_a", ID_TYPE_NUM); + add_embedded_arg("min_b", ID_TYPE_NUM); + add_embedded_arg("max_b", ID_TYPE_NUM); + embed_function("ATan2", ID_TYPE_FN_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + embed_function("PointInQuad", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("x3", ID_TYPE_NUM); + add_embedded_arg("y3", ID_TYPE_NUM); + add_embedded_arg("x4", ID_TYPE_NUM); + add_embedded_arg("y4", ID_TYPE_NUM); + embed_function("PointInTri", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("x3", ID_TYPE_NUM); + add_embedded_arg("y3", ID_TYPE_NUM); + embed_function("Distance2D", ID_TYPE_FN_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + embed_function("Distance3D", ID_TYPE_FN_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("z1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("z2", ID_TYPE_NUM); + embed_function("GetCircleLineIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("circle_x", ID_TYPE_NUM); + add_embedded_arg("circle_y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + add_embedded_arg("ix1", ID_TYPE_BYREF_NUM); + add_embedded_arg("iy1", ID_TYPE_BYREF_NUM); + add_embedded_arg("ix2", ID_TYPE_BYREF_NUM); + add_embedded_arg("iy2", ID_TYPE_BYREF_NUM); + embed_function("GetLinePlaneIntersection", ID_TYPE_FN_NUM); + add_embedded_arg("line_point", ID_TYPE_BYREF_NUM); + add_embedded_arg("line_direction", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_1", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_2", ID_TYPE_BYREF_NUM); + add_embedded_arg("plane_point_3", ID_TYPE_BYREF_NUM); + add_embedded_arg("intersection", ID_TYPE_BYREF_NUM); + embed_function("Asc", ID_TYPE_FN_NUM); + add_embedded_arg("c$", ID_TYPE_STR); + embed_function("Chr$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Insert$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("tgt$", ID_TYPE_STR); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("InStr", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("substr$", ID_TYPE_STR); + embed_function("Lcase$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Left$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Length", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Len", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Ltrim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Mid$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("start", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("ReplaceSubstr$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("rpc$", ID_TYPE_STR); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("Replace$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("tgt$", ID_TYPE_STR); + add_embedded_arg("rpc$", ID_TYPE_STR); + embed_function("Reverse$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Right$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Rtrim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("StringFill$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str_F$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Str_S$", ID_TYPE_FN_STR); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Tally", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("substr$", ID_TYPE_STR); + embed_function("Trim$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Ucase$", ID_TYPE_FN_STR); + add_embedded_arg("src$", ID_TYPE_STR); + embed_function("Val", ID_TYPE_FN_NUM); + add_embedded_arg("n$", ID_TYPE_STR); + embed_function("Size", ID_TYPE_FN_NUM); + add_embedded_arg("s$", ID_TYPE_STR); + embed_function("BufferFromString", ID_TYPE_FN_NUM); + add_embedded_arg("s$", ID_TYPE_STR); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("StringFromBuffer$", ID_TYPE_FN_STR); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("buffer_size", ID_TYPE_NUM); + embed_function("CreateStack_N", ID_TYPE_FN_NUM); + embed_function("CreateStack_S", ID_TYPE_FN_NUM); + embed_function("ClearStack_N", ID_TYPE_SUB); + embed_function("ClearStack_S", ID_TYPE_SUB); + embed_function("DeleteStack_N", ID_TYPE_SUB); + add_embedded_arg("stack_id", ID_TYPE_NUM); + embed_function("DeleteStack_S", ID_TYPE_SUB); + add_embedded_arg("stack_id", ID_TYPE_NUM); + embed_function("Stack_N", ID_TYPE_SUB); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Stack_S", ID_TYPE_SUB); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Push_N", ID_TYPE_SUB); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("Pop_N", ID_TYPE_FN_NUM); + embed_function("Push_S", ID_TYPE_SUB); + add_embedded_arg("s$", ID_TYPE_STR); + embed_function("Pop_S$", ID_TYPE_FN_STR); + embed_function("Stack_Size_N", ID_TYPE_FN_NUM); + embed_function("Stack_Size_S", ID_TYPE_FN_NUM); + embed_function("OpenFile", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + add_embedded_arg("mode", ID_TYPE_NUM); + embed_function("CloseFile", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("ReadByte", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("WriteByte", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("byte", ID_TYPE_NUM); + embed_function("ReadLine$", ID_TYPE_FN_STR); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("Write", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("WriteLine", ID_TYPE_SUB); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("CopyFile", ID_TYPE_SUB); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("RemoveFile", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("FileExists", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("MoveFile", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("RenameFile", ID_TYPE_FN_NUM); + add_embedded_arg("src$", ID_TYPE_STR); + add_embedded_arg("dst$", ID_TYPE_STR); + embed_function("FileLength", ID_TYPE_FN_NUM); + add_embedded_arg("fileName$", ID_TYPE_STR); + embed_function("Tell", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("Seek", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("EOF", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + embed_function("WriteByteBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("buf", ID_TYPE_BYREF_NUM); + add_embedded_arg("buf_size", ID_TYPE_NUM); + embed_function("ReadByteBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("stream", ID_TYPE_NUM); + add_embedded_arg("buf", ID_TYPE_BYREF_NUM); + add_embedded_arg("buf_size", ID_TYPE_NUM); + embed_function("ChangeDir", ID_TYPE_SUB); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("DirExists", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("DirFirst$", ID_TYPE_FN_STR); + embed_function("Dir$", ID_TYPE_FN_STR); + embed_function("DirNext$", ID_TYPE_FN_STR); + embed_function("MakeDir", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("RemoveDir", ID_TYPE_FN_NUM); + add_embedded_arg("p$", ID_TYPE_STR); + embed_function("Date$", ID_TYPE_FN_STR); + embed_function("Easter$", ID_TYPE_FN_STR); + add_embedded_arg("year", ID_TYPE_NUM); + embed_function("Ticks", ID_TYPE_FN_NUM); + embed_function("Time$", ID_TYPE_FN_STR); + embed_function("Timer", ID_TYPE_FN_NUM); + embed_function("Wait", ID_TYPE_SUB); + add_embedded_arg("m_sec", ID_TYPE_NUM); + embed_function("OpenWindow", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("fullscreen", ID_TYPE_NUM); + add_embedded_arg("vsync", ID_TYPE_NUM); + embed_function("OpenWindowEx", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("mode", ID_TYPE_NUM); + add_embedded_arg("aa", ID_TYPE_NUM); + add_embedded_arg("stencil_buffer", ID_TYPE_NUM); + add_embedded_arg("vsync", ID_TYPE_NUM); + embed_function("CloseWindow", ID_TYPE_SUB); + embed_function("RaiseWindow", ID_TYPE_SUB); + embed_function("Update", ID_TYPE_SUB); + embed_function("Cls", ID_TYPE_SUB); + embed_function("SetClearColor", ID_TYPE_SUB); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("ShowWindow", ID_TYPE_SUB); + embed_function("HideWindow", ID_TYPE_SUB); + embed_function("SetWindowTitle", ID_TYPE_SUB); + add_embedded_arg("title$", ID_TYPE_STR); + embed_function("WindowTitle$", ID_TYPE_FN_STR); + embed_function("SetWindowPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetWindowPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("SetWindowSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetWindowMinSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowMinSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetWindowMaxSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetWindowMaxSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("WindowIsFullscreen", ID_TYPE_FN_NUM); + embed_function("WindowIsVisible", ID_TYPE_FN_NUM); + embed_function("WindowIsBordered", ID_TYPE_FN_NUM); + embed_function("WindowIsResizable", ID_TYPE_FN_NUM); + embed_function("WindowIsMinimized", ID_TYPE_FN_NUM); + embed_function("WindowIsMaximized", ID_TYPE_FN_NUM); + embed_function("WindowHasInputFocus", ID_TYPE_FN_NUM); + embed_function("WindowHasMouseFocus", ID_TYPE_FN_NUM); + embed_function("SetWindowFullscreen", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("MaximizeWindow", ID_TYPE_SUB); + embed_function("MinimizeWindow", ID_TYPE_SUB); + embed_function("SetWindowBorder", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("WindowClip", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("WindowExists", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Close", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Maximize", ID_TYPE_FN_NUM); + embed_function("WindowEvent_Minimize", ID_TYPE_FN_NUM); + embed_function("FPS", ID_TYPE_FN_NUM); + embed_function("SetWindowIcon", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("WindowEvent_Resize", ID_TYPE_FN_NUM); + embed_function("SetWindowAutoClose", ID_TYPE_SUB); + add_embedded_arg("exit_on_close", ID_TYPE_NUM); + embed_function("SetWindowResizable", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("WindowMode", ID_TYPE_FN_NUM); + add_embedded_arg("visible", ID_TYPE_NUM); + add_embedded_arg("fullscreen", ID_TYPE_NUM); + add_embedded_arg("resizable", ID_TYPE_NUM); + add_embedded_arg("borderless", ID_TYPE_NUM); + add_embedded_arg("highDPI", ID_TYPE_NUM); + embed_function("getWindowMode", ID_TYPE_FN_NUM); + embed_function("RestoreWindow", ID_TYPE_SUB); + embed_function("GrabInput", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetWindowAlwaysOnTop", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetMouseRelative", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetWindowVSync", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("FlashWindow", ID_TYPE_FN_NUM); + embed_function("WindowIsGrabbed", ID_TYPE_FN_NUM); + embed_function("OpenCanvas", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("viewport_x", ID_TYPE_NUM); + add_embedded_arg("viewport_y", ID_TYPE_NUM); + add_embedded_arg("viewport_w", ID_TYPE_NUM); + add_embedded_arg("viewport_h", ID_TYPE_NUM); + add_embedded_arg("mode", ID_TYPE_NUM); + embed_function("CloseCanvas", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvas3D", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetCanvasVisible", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("CanvasIsVisible", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasViewport", ID_TYPE_SUB); + add_embedded_arg("cnum", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetCanvasViewport", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("Canvas", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasOffset", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetCanvasOffset", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("GetCanvasSize", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("ClearCanvas", ID_TYPE_SUB); + embed_function("SetCanvasAlpha", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("GetCanvasAlpha", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("SetCanvasColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("GetCanvasColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("CloneCanvas", ID_TYPE_SUB); + add_embedded_arg("src", ID_TYPE_NUM); + add_embedded_arg("dst", ID_TYPE_NUM); + embed_function("SetCanvasZ", ID_TYPE_SUB); + add_embedded_arg("c_num", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCanvasZ", ID_TYPE_FN_NUM); + add_embedded_arg("c_num", ID_TYPE_NUM); + embed_function("CanvasClip", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("ActiveCanvas", ID_TYPE_FN_NUM); + embed_function("Circle", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("CircleFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("Ellipse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("rx", ID_TYPE_NUM); + add_embedded_arg("ry", ID_TYPE_NUM); + embed_function("EllipseFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("rx", ID_TYPE_NUM); + add_embedded_arg("ry", ID_TYPE_NUM); + embed_function("FloodFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("GetPixel", ID_TYPE_FN_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("SetColor", ID_TYPE_SUB); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("Line", ID_TYPE_SUB); + add_embedded_arg("x1", ID_TYPE_NUM); + add_embedded_arg("y1", ID_TYPE_NUM); + add_embedded_arg("x2", ID_TYPE_NUM); + add_embedded_arg("y2", ID_TYPE_NUM); + embed_function("Poly", ID_TYPE_SUB); + add_embedded_arg("n", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + embed_function("Rect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("RectFill", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("RGB", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("g", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + embed_function("RGBA", ID_TYPE_FN_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("g", ID_TYPE_NUM); + add_embedded_arg("b", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("Pset", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("LoadImage", ID_TYPE_FN_NUM); + add_embedded_arg("img$", ID_TYPE_STR); + embed_function("LoadImageEx", ID_TYPE_FN_NUM); + add_embedded_arg("img$", ID_TYPE_STR); + add_embedded_arg("colkey", ID_TYPE_NUM); + embed_function("createImage", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("createImageEx", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getImageBuffer", ID_TYPE_SUB); + add_embedded_arg("img_id", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("ImageExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("ColorKey", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("setBilinearFilter", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getBilinearFilter", ID_TYPE_FN_NUM); + embed_function("CopyImage", ID_TYPE_FN_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("DeleteImage", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetImageAlpha", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("GetImageAlpha", ID_TYPE_FN_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("GetImageSize", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("SetBlendMode", ID_TYPE_SUB); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("GetBlendMode", ID_TYPE_FN_NUM); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("SetImageColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("ImageColorMod", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DrawImage", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("DrawImage_Blit", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + embed_function("DrawImage_BlitEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + embed_function("DrawImage_Rotate", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("DrawImage_RotateEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("DrawImage_Zoom", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_ZoomEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_Rotozoom", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_RotozoomEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("zx", ID_TYPE_NUM); + add_embedded_arg("zy", ID_TYPE_NUM); + embed_function("DrawImage_Flip", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("DrawImage_FlipEx", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("src_x", ID_TYPE_NUM); + add_embedded_arg("src_y", ID_TYPE_NUM); + add_embedded_arg("src_w", ID_TYPE_NUM); + add_embedded_arg("src_h", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("InKey", ID_TYPE_FN_NUM); + embed_function("Key", ID_TYPE_FN_NUM); + add_embedded_arg("key_code", ID_TYPE_NUM); + embed_function("WaitKey", ID_TYPE_FN_NUM); + embed_function("HideMouse", ID_TYPE_SUB); + embed_function("ShowMouse", ID_TYPE_SUB); + embed_function("MouseIsVisible", ID_TYPE_FN_NUM); + embed_function("GetMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); + embed_function("MouseX", ID_TYPE_FN_NUM); + embed_function("MouseY", ID_TYPE_FN_NUM); + embed_function("MouseButton", ID_TYPE_FN_NUM); + add_embedded_arg("mb", ID_TYPE_NUM); + embed_function("GetMouseWheel", ID_TYPE_SUB); + add_embedded_arg("x_axis", ID_TYPE_BYREF_NUM); + add_embedded_arg("y_axis", ID_TYPE_BYREF_NUM); + embed_function("MouseWheelX", ID_TYPE_FN_NUM); + embed_function("MouseWheelY", ID_TYPE_FN_NUM); + embed_function("GetGlobalMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb1", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb2", ID_TYPE_BYREF_NUM); + add_embedded_arg("mb3", ID_TYPE_BYREF_NUM); + embed_function("GlobalMouseX", ID_TYPE_FN_NUM); + embed_function("GlobalMouseY", ID_TYPE_FN_NUM); + embed_function("WarpMouse", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("WarpMouseGlobal", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("SetMouseZone", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("ClearMouseZone", ID_TYPE_SUB); + embed_function("SoundFromBuffer", ID_TYPE_FN_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("buffer_size", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("LoadSound", ID_TYPE_FN_NUM); + add_embedded_arg("snd_file$", ID_TYPE_STR); + embed_function("LoadMusic", ID_TYPE_SUB); + add_embedded_arg("music_file$", ID_TYPE_STR); + embed_function("PlaySound", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + embed_function("PlaySoundTimed", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + add_embedded_arg("ms", ID_TYPE_NUM); + embed_function("PlayMusic", ID_TYPE_SUB); + add_embedded_arg("mLoops", ID_TYPE_NUM); + embed_function("PauseSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("ResumeSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("PauseMusic", ID_TYPE_SUB); + embed_function("ResumeMusic", ID_TYPE_SUB); + embed_function("DeleteSound", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DeleteMusic", ID_TYPE_SUB); + embed_function("FadeMusicIn", ID_TYPE_SUB); + add_embedded_arg("fade_time", ID_TYPE_NUM); + add_embedded_arg("loops", ID_TYPE_NUM); + embed_function("FadeMusicOut", ID_TYPE_SUB); + add_embedded_arg("fade_time", ID_TYPE_NUM); + embed_function("MusicExists", ID_TYPE_FN_NUM); + embed_function("SetMusicVolume", ID_TYPE_SUB); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetMusicVolume", ID_TYPE_FN_NUM); + embed_function("SetMusicPosition", ID_TYPE_SUB); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("GetMusicPosition", ID_TYPE_FN_NUM); + embed_function("RewindMusic", ID_TYPE_SUB); + embed_function("SetSoundChannels", ID_TYPE_SUB); + add_embedded_arg("max_channels", ID_TYPE_NUM); + embed_function("NumSoundChannels", ID_TYPE_FN_NUM); + embed_function("SoundIsEnabled", ID_TYPE_FN_NUM); + embed_function("SoundExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetChannelVolume", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetChannelVolume", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("SetSoundVolume", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetSoundVolume", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("StopMusic", ID_TYPE_SUB); + embed_function("StopSound", ID_TYPE_SUB); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("SetChannelPanning", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("left_value", ID_TYPE_NUM); + add_embedded_arg("right_value", ID_TYPE_NUM); + embed_function("SetChannelDistance", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("dist_value", ID_TYPE_NUM); + embed_function("ChannelIsPlaying", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("ChannelIsPaused", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + embed_function("QueryAudioSpec", ID_TYPE_FN_NUM); + add_embedded_arg("freq", ID_TYPE_BYREF_NUM); + add_embedded_arg("format", ID_TYPE_BYREF_NUM); + add_embedded_arg("channels", ID_TYPE_BYREF_NUM); + embed_function("MusicIsPlaying", ID_TYPE_FN_NUM); + embed_function("SetChannelSpacePosition", ID_TYPE_FN_NUM); + add_embedded_arg("channel", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("distance", ID_TYPE_NUM); + embed_function("NumJoysticks", ID_TYPE_FN_NUM); + embed_function("NumJoyAxes", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyButtons", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyHats", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("NumJoyTrackBalls", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoyAxis", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_axis", ID_TYPE_NUM); + embed_function("JoyButton", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_button", ID_TYPE_NUM); + embed_function("JoyHat", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("joy_hat", ID_TYPE_NUM); + embed_function("GetJoyTrackBall", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("ball", ID_TYPE_NUM); + add_embedded_arg("dx", ID_TYPE_BYREF_NUM); + add_embedded_arg("dy", ID_TYPE_BYREF_NUM); + embed_function("JoyName$", ID_TYPE_FN_STR); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoystickIsConnected", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoyRumblePlay", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + add_embedded_arg("strength", ID_TYPE_NUM); + add_embedded_arg("duration", ID_TYPE_NUM); + embed_function("JoyRumbleStop", ID_TYPE_SUB); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("JoystickIsHaptic", ID_TYPE_FN_NUM); + add_embedded_arg("joy_num", ID_TYPE_NUM); + embed_function("LoadFont", ID_TYPE_FN_NUM); + add_embedded_arg("fnt_file$", ID_TYPE_STR); + add_embedded_arg("font_size", ID_TYPE_NUM); + embed_function("DeleteFont", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("FontExists", ID_TYPE_FN_NUM); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("SetFont", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + embed_function("DrawText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("RenderText", ID_TYPE_SUB); + add_embedded_arg("slot", ID_TYPE_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("GetTextSize", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("GetTextWidth", ID_TYPE_FN_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("GetTextHeight", ID_TYPE_FN_NUM); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("TouchPressure", ID_TYPE_FN_NUM); + embed_function("GetTouch", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("dx", ID_TYPE_BYREF_NUM); + add_embedded_arg("dy", ID_TYPE_BYREF_NUM); + embed_function("GetMultiTouch", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("fingers", ID_TYPE_BYREF_NUM); + add_embedded_arg("dist", ID_TYPE_BYREF_NUM); + add_embedded_arg("theta", ID_TYPE_BYREF_NUM); + embed_function("GetTouchFinger", ID_TYPE_SUB); + add_embedded_arg("finger", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("pressure", ID_TYPE_BYREF_NUM); + embed_function("NumFingers", ID_TYPE_FN_NUM); + embed_function("GetAccel", ID_TYPE_SUB); + add_embedded_arg("accel_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("AccelName$", ID_TYPE_FN_STR); + add_embedded_arg("accel_num", ID_TYPE_NUM); + embed_function("NumAccels", ID_TYPE_FN_NUM); + embed_function("GetGyro", ID_TYPE_SUB); + add_embedded_arg("gyro_num", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GyroName$", ID_TYPE_FN_STR); + add_embedded_arg("gyro_num", ID_TYPE_NUM); + embed_function("NumGyros", ID_TYPE_FN_NUM); + embed_function("CheckSockets", ID_TYPE_FN_NUM); + add_embedded_arg("timeout_ms", ID_TYPE_NUM); + embed_function("TCP_SocketReady", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_SocketReady", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_OpenSocket", ID_TYPE_FN_NUM); + add_embedded_arg("host$", ID_TYPE_STR); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("TCP_CloseSocket", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_RemoteHost", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_RemotePort", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("TCP_GetData", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_BYREF_STR); + add_embedded_arg("numBytes", ID_TYPE_NUM); + embed_function("TCP_SendData", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_STR); + embed_function("TCP_AcceptSocket", ID_TYPE_FN_NUM); + add_embedded_arg("server", ID_TYPE_NUM); + add_embedded_arg("client", ID_TYPE_NUM); + embed_function("UDP_OpenSocket", ID_TYPE_FN_NUM); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("UDP_CloseSocket", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_GetData", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_BYREF_STR); + add_embedded_arg("host$", ID_TYPE_BYREF_STR); + add_embedded_arg("port", ID_TYPE_BYREF_NUM); + embed_function("UDP_Length", ID_TYPE_FN_NUM); + embed_function("UDP_MaxLength", ID_TYPE_FN_NUM); + embed_function("UDP_RemoteHost$", ID_TYPE_FN_STR); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_RemotePort", ID_TYPE_FN_NUM); + add_embedded_arg("socket", ID_TYPE_NUM); + embed_function("UDP_SendData", ID_TYPE_SUB); + add_embedded_arg("socket", ID_TYPE_NUM); + add_embedded_arg("sData$", ID_TYPE_STR); + add_embedded_arg("host$", ID_TYPE_STR); + add_embedded_arg("port", ID_TYPE_NUM); + embed_function("LoadVideo", ID_TYPE_SUB); + add_embedded_arg("vid$", ID_TYPE_STR); + embed_function("PlayVideo", ID_TYPE_SUB); + add_embedded_arg("vLoops", ID_TYPE_NUM); + embed_function("PauseVideo", ID_TYPE_SUB); + embed_function("StopVideo", ID_TYPE_SUB); + embed_function("SetVideoPosition", ID_TYPE_SUB); + add_embedded_arg("pos", ID_TYPE_NUM); + embed_function("ResumeVideo", ID_TYPE_SUB); + embed_function("GetVideoPosition", ID_TYPE_FN_NUM); + embed_function("DeleteVideo", ID_TYPE_SUB); + embed_function("VideoIsPlaying", ID_TYPE_FN_NUM); + embed_function("VideoEnd", ID_TYPE_FN_NUM); + embed_function("GetVideoStats", ID_TYPE_SUB); + add_embedded_arg("vFile$", ID_TYPE_STR); + add_embedded_arg("vLen", ID_TYPE_BYREF_NUM); + add_embedded_arg("vfps", ID_TYPE_BYREF_NUM); + add_embedded_arg("frame_w", ID_TYPE_BYREF_NUM); + add_embedded_arg("frame_h", ID_TYPE_BYREF_NUM); + embed_function("SetVideoDrawRect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("GetVideoDrawRect", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("GetVideoSize", ID_TYPE_SUB); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("VideoExists", ID_TYPE_FN_NUM); + embed_function("SetVideoAlpha", ID_TYPE_SUB); + add_embedded_arg("a", ID_TYPE_NUM); + embed_function("SetVideoVolume", ID_TYPE_SUB); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("GetVideoVolume", ID_TYPE_FN_NUM); + add_embedded_arg("vol", ID_TYPE_NUM); + embed_function("System", ID_TYPE_FN_NUM); + add_embedded_arg("cmd$", ID_TYPE_STR); + embed_function("OS$", ID_TYPE_FN_STR); + embed_function("Command$", ID_TYPE_FN_STR); + add_embedded_arg("arg", ID_TYPE_NUM); + embed_function("NumCommands", ID_TYPE_FN_NUM); + embed_function("Env$", ID_TYPE_FN_STR); + add_embedded_arg("v$", ID_TYPE_STR); + embed_function("SetEnv", ID_TYPE_SUB); + add_embedded_arg("var$", ID_TYPE_STR); + add_embedded_arg("value$", ID_TYPE_STR); + embed_function("PrefPath$", ID_TYPE_FN_STR); + add_embedded_arg("org_name$", ID_TYPE_STR); + add_embedded_arg("app_name$", ID_TYPE_STR); + embed_function("Android_GetExternalStoragePath$", ID_TYPE_FN_STR); + embed_function("Android_GetExternalStorageState", ID_TYPE_FN_NUM); + embed_function("Android_GetInternalStoragePath$", ID_TYPE_FN_STR); + embed_function("Android_JNI_Message$", ID_TYPE_FN_STR); + add_embedded_arg("arg$", ID_TYPE_STR); + embed_function("Runtime_Utility_Message$", ID_TYPE_FN_STR); + add_embedded_arg("arg$", ID_TYPE_STR); + embed_function("GetDesktopDisplayMode", ID_TYPE_SUB); + add_embedded_arg("index", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + add_embedded_arg("freq", ID_TYPE_BYREF_NUM); + embed_function("GetPowerInfo", ID_TYPE_SUB); + add_embedded_arg("status", ID_TYPE_BYREF_NUM); + add_embedded_arg("secs", ID_TYPE_BYREF_NUM); + add_embedded_arg("pct", ID_TYPE_BYREF_NUM); + embed_function("EvalJS$", ID_TYPE_FN_STR); + add_embedded_arg("js_code$", ID_TYPE_STR); + embed_function("SystemReturnStdOut$", ID_TYPE_FN_STR); + add_embedded_arg("cmd$", ID_TYPE_STR); + embed_function("OpenURL", ID_TYPE_FN_NUM); + add_embedded_arg("url$", ID_TYPE_STR); + embed_function("MessageBox", ID_TYPE_FN_NUM); + add_embedded_arg("title$", ID_TYPE_STR); + add_embedded_arg("msg$", ID_TYPE_STR); + embed_function("Runtime$", ID_TYPE_FN_STR); + embed_function("NumCPUs", ID_TYPE_FN_NUM); + embed_function("DimMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("m_rows", ID_TYPE_NUM); + add_embedded_arg("m_cols", ID_TYPE_NUM); + embed_function("DeleteMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("AddMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("AugmentMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("CopyMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("InsertMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("InsertMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("MultiplyMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("CubeMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("DeleteMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("DeleteMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("ClearMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("ClearMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("ClearMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("FillMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("FillMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("FillMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("CopyMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + embed_function("CopyMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + embed_function("IdentityMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("SolveMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("IsEqualMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("tolerance", ID_TYPE_NUM); + embed_function("Determinant", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("AdjointMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("InvertMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("MatrixFromBuffer", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + embed_function("GetMatrix", ID_TYPE_SUB); + add_embedded_arg("buffer", ID_TYPE_BYREF_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("RandomizeMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("vmin", ID_TYPE_NUM); + add_embedded_arg("vmax", ID_TYPE_NUM); + embed_function("MatrixValue", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("SetMatrixValue", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("v", ID_TYPE_NUM); + embed_function("ScalarMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("ScalarMatrixColumns", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("ScalarMatrixRows", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("s_value", ID_TYPE_NUM); + embed_function("SquareMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("CofactorMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("SubtractMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("SwapMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("SwapMatrixColumn", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("C1", ID_TYPE_NUM); + add_embedded_arg("C2", ID_TYPE_NUM); + embed_function("SwapMatrixRow", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("R1", ID_TYPE_NUM); + add_embedded_arg("R2", ID_TYPE_NUM); + embed_function("TransposeMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("UnAugmentMatrix", ID_TYPE_FN_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("ZeroMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("GetMatrixSize", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_BYREF_NUM); + add_embedded_arg("c", ID_TYPE_BYREF_NUM); + embed_function("IncrementMatrixRows", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("value", ID_TYPE_NUM); + embed_function("IncrementMatrixColumns", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("value", ID_TYPE_NUM); + embed_function("JoinMatrixRows", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("JoinMatrixColumns", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + add_embedded_arg("mC", ID_TYPE_NUM); + embed_function("ClipMatrix", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("r", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + add_embedded_arg("num_rows", ID_TYPE_NUM); + add_embedded_arg("num_cols", ID_TYPE_NUM); + add_embedded_arg("mB", ID_TYPE_NUM); + embed_function("SetMatrixTranslation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetMatrixRotation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetMatrixScale", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetMatrixTranslation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GetMatrixRotation", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("GetMatrixScale", ID_TYPE_SUB); + add_embedded_arg("mA", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("ClipboardText$", ID_TYPE_FN_STR); + embed_function("SetClipboardText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("HasClipboardText", ID_TYPE_FN_NUM); + embed_function("ReadInput_Start", ID_TYPE_SUB); + embed_function("ReadInput_Stop", ID_TYPE_SUB); + embed_function("ReadInput_Text$", ID_TYPE_FN_STR); + embed_function("ReadInput_SetText", ID_TYPE_SUB); + add_embedded_arg("txt$", ID_TYPE_STR); + embed_function("ReadInput_ToggleBackspace", ID_TYPE_SUB); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("CreateSprite", ID_TYPE_FN_NUM); + add_embedded_arg("img", ID_TYPE_NUM); + embed_function("DeleteSprite", ID_TYPE_SUB); + add_embedded_arg("sprite", ID_TYPE_NUM); + embed_function("SetSpritePosition", ID_TYPE_SUB); + add_embedded_arg("sprite", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + embed_function("LoadMesh", ID_TYPE_FN_NUM); + add_embedded_arg("mesh_file$", ID_TYPE_STR); + embed_function("DeleteMesh", ID_TYPE_SUB); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateMesh", ID_TYPE_FN_NUM); + embed_function("AddMeshBuffer", ID_TYPE_SUB); + add_embedded_arg("mesh", ID_TYPE_NUM); + add_embedded_arg("vertex_count", ID_TYPE_NUM); + add_embedded_arg("vertex_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("normal_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("uv_data", ID_TYPE_BYREF_NUM); + add_embedded_arg("index_count", ID_TYPE_NUM); + add_embedded_arg("index_data", ID_TYPE_BYREF_NUM); + embed_function("LoadMeshFromArchive", ID_TYPE_FN_NUM); + add_embedded_arg("archive$", ID_TYPE_STR); + add_embedded_arg("mesh_file$", ID_TYPE_STR); + embed_function("CreateMeshActor", ID_TYPE_FN_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateMeshOctreeActor", ID_TYPE_FN_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("CreateCubeActor", ID_TYPE_FN_NUM); + add_embedded_arg("cube_size", ID_TYPE_NUM); + embed_function("CreateSphereActor", ID_TYPE_FN_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("CreateWaterPlaneActor", ID_TYPE_FN_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("CreateLightActor", ID_TYPE_FN_NUM); + embed_function("CreateBillboardActor", ID_TYPE_FN_NUM); + embed_function("CreateTerrainActor", ID_TYPE_FN_NUM); + add_embedded_arg("hmap_file$", ID_TYPE_STR); + embed_function("DeleteActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorTransform", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("matrix", ID_TYPE_NUM); + embed_function("SetActorPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("TranslateActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("TranslateActorWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorScale", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("ScaleActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorScale", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorRotation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("RotateActor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorRotation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorVisible", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("ActorIsVisible", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorAutoCulling", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("cull_type", ID_TYPE_NUM); + embed_function("GetActorAutoCulling", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("AddActorShadow", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("RemoveActorShadow", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetGravity3D", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetGravity3D", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetActorCollisionShape", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("shape_type", ID_TYPE_NUM); + add_embedded_arg("mass", ID_TYPE_NUM); + embed_function("GetActorCollisionShape", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorSolid", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("ActorIsSolid", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorCollision", ID_TYPE_FN_NUM); + add_embedded_arg("actor1", ID_TYPE_NUM); + add_embedded_arg("actor2", ID_TYPE_NUM); + embed_function("SetActorGravity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetActorGravity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorDamping", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("lin_damping", ID_TYPE_NUM); + add_embedded_arg("ang_damping", ID_TYPE_NUM); + embed_function("getActorLinearDamping", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorAngularDamping", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorLinearSleepThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorAngularSleepThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("applyActorDamping", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("timeStep", ID_TYPE_NUM); + embed_function("setActorMassProperties", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("mass", ID_TYPE_NUM); + add_embedded_arg("inertia_x", ID_TYPE_NUM); + add_embedded_arg("inertia_y", ID_TYPE_NUM); + add_embedded_arg("inertia_z", ID_TYPE_NUM); + embed_function("getActorLinearFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorLinearFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorInverseMass", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("integrateActorVelocities", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("applyActorCentralForceLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorCentralForceWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorTotalForce", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorTotalTorque", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorInverseInertiaDiagLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorInverseInertiaDiagLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorSleepThresholds", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("linear", ID_TYPE_NUM); + add_embedded_arg("angular", ID_TYPE_NUM); + embed_function("applyActorTorqueLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorForceLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorForceWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorCentralImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorCentralImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorTorqueImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("applyActorImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("applyActorImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + embed_function("clearActorForces", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("updateActorInertiaTensor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getActorCOMPosition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorRotationQ", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + embed_function("getActorLinearVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAngularVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setActorLinearVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorLinearVelocityWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularVelocityWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorLocalPointVelocity", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("rel_x", ID_TYPE_NUM); + add_embedded_arg("rel_y", ID_TYPE_NUM); + add_embedded_arg("rel_z", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorLinearVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAngularVelocityLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorAABB", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_z", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_z", ID_TYPE_BYREF_NUM); + embed_function("computeActorImpulseDenominator", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("pos_x", ID_TYPE_NUM); + add_embedded_arg("pos_y", ID_TYPE_NUM); + add_embedded_arg("pos_z", ID_TYPE_NUM); + add_embedded_arg("normal_x", ID_TYPE_NUM); + add_embedded_arg("normal_y", ID_TYPE_NUM); + add_embedded_arg("normal_z", ID_TYPE_NUM); + embed_function("computeActorAngularImpulseDenominator", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setActorAngularFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getActorAngularFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("computeActorGyroImpulseLocal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("dt", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("computeActorGyroImpulseWorld", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("dt", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getActorLocalInertia", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("createPointConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + embed_function("createPointConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("pxB", ID_TYPE_NUM); + add_embedded_arg("pyB", ID_TYPE_NUM); + add_embedded_arg("pzB", ID_TYPE_NUM); + embed_function("setConstraintPivotA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setConstraintPivotB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("createHingeConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("axA", ID_TYPE_NUM); + add_embedded_arg("ayA", ID_TYPE_NUM); + add_embedded_arg("azA", ID_TYPE_NUM); + embed_function("createHingeConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("pxA", ID_TYPE_NUM); + add_embedded_arg("pyA", ID_TYPE_NUM); + add_embedded_arg("pzA", ID_TYPE_NUM); + add_embedded_arg("pxB", ID_TYPE_NUM); + add_embedded_arg("pyB", ID_TYPE_NUM); + add_embedded_arg("pzB", ID_TYPE_NUM); + add_embedded_arg("axA", ID_TYPE_NUM); + add_embedded_arg("ayA", ID_TYPE_NUM); + add_embedded_arg("azA", ID_TYPE_NUM); + add_embedded_arg("axB", ID_TYPE_NUM); + add_embedded_arg("ayB", ID_TYPE_NUM); + add_embedded_arg("azB", ID_TYPE_NUM); + embed_function("createSlideConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("frameInB_matrix", ID_TYPE_NUM); + add_embedded_arg("useLinearReferenceFrameA", ID_TYPE_NUM); + embed_function("createSlideConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("frameInA_matrix", ID_TYPE_NUM); + add_embedded_arg("frameInB_matrix", ID_TYPE_NUM); + add_embedded_arg("useLinearReferenceFrameA", ID_TYPE_NUM); + embed_function("createConeConstraint", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("rbAFrame_matrix", ID_TYPE_NUM); + embed_function("createConeConstraintEx", ID_TYPE_FN_NUM); + add_embedded_arg("actorA", ID_TYPE_NUM); + add_embedded_arg("actorB", ID_TYPE_NUM); + add_embedded_arg("rbAFrame_matrix", ID_TYPE_NUM); + add_embedded_arg("rbBFrame_matrix", ID_TYPE_NUM); + embed_function("deleteConstraint", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFrameOffsetA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("rx", ID_TYPE_BYREF_NUM); + add_embedded_arg("ry", ID_TYPE_BYREF_NUM); + add_embedded_arg("rz", ID_TYPE_BYREF_NUM); + embed_function("getConstraintFrameOffsetB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + add_embedded_arg("rx", ID_TYPE_BYREF_NUM); + add_embedded_arg("ry", ID_TYPE_BYREF_NUM); + add_embedded_arg("rz", ID_TYPE_BYREF_NUM); + embed_function("useConstraintFrameOffset", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getHingeAngle", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getHingeAngleEx", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("t_matrixA", ID_TYPE_NUM); + add_embedded_arg("t_matrixB", ID_TYPE_NUM); + embed_function("getConstraintBreakingImpulseThreshold", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAFrame", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("getConstraintBFrame", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("mA", ID_TYPE_NUM); + embed_function("setConstraintAxis", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("setConstraintBreakingImpulseThreshold", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("threshold", ID_TYPE_NUM); + embed_function("setConstraintFrames", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("frameA_matrix", ID_TYPE_NUM); + add_embedded_arg("frameB_matrix", ID_TYPE_NUM); + embed_function("setHingeLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("low", ID_TYPE_NUM); + add_embedded_arg("high", ID_TYPE_NUM); + add_embedded_arg("softness", ID_TYPE_NUM); + add_embedded_arg("bias_factor", ID_TYPE_NUM); + add_embedded_arg("relaxation_factor", ID_TYPE_NUM); + embed_function("setConeLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("swingSpan1", ID_TYPE_NUM); + add_embedded_arg("swingSpan2", ID_TYPE_NUM); + add_embedded_arg("twistSpan", ID_TYPE_NUM); + add_embedded_arg("softness", ID_TYPE_NUM); + add_embedded_arg("bias_factor", ID_TYPE_NUM); + add_embedded_arg("relaxation_factor", ID_TYPE_NUM); + embed_function("getConstraintLimitBiasFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getLimitRelaxationFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLimitSign", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getHingeSolveLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("useHingeReferenceFrameA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getConstraintAppliedImpulse", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFixedActor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintPivotA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintPivotB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintActorA", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintActorB", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintSolverIterations", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("num", ID_TYPE_NUM); + embed_function("getConstraintBiasFactor", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDamping", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintFixThresh", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("limit_index", ID_TYPE_NUM); + embed_function("getConstraintLimitSoftness", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolverIterations", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAnglePoint", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + add_embedded_arg("c_len", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAngularOnly", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveSwingLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveTwistLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSwingSpan1", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSwingSpan2", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistAngle", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistLimitSign", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintTwistSpan", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintAngularOnly", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("setConstraintDamping", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("damping", ID_TYPE_NUM); + embed_function("setConstraintFixThresh", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("fixThresh", ID_TYPE_NUM); + embed_function("getConstraintAnchorA", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAnchorB", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("getConstraintAngDepth", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintAngularPos", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintDampingOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLinearPos", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLinDepth", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLowerAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintLowerLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintRestitutionOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessDirAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessDirLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessLimAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessLimLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessOrthoAng", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSoftnessOrthoLin", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintSolveLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUpperAngLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUpperLinLimit", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("getConstraintUseFrameOffset", ID_TYPE_FN_NUM); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + embed_function("setConstraintDampingDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintDampingOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintLowerAngLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintLowerLinLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintRestitutionOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessDirAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessDirLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessLimAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessLimLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessOrthoAng", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintSoftnessOrthoLin", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintUpperAngLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("setConstraintUpperLinLimit", ID_TYPE_SUB); + add_embedded_arg("constraint_id", ID_TYPE_NUM); + add_embedded_arg("n", ID_TYPE_NUM); + embed_function("SetCameraPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCameraPosition", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("TranslateCamera", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetCameraRotation", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("GetCameraRotation", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("RotateCamera", ID_TYPE_SUB); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("SetCameraFOV", ID_TYPE_SUB); + add_embedded_arg("fov", ID_TYPE_NUM); + embed_function("GetCameraFOV", ID_TYPE_FN_NUM); + embed_function("SetCameraAspectRatio", ID_TYPE_SUB); + add_embedded_arg("aspect", ID_TYPE_NUM); + embed_function("GetCameraAspectRatio", ID_TYPE_FN_NUM); + embed_function("SetCameraFarValue", ID_TYPE_SUB); + add_embedded_arg("zf", ID_TYPE_NUM); + embed_function("GetCameraFarValue", ID_TYPE_FN_NUM); + embed_function("SetCameraNearValue", ID_TYPE_SUB); + add_embedded_arg("zn", ID_TYPE_NUM); + embed_function("GetCameraNearValue", ID_TYPE_FN_NUM); + embed_function("AddSceneSkyBox", ID_TYPE_SUB); + add_embedded_arg("img_top", ID_TYPE_NUM); + add_embedded_arg("img_bottom", ID_TYPE_NUM); + add_embedded_arg("img_left", ID_TYPE_NUM); + add_embedded_arg("img_right", ID_TYPE_NUM); + add_embedded_arg("img_front", ID_TYPE_NUM); + add_embedded_arg("img_back", ID_TYPE_NUM); + embed_function("AddSceneSkyDome", ID_TYPE_SUB); + add_embedded_arg("img", ID_TYPE_NUM); + embed_function("AddSceneSkyDomeEx", ID_TYPE_SUB); + add_embedded_arg("img", ID_TYPE_NUM); + add_embedded_arg("horiRes", ID_TYPE_NUM); + add_embedded_arg("vertRes", ID_TYPE_NUM); + add_embedded_arg("txPercentage", ID_TYPE_NUM); + add_embedded_arg("spherePercentage", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("RemoveSceneSky", ID_TYPE_SUB); + embed_function("SetWorld3DDeltaTime", ID_TYPE_SUB); + add_embedded_arg("dt", ID_TYPE_NUM); + embed_function("SetWorld3DMaxSubSteps", ID_TYPE_SUB); + add_embedded_arg("steps", ID_TYPE_NUM); + embed_function("SetWorld3DTimeStep", ID_TYPE_SUB); + add_embedded_arg("ts", ID_TYPE_NUM); + embed_function("startParticleEmitter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("stopParticleEmitter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("useParticleEveryMeshVertex", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingEveryMeshVertex", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleNormalDirectionMod", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getParticleNormalDirectionMod", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("useParticleNormalDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingNormalDirection", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMesh", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("mesh", ID_TYPE_NUM); + embed_function("setParticleMinParticlesPerSecond", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("minParticlesPerSecond", ID_TYPE_NUM); + embed_function("getParticleMinParticlesPerSecond", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxParticlesPerSecond", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxParticlesPerSecond", ID_TYPE_NUM); + embed_function("getParticleMaxParticlesPerSecond", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinStartColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getParticleMinStartColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxStartColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getParticleMaxStartColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinLife", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("minLife", ID_TYPE_NUM); + embed_function("getParticleMinLife", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxLife", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxLife", ID_TYPE_NUM); + embed_function("getParticleMaxLife", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMaxAngle", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("maxAngle", ID_TYPE_NUM); + embed_function("getParticleMaxAngle", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleMinStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getParticleMinStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("setParticleMaxStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getParticleMaxStartSize", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("w", ID_TYPE_BYREF_NUM); + add_embedded_arg("h", ID_TYPE_BYREF_NUM); + embed_function("setParticleCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setParticleRadius", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("getParticleRadius", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleRingThickness", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("ringThickness", ID_TYPE_NUM); + embed_function("getParticleRingThickness", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setParticleBox", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_NUM); + add_embedded_arg("min_y", ID_TYPE_NUM); + add_embedded_arg("min_z", ID_TYPE_NUM); + add_embedded_arg("max_x", ID_TYPE_NUM); + add_embedded_arg("max_y", ID_TYPE_NUM); + add_embedded_arg("max_z", ID_TYPE_NUM); + embed_function("getParticleBox", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("min_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("min_z", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_x", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_y", ID_TYPE_BYREF_NUM); + add_embedded_arg("max_z", ID_TYPE_BYREF_NUM); + embed_function("setParticleNormal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("y", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getParticleNormal", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setParticleLength", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("p_len", ID_TYPE_NUM); + embed_function("getParticleLength", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("useParticleOutlineOnly", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("particleIsUsingOutlineOnly", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("lightIsCastingShadow", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getLightType", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("getLightRadius", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setLightType", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("light_type", ID_TYPE_NUM); + embed_function("setLightRadius", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("radius", ID_TYPE_NUM); + embed_function("setLightShadowCast", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("SetLightAmbientColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightAmbientColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightAttenuation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("l_constant", ID_TYPE_NUM); + add_embedded_arg("l_linear", ID_TYPE_NUM); + add_embedded_arg("l_quadratic", ID_TYPE_NUM); + embed_function("GetLightAttenuation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("constant", ID_TYPE_BYREF_NUM); + add_embedded_arg("linear", ID_TYPE_BYREF_NUM); + add_embedded_arg("quadratic", ID_TYPE_BYREF_NUM); + embed_function("SetLightDiffuseColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightDiffuseColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightFalloff", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("falloff", ID_TYPE_NUM); + embed_function("GetLightFalloff", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightInnerCone", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("GetLightInnerCone", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightOuterCone", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("angle", ID_TYPE_NUM); + embed_function("GetLightOuterCone", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetLightSpecularColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("GetLightSpecularColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetTerrainPatchAABB", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + add_embedded_arg("minX", ID_TYPE_BYREF_NUM); + add_embedded_arg("minY", ID_TYPE_BYREF_NUM); + add_embedded_arg("minZ", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxX", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxY", ID_TYPE_BYREF_NUM); + add_embedded_arg("maxZ", ID_TYPE_BYREF_NUM); + embed_function("GetTerrainPatchLOD", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + embed_function("GetTerrainHeight", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + embed_function("GetTerrainCenter", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("y", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("SetTerrainLODDistance", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("LOD", ID_TYPE_NUM); + add_embedded_arg("distance", ID_TYPE_NUM); + embed_function("ScaleTerrainTexture", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("scale", ID_TYPE_NUM); + add_embedded_arg("scale2", ID_TYPE_NUM); + embed_function("SetTerrainCameraMovementDelta", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("delta", ID_TYPE_NUM); + embed_function("SetTerrainCameraRotationDelta", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("delta", ID_TYPE_NUM); + embed_function("SetTerrainPatchLOD", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("patchX", ID_TYPE_NUM); + add_embedded_arg("patchZ", ID_TYPE_NUM); + add_embedded_arg("LOD", ID_TYPE_NUM); + embed_function("setWaterWindForce", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("f", ID_TYPE_NUM); + embed_function("getWaterWindForce", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterWaveHeight", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("h", ID_TYPE_NUM); + embed_function("getWaterWaveHeight", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterWindDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_NUM); + add_embedded_arg("z", ID_TYPE_NUM); + embed_function("getWaterWindDirection", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("x", ID_TYPE_BYREF_NUM); + add_embedded_arg("z", ID_TYPE_BYREF_NUM); + embed_function("setWaterColor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("c", ID_TYPE_NUM); + embed_function("getWaterColor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setWaterColorBlendFactor", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("cbfactor", ID_TYPE_NUM); + embed_function("getWaterColorBlendFactor", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("SetActorAnimation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("start_frame", ID_TYPE_NUM); + add_embedded_arg("end_frame", ID_TYPE_NUM); + embed_function("SetActorAnimationSpeed", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("speed", ID_TYPE_NUM); + embed_function("SetActorFrame", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("frame", ID_TYPE_NUM); + embed_function("SetActorMD2Animation", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("anim", ID_TYPE_NUM); + embed_function("SetActorMD2AnimationByName", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("anim_name$", ID_TYPE_STR); + embed_function("GetActorAnimationSpeed", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorEndFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorCurrentFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorStartFrame", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("StartActorTransition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("frame", ID_TYPE_NUM); + add_embedded_arg("transition_time", ID_TYPE_NUM); + embed_function("StopActorTransition", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("ActorIsInTransition", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("GetActorTransitionTime", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("actorAnimationIsLooped", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("loopActorAnimation", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("createMaterial", ID_TYPE_FN_NUM); + embed_function("deleteMaterial", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setActorMaterial", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("getActorMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + embed_function("copyActorMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_num", ID_TYPE_NUM); + embed_function("copyMaterial", ID_TYPE_FN_NUM); + add_embedded_arg("smaterial_id", ID_TYPE_NUM); + embed_function("setMaterialTextureCanvas", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("level", ID_TYPE_NUM); + add_embedded_arg("canvas_id", ID_TYPE_NUM); + embed_function("setMaterialAmbientColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialAmbientColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialAntiAliasing", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("aa", ID_TYPE_NUM); + embed_function("getMaterialAntiAliasing", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBackfaceCulling", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialBackfaceCulling", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBlendFactor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("bf", ID_TYPE_NUM); + embed_function("getMaterialBlendFactor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialBlendMode", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("blend_mode", ID_TYPE_NUM); + embed_function("getMaterialBlendMode", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialColorMask", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color_mask", ID_TYPE_NUM); + embed_function("getMaterialColorMask", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialColorMode", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color_mode", ID_TYPE_NUM); + embed_function("getMaterialColorMode", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialDiffuseColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialDiffuseColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialEmissiveColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialEmissiveColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFog", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialFog", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFrontfaceCulling", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("getMaterialFrontfaceCulling", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialGouraudShading", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialGouraudShading", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("materialIsAplhaBlend", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("materialIsTransparent", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialLighting", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsLit", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialType", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("mat_type", ID_TYPE_NUM); + embed_function("getMaterialType", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialNormalize", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsNormalized", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialPointCloud", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsPointCloud", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialFlag", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("material_flag", ID_TYPE_NUM); + add_embedded_arg("f_value", ID_TYPE_NUM); + embed_function("getMaterialFlag", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("material_flag", ID_TYPE_NUM); + embed_function("setMaterialTexture", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("level", ID_TYPE_NUM); + add_embedded_arg("img_id", ID_TYPE_NUM); + embed_function("setMaterialShininess", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("shininess", ID_TYPE_NUM); + embed_function("getMaterialShininess", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialSpecularColor", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("color", ID_TYPE_NUM); + embed_function("getMaterialSpecularColor", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialThickness", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("thickness", ID_TYPE_NUM); + embed_function("getMaterialThickness", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setMaterialWireframe", ID_TYPE_SUB); + add_embedded_arg("material_id", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("materialIsWireframe", ID_TYPE_FN_NUM); + add_embedded_arg("material_id", ID_TYPE_NUM); + embed_function("setActorTexture", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("layer", ID_TYPE_NUM); + add_embedded_arg("image_id", ID_TYPE_NUM); + embed_function("getActorMaterialCount", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + embed_function("setActorMaterialFlag", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + add_embedded_arg("flag_value", ID_TYPE_NUM); + embed_function("getActorMaterialFlag", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material", ID_TYPE_NUM); + add_embedded_arg("flag", ID_TYPE_NUM); + embed_function("setActorMaterialType", ID_TYPE_SUB); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material_type", ID_TYPE_NUM); + embed_function("getActorMaterialType", ID_TYPE_FN_NUM); + add_embedded_arg("actor", ID_TYPE_NUM); + add_embedded_arg("material", ID_TYPE_NUM); +} + +void init_embedded_types() +{ + create_type("empty"); +} + +init_embedded_variables() +{ +} + +#endif // RC_BUILTIN_H_INCLUDED diff --git a/rcbasic_build/rc_utility.h b/rcbasic_build/rc_utility.h index 706a78f..8ec2977 100755 --- a/rcbasic_build/rc_utility.h +++ b/rcbasic_build/rc_utility.h @@ -69,4 +69,19 @@ bool is_file_exist(const char *fileName) return infile.good(); } +std::string rc_replace(std::string src, std::string tgt, std::string rpc) +{ + if(tgt.length()==0) + return src; + size_t found_inc = rpc.length() > 0 ? rpc.length() : 1; + size_t found = 0; + found = src.find(tgt); + while( found != string::npos && found < src.length()) + { + src = src.substr(0,found) + rpc + src.substr(found + tgt.length()); + found = src.find(tgt,found+found_inc); + } + return src; +} + #endif // RC_UTILITY_H_INCLUDED diff --git a/rcbasic_build/rcbasic4_changes.ods b/rcbasic_build/rcbasic4_changes.ods index 3731068..5fbd459 100644 Binary files a/rcbasic_build/rcbasic4_changes.ods and b/rcbasic_build/rcbasic4_changes.ods differ diff --git a/rcbasic_runtime/camera.h b/rcbasic_runtime/camera.h new file mode 100644 index 0000000..6331f1c --- /dev/null +++ b/rcbasic_runtime/camera.h @@ -0,0 +1,258 @@ +#ifndef CAMERA_H_INCLUDED +#define CAMERA_H_INCLUDED + + +#include + +#include + +// use all irrlicht namespaces +using namespace irr; + +using namespace core; +using namespace scene; +using namespace video; +using namespace io; +using namespace gui; + + +/* + ========== + rotateNode -- rotate a scene node locally + ========== +*/ +void rotateNode(irr::scene::ISceneNode *node, irr::core::vector3df rot) +{ + irr::core::matrix4 m; + m.setRotationDegrees(node->getRotation()); + irr::core::matrix4 n; + n.setRotationDegrees(rot); + m *= n; + node->setRotation( m.getRotationDegrees() ); + node->updateAbsolutePosition(); +} + + +/* + ========== + translateNode -- translate a scene node locally + ========== +*/ +void translateNode(ISceneNode *node, vector3df vel) +{ + irr::core::matrix4 m; + m.setRotationDegrees(node->getRotation()); + m.transformVect(vel); + node->setPosition(node->getPosition() + vel); + node->updateAbsolutePosition(); +} + +void translateNodeW(ISceneNode *node, vector3df vel) +{ + node->setPosition(node->getPosition() + vel); + node->updateAbsolutePosition(); +} + + + +/* camera framework */ +class Camera +{ +public: + + irr::scene::ISceneManager* Scene; + + irr::scene::ICameraSceneNode *camera; // the actual camera + ISceneNode *top; // above camera + ISceneNode *front; // in front of camera + + f32 rx,ry,rz; + f32 x,y,z; + + vector3df direction; + + + // initialize a camera at 0,0,0 or the location passed in + void init(irr::scene::ISceneManager* smgr, float x=0, float y=0, float z=0); + + void re_init(); + + + // locally translate the camera + void translate(float x, float y, float z); + void translateW(float x, float y, float z); + + + // locally rotate the camera + void rotate(float x, float y, float z); + + // update the camera, should be called at the end of mainloop + void update(void); + + // sets the global rotation of the camera + void setRotation(float x, float y, float z); + + // sets the global position of the camera + void setPosition(float x, float y, float z); + + // gets the global position of camera + void getPosition(f32 &x, f32 &y, f32 &z); +}; + + + // initialize a camera at 0,0,0 or the location passed in + void Camera::init(irr::scene::ISceneManager* smgr, float x, float y, float z) + { + Scene = smgr; + + // create camera scene node + camera = Scene->addCameraSceneNode(NULL, vector3df(x,y,z)); + + // empty reference nodes + top = Scene->addEmptySceneNode(); + front = Scene->addEmptySceneNode(); + + // parent the reference nodes + camera->addChild(top); + camera->addChild(front); + + // put the reference nodes in place + front->setPosition(vector3df(0,0,1)); + top->setPosition(vector3df(0,1,0)); + + // set lookat + camera->setUpVector(top->getAbsolutePosition() - camera->getAbsolutePosition()); + camera->setTarget(front->getAbsolutePosition() - camera->getAbsolutePosition()); + + direction = vector3df(0,0,1); + + //camera = Scene->addCameraSceneNodeFPS(); + + rx=ry=rz=0; + x=y=z=0; + } + + + // initialize a camera at 0,0,0 or the location passed in + void Camera::re_init() + { + + //Scene = smgr; + + // create camera scene node + //camera = Scene->addCameraSceneNode(NULL, vector3df(x,y,z)); + + // empty reference nodes + //top = Scene->addEmptySceneNode(); + //front = Scene->addEmptySceneNode(); + + // parent the reference nodes + //camera->addChild(top); + //camera->addChild(front); + + // put the reference nodes in place + front->setPosition(vector3df(0,0,1)); + top->setPosition(vector3df(0,1,0)); + + // set lookat + camera->setUpVector(top->getAbsolutePosition() - camera->getAbsolutePosition()); + camera->setTarget(front->getAbsolutePosition() - camera->getAbsolutePosition()); + + direction = vector3df(0,0,1); + + //camera = Scene->addCameraSceneNodeFPS(); + + rx=ry=rz=0; + x=y=z=0; + } + + // locally translate the camera + void Camera::translate(float x, float y, float z) + { + // translate the camera locally + translateNode(camera, vector3df(x,y,z)); + + // update reference nodes + front->updateAbsolutePosition(); + top->updateAbsolutePosition(); + } + + // locally translate the camera + void Camera::translateW(float x, float y, float z) + { + // translate the camera locally + translateNodeW(camera, vector3df(x,y,z)); + + // update reference nodes + front->updateAbsolutePosition(); + top->updateAbsolutePosition(); + } + + // locally rotate the camera + void Camera::rotate(float x, float y, float z) + { + rotateNode(camera, vector3df(x, y, z)); + + rx += x; + ry += y; + rz += z; + } + + // update the camera, should be called at the end of mainloop + void Camera::update(void) + { + camera->updateAbsolutePosition(); + + camera->setTarget(front->getAbsolutePosition()); + camera->setUpVector(top->getAbsolutePosition() - camera->getAbsolutePosition()); + + vector3df pos; + pos = camera->getAbsolutePosition(); + x=pos.X; + y=pos.Y; + z=pos.Z; + + pos = camera->getRotation(); + + //rx=pos.X; + //ry=pos.Y; + //rz=pos.Z; + } + + // sets the global rotation of the camera + void Camera::setRotation(float x, float y, float z) + { + camera->setRotation(vector3df(x,y,z)); + camera->updateAbsolutePosition(); + + front->updateAbsolutePosition(); + top->updateAbsolutePosition(); + + rx=x; + ry=y; + rz=z; + } + + // sets the global position of the camera + void Camera::setPosition(float x, float y, float z) + { + camera->setPosition(vector3df(x,y,z)); + camera->updateAbsolutePosition(); + + front->updateAbsolutePosition(); + top->updateAbsolutePosition(); + } + + // gets the global position of camera + void Camera::getPosition(f32 &x, f32 &y, f32 &z) + { + vector3df pos; + pos = camera->getAbsolutePosition(); + + x=pos.X; + y=pos.Y; + z=pos.Z; + } + + +#endif // CAMERA_H_INCLUDED diff --git a/rcbasic_runtime/gui_freetype_font.cpp b/rcbasic_runtime/gui_freetype_font.cpp new file mode 100644 index 0000000..fbbefc0 --- /dev/null +++ b/rcbasic_runtime/gui_freetype_font.cpp @@ -0,0 +1,538 @@ +#include "gui_freetype_font.h" + +#if COMPILE_WITH_FREETYPE + +#include + +using namespace irr; +using namespace gui; + +#ifdef _MSC_VER +#pragma warning(disable: 4996) +#endif + + +// -------------------------------------------------------- +CGUITTGlyph::CGUITTGlyph() +: IReferenceCounted() + ,cached(false) + ,size(0) + ,top(0) + ,left(0) + ,texw(0) + ,texh(0) + ,imgw(0) + ,imgh(0) + ,tex(NULL) + ,top16(0) + ,left16(0) + ,texw16(0) + ,texh16(0) + ,imgw16(0) + ,imgh16(0) + ,tex16(NULL) + ,image(NULL) +{ +} + +CGUITTGlyph::~CGUITTGlyph() +{ + delete[] image; +} + +//void CGUITTGlyph::cache(u32 idx_, CGUITTFace& ttFace_, video::IVideoDriver* driver_, irr::core::dimension2d &largestSize) +void CGUITTGlyph::cache(u32 idx_, const CGUIFreetypeFont * freetypeFont) +{ + assert(freetypeFont); + + FT_Face face = freetypeFont->TrueTypeFace->face; + + FT_Set_Pixel_Sizes(face, 0, size); + if ( size > freetypeFont->LargestGlyph.Height ) + freetypeFont->LargestGlyph.Height = size; + + if ( !FT_Load_Glyph(face, idx_, FT_LOAD_NO_HINTING|FT_LOAD_NO_BITMAP) ) + { + FT_GlyphSlot glyph = face->glyph; + FT_Bitmap bits; + + if (glyph->format == ft_glyph_format_outline ) + { + if (!FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL)) + { + bits = glyph->bitmap; + u8 *pt = bits.buffer; + delete[] image; + image = new u8[bits.width * bits.rows]; + memcpy(image,pt,bits.width * bits.rows); + top = glyph->bitmap_top; + left = glyph->bitmap_left; + imgw = 1; + imgh = 1; + texw = bits.width; + texh = bits.rows; + for(;;) + { + if (imgw > texw) + { + break; + } + else + { + imgw <<= 1; + } + } + for(;;) + { + if (imgh > texh) + { + break; + } + else + { + imgh <<= 1; + } + } + if (imgw > imgh) + { + imgh = imgw; + } + else + { + imgw = imgh; + } + + s32 offx = left; + s32 offy = size - top; + if ( offx+texw > freetypeFont->LargestGlyph.Width ) + freetypeFont->LargestGlyph.Width = offx+texw; + if ( offy+texh > freetypeFont->LargestGlyph.Height ) + freetypeFont->LargestGlyph.Height = offy+texh; + + u32 *texd = new u32[imgw*imgh]; + memset(texd,0,imgw*imgh*sizeof(u32)); + u32 *texp = texd; + bool cflag = (freetypeFont->Driver->getDriverType() == video::EDT_DIRECT3D9); + for (int i = 0;i < bits.rows;i++) + { + u32 *rowp = texp; + for (int j = 0;j < bits.width;j++) + { + if (*pt) + { + if (cflag) + { + *rowp = *pt; + *rowp *= 0x01010101; + } + else + { + *rowp = *pt << 24; + *rowp |= 0xffffff; + } + } + else + { + *rowp = 0; + } + pt++; + rowp++; + } + texp += imgw; + } + + c8 name[128]; + sprintf(name,"ttf%d_%d_%p",idx_, size, freetypeFont ); + video::IImage *img = freetypeFont->Driver->createImageFromData(video::ECF_A8R8G8B8,core::dimension2d(imgw,imgh),texd); + setGlyphTextureFlags(freetypeFont->Driver); + tex = freetypeFont->Driver->addTexture(name,img); + img->drop(); + restoreTextureFlags(freetypeFont->Driver); + delete[] texd; + cached = true; + } + } + } + + if (!FT_Load_Glyph(face,idx_,FT_LOAD_NO_HINTING|FT_LOAD_RENDER|FT_LOAD_MONOCHROME)) + { + FT_GlyphSlot glyph = face->glyph; + FT_Bitmap bits = glyph->bitmap; + u8 *pt = bits.buffer; + top16 = glyph->bitmap_top; + left16 = glyph->bitmap_left; + imgw16 = 1; + imgh16 = 1; + texw16 = bits.width; + texh16 = bits.rows; + for(;;) + { + if (imgw16 >= texw16) + { + break; + } + else + { + imgw16 <<= 1; + } + } + for(;;) + { + if (imgh16 >= texh16) + { + break; + } + else + { + imgh16 <<= 1; + } + } + if (imgw16 > imgh16) + { + imgh16 = imgw16; + } + else + { + imgw16 = imgh16; + } + + s32 offx = left; + s32 offy = size - top; + if ( offx+texw > freetypeFont->LargestGlyph.Width ) + freetypeFont->LargestGlyph.Width = offx+texw; + if ( offy+texh > freetypeFont->LargestGlyph.Height ) + freetypeFont->LargestGlyph.Height = offy+texh; + + + u16 *texd16 = new u16[imgw16*imgh16]; + memset(texd16,0,imgw16*imgh16*sizeof(u16)); + u16 *texp16 = texd16; + for (int y = 0;y < bits.rows;y++) + { + u16 *rowp = texp16; + for (int x = 0;x < bits.width;x++) + { + if (pt[y * bits.pitch + (x / 8)] & (0x80 >> (x % 8))) + { + *rowp = 0xffff; + } + rowp++; + } + texp16 += imgw16; + } + c8 name[128]; + sprintf(name,"ttf%d_%d_%p_16",idx_, size, freetypeFont ); + video::IImage *img = freetypeFont->Driver->createImageFromData(video::ECF_A1R5G5B5,core::dimension2d(imgw16,imgh16),texd16); + setGlyphTextureFlags(freetypeFont->Driver); + tex16 = freetypeFont->Driver->addTexture(name,img); + img->drop(); + restoreTextureFlags(freetypeFont->Driver); +// freetypeFont->Driver->makeColorKeyTexture(tex16,video::SColor(0,0,0,0)); + delete[] texd16; + } +} + +bool CGUITTGlyph::mTexFlag16 = false; +bool CGUITTGlyph::mTexFlag32 = true; +bool CGUITTGlyph::mTexFlagMip = false; + +void CGUITTGlyph::setGlyphTextureFlags(video::IVideoDriver* driver_) +{ + mTexFlag16 = driver_->getTextureCreationFlag(video::ETCF_ALWAYS_16_BIT); + mTexFlag32 = driver_->getTextureCreationFlag(video::ETCF_ALWAYS_32_BIT); + mTexFlagMip = driver_->getTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS); + driver_->setTextureCreationFlag(video::ETCF_ALWAYS_16_BIT,false); + driver_->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT,true); + driver_->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false); +} + +void CGUITTGlyph::restoreTextureFlags(video::IVideoDriver* driver_) +{ + driver_->setTextureCreationFlag(video::ETCF_ALWAYS_16_BIT, mTexFlag16); + driver_->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, mTexFlag32); + driver_->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, mTexFlagMip); +} + +// -------------------------------------------------------- +FT_Library CGUITTFace::library = 0; +int CGUITTFace::countClassObjects = 0; + +CGUITTFace::CGUITTFace() +: face(0) +{ + ++countClassObjects; +} + +CGUITTFace::~CGUITTFace() +{ + if ( face ) + FT_Done_Face( face ); + + --countClassObjects; + assert(countClassObjects >= 0 ); + if ( !countClassObjects && library ) + { + FT_Done_FreeType( library ); + library = 0; + } +} + +//! loads a font file +bool CGUITTFace::load(const irr::io::path& filename) +{ + if ( !library ) + { + if (FT_Init_FreeType( &library )) + { + return false; + } + } + core::stringc ansiFilename(filename); // path can be anything but freetype can only work with ansi-filenames + if (FT_New_Face( library,ansiFilename.c_str(),0,&face )) + { + return false; + } + return true; +} + +// -------------------------------------------------------- +//! constructor +CGUIFreetypeFont::CGUIFreetypeFont(video::IVideoDriver* driver) +: Driver(driver) +, TrueTypeFace(0) +{ + #ifdef _DEBUG + setDebugName("CGUIFreetypeFont"); + #endif + + if (Driver) + Driver->grab(); + AntiAlias = false; + Transparency = false; +} + + + +//! destructor +CGUIFreetypeFont::~CGUIFreetypeFont() +{ + if ( TrueTypeFace ) + TrueTypeFace->drop(); + if (Driver) + Driver->drop(); + clearGlyphs(); +} + +bool CGUIFreetypeFont::attach(CGUITTFace *Face,u32 size) +{ + if (!Driver || !Face) + return false; + + Face->grab(); + if ( TrueTypeFace ) + TrueTypeFace->drop(); + TrueTypeFace = Face; + if ( !TrueTypeFace ) + return false; + + clearGlyphs(); + Glyphs.reallocate(TrueTypeFace->face->num_glyphs); + Glyphs.set_used(TrueTypeFace->face->num_glyphs); + for (int i = 0;i < TrueTypeFace->face->num_glyphs;i++) + { + CGUITTGlyph * glyph = new CGUITTGlyph(); + + glyph->size = size; +// glyph->cache((wchar_t)i + 1); + + Glyphs[i] = glyph; + } + + // TODO: this is a workaround to get a probably ok height for getDimensions. So we check a few extreme characters which usually make trouble. + getGlyphByChar(L'A'); + getGlyphByChar(L'g'); + getGlyphByChar(L'.'); + getGlyphByChar(L'('); + + return true; +} + +void CGUIFreetypeFont::clearGlyphs() +{ + for ( unsigned int i=0; i < Glyphs.size(); ++i ) + { + if ( Glyphs[i] ) + { + Glyphs[i]->drop(); + } + Glyphs[i] = 0; + } +} + +u32 CGUIFreetypeFont::getGlyphByChar(wchar_t c) const +{ + u32 idx = FT_Get_Char_Index( TrueTypeFace->face, c ); + if ( idx && !Glyphs[idx - 1]->cached ) + Glyphs[idx - 1]->cache(idx, this); + return idx; +} + +//! returns the dimension of a text +core::dimension2d CGUIFreetypeFont::getDimension(const wchar_t* text) const +{ + core::dimension2d dim(0, Glyphs[0]->size); + + for(const wchar_t* p = text; *p; ++p) + { + dim.Width += getWidthFromCharacter(*p); + } + + // TODO: The correct solution might be working with TrueTypeFace->height but I can't figure out how to use units_per_EM + // even if I know which FT_Render_Mode I used. I'm sure there is some way to figure that out, but I have to give up for now. + if ( TrueTypeFace && LargestGlyph.Height > dim.Height) + dim.Height = LargestGlyph.Height; + + return dim; +} + + +inline u32 CGUIFreetypeFont::getWidthFromCharacter(wchar_t c) const +{ + u32 n = getGlyphByChar(c); + if ( n > 0) + { + int w = Glyphs[n - 1]->texw; + s32 left = Glyphs[n - 1]->left; + if (w + left > 0) + return w + left; + } + if (c >= 0x2000) + { + return Glyphs[0]->size; + } + else + { + return Glyphs[0]->size / 2; + } +} + + +//! draws an text and clips it to the specified rectangle if wanted +void CGUIFreetypeFont::draw(const irr::core::stringw& textstring, const irr::core::rect& position, video::SColor color, bool hcenter, bool vcenter, const core::rect* clip) +{ + if (!Driver) + return; + + core::dimension2d textDimension; + core::position2d offset = position.UpperLeftCorner; + video::SColor colors[4]; + for (int i = 0;i < 4;i++) + { + colors[i] = color; + } + + const wchar_t * text = textstring.c_str(); + if (hcenter || vcenter) + { + textDimension = getDimension(text); + + if (hcenter) + offset.X = ((position.getWidth() - textDimension.Width)>>1) + offset.X; + + if (vcenter) + offset.Y = ((position.getHeight() - textDimension.Height)>>1) + offset.Y; + } + + u32 n; + + while(*text) + { + n = getGlyphByChar(*text); + if ( n > 0) + { + if (AntiAlias) + { +// s32 imgw = Glyphs[n-1]->imgw; +// s32 imgh = Glyphs[n-1]->imgh; + s32 texw = Glyphs[n-1]->texw; + s32 texh = Glyphs[n-1]->texh; + s32 offx = Glyphs[n-1]->left; + s32 offy = Glyphs[n-1]->size - Glyphs[n-1]->top; + if (Driver->getDriverType() != video::EDT_SOFTWARE) + { + if (!Transparency) + color.color |= 0xff000000; + Driver->draw2DImage(Glyphs[n-1]->tex,core::position2d(offset.X+offx,offset.Y+offy),core::rect(0,0,texw,texh),clip,color,true); + } + else + { + s32 a = color.getAlpha(); + s32 r = color.getRed(); + s32 g = color.getGreen(); + s32 b = color.getBlue(); + u8 *pt = Glyphs[n-1]->image; + if (!Transparency) a = 255; + for (int y = 0;y < texh;y++) + { + for (int x = 0;x < texw;x++) + { + if (!clip || clip->isPointInside(core::position2d(offset.X+x+offx,offset.Y+y+offy))) + { + if (*pt) + { + Driver->draw2DRectangle(video::SColor((a * *pt)/255,r,g,b),core::rect(offset.X+x+offx,offset.Y+y+offy,offset.X+x+offx+1,offset.Y+y+offy+1)); + } + pt++; + } + } + } + } + } + else + { +// s32 imgw = Glyphs[n-1]->imgw16; +// s32 imgh = Glyphs[n-1]->imgh16; + s32 texw = Glyphs[n-1]->texw16; + s32 texh = Glyphs[n-1]->texh16; + s32 offx = Glyphs[n-1]->left16; + s32 offy = Glyphs[n-1]->size - Glyphs[n-1]->top16; + if (!Transparency) + { + color.color |= 0xff000000; + } + Driver->draw2DImage(Glyphs[n-1]->tex16, + core::position2d(offset.X+offx,offset.Y+offy), + core::rect(0,0,texw,texh), + clip, color, true); + } + offset.X += getWidthFromCharacter(*text); + } + else + { + offset.X += getWidthFromCharacter(*text); + } + + ++text; + } +} + +//! Calculates the index of the character in the text which is on a specific position. +s32 CGUIFreetypeFont::getCharacterFromPos(const wchar_t* text, s32 pixel_x) const +{ + s32 x = 0; + s32 idx = 0; + + while (text[idx]) + { + x += getWidthFromCharacter(text[idx]); + + if (x >= pixel_x) + return idx; + + ++idx; + } + + return -1; +} + +#endif // #if COMPILE_WITH_FREETYPE diff --git a/rcbasic_runtime/gui_freetype_font.h b/rcbasic_runtime/gui_freetype_font.h new file mode 100644 index 0000000..8b9b265 --- /dev/null +++ b/rcbasic_runtime/gui_freetype_font.h @@ -0,0 +1,124 @@ +#ifndef _GUI_FREETYPE_FONT_H +#define _GUI_FREETYPE_FONT_H + +//! freetype support enabled with 1 and disabled with 0 +#define COMPILE_WITH_FREETYPE 1 + + +#if COMPILE_WITH_FREETYPE + +#include +#include +#include + +class CGUITTFace : public irr::IReferenceCounted +{ +public: + CGUITTFace(); + virtual ~CGUITTFace(); + + bool load(const irr::io::path& filename); + + FT_Face face; // handle to face + +private: + static int countClassObjects; + static FT_Library library; // handle to library +}; + +class CGUIFreetypeFont; + +class CGUITTGlyph : public irr::IReferenceCounted +{ +public: + CGUITTGlyph(); + virtual ~CGUITTGlyph(); + + bool cached; + void cache(irr::u32 idx_, const CGUIFreetypeFont * freetypeFont); + + irr::u32 size; + irr::u32 top; + irr::u32 left; + irr::u32 texw; + irr::u32 texh; + irr::u32 imgw; + irr::u32 imgh; + irr::video::ITexture *tex; + irr::u32 top16; + irr::u32 left16; + irr::u32 texw16; + irr::u32 texh16; + irr::u32 imgw16; + irr::u32 imgh16; + irr::video::ITexture *tex16; + irr::u8 *image; + +private: + void setGlyphTextureFlags(irr::video::IVideoDriver* driver_); + void restoreTextureFlags(irr::video::IVideoDriver* driver_); + + static bool mTexFlag16; + static bool mTexFlag32; + static bool mTexFlagMip; +}; + +class CGUIFreetypeFont : public irr::gui::IGUIFont +{ + friend class CGUITTGlyph; + +public: + + //! constructor + CGUIFreetypeFont(irr::video::IVideoDriver* Driver); + + //! destructor + virtual ~CGUIFreetypeFont(); + + //! loads a truetype font file + bool attach(CGUITTFace *Face,irr::u32 size); + + //! draws an text and clips it to the specified rectangle if wanted + virtual void draw(const irr::core::stringw& text, const irr::core::rect& position, irr::video::SColor color, bool hcenter=false, bool vcenter=false, const irr::core::rect* clip=0); + + //! returns the dimension of a text + virtual irr::core::dimension2d getDimension(const wchar_t* text) const; + + //! Calculates the index of the character in the text which is on a specific position. + virtual irr::s32 getCharacterFromPos(const wchar_t* text, irr::s32 pixel_x) const; + + //! Not yet supported + virtual void setKerningWidth (irr::s32 kerning) {} + + //! Not yet supported + virtual void setKerningHeight (irr::s32 kerning) {} + + //! Not yet supported + virtual irr::s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const { return 0; } + + //! Not yet supported + virtual irr::s32 getKerningHeight() const { return 0; } + + //! Not yet supported + virtual void setInvisibleCharacters( const wchar_t *s ) {} + + + bool AntiAlias; + bool Transparency; + +protected: + void clearGlyphs(); + +private: + irr::u32 getWidthFromCharacter(wchar_t c) const; + irr::u32 getGlyphByChar(wchar_t c) const; + irr::video::IVideoDriver* Driver; + irr::core::array< CGUITTGlyph* > Glyphs; + CGUITTFace * TrueTypeFace; + mutable irr::core::dimension2d LargestGlyph; +}; + +#endif // #if COMPILE_WITH_FREETYPE + +#endif // _GUI_FREETYPE_FONT_H + diff --git a/rcbasic_runtime/main.cpp b/rcbasic_runtime/main.cpp index 2ec0dea..0b0372c 100755 --- a/rcbasic_runtime/main.cpp +++ b/rcbasic_runtime/main.cpp @@ -47,12 +47,12 @@ #include #include #include "rc_defines.h" -#include "rc_stdlib.h" -#include "rc_media.h" +#include "rc_stdlib.h" +#include "rc_gfx.h" #include "rc_matrix.h" -#include "rc_geometry.h" +#include "rc_geometry.h" +#include -using namespace std; #define LESS_FLAG 0 #define LESS_EQUAL_FLAG 1 @@ -76,7 +76,7 @@ bool CMP_FLAG_GREATER = false; bool CMP_FLAG_GREATER_EQUAL = false; bool CMP_FLAG_NOT_EQUAL = false; -string rcbasic_runtime_path = ""; +std::string rcbasic_runtime_path = ""; struct n_value { @@ -86,7 +86,7 @@ struct n_value struct s_value { - vector value; + vector value; void * ref_parent; // This will be set by the obj_get instructions (ie. obj_get and obj_usr_get) }; @@ -103,7 +103,7 @@ struct rc_vm_n struct rc_vm_s { - string value; + std::string value; s_value * r; uint64_t r_index; @@ -316,7 +316,7 @@ struct rcbasic_debug_access_status int dimensions; int dim[3]; double num_val; - string str_val; + std::string str_val; int reg; bool is_error = false; }; @@ -324,14 +324,14 @@ struct rcbasic_debug_access_status struct rcbasic_debug_vars { int type; - string scope; - string name; + std::string scope; + std::string name; int index; vector usage_data; }; vector dbg_vars; -vector dbg_files; +vector dbg_files; uint64_t current_src_line = 1; uint64_t current_src_file = 0; @@ -343,16 +343,16 @@ uint64_t current_src_file = 0; #define DBG_REDIM_LEQ_ZERO "Array Size must be greater than Zero" bool dbg_error_found = false; -string dbg_error_message = ""; +std::string dbg_error_message = ""; -void loadDebugData(string sym_file, string inc_file) +void loadDebugData(std::string sym_file, std::string inc_file) { fstream f(sym_file, fstream::in); - string f_line; + std::string f_line; - string type_str = ""; + std::string type_str = ""; rcbasic_debug_vars tmp; while(!f.eof()) @@ -421,16 +421,16 @@ void loadDebugData(string sym_file, string inc_file) while(!f.eof()) { getline(f, f_line); - if(f_line.find_first_not_of(" ")!=string::npos) + if(f_line.find_first_not_of(" ")!=std::string::npos) dbg_files.push_back(f_line); } f.close(); } -string dbg_format_string(string dbg_str_val) +std::string dbg_format_string(std::string dbg_str_val) { - string rtn = dbg_str_val; + std::string rtn = dbg_str_val; rtn = rc_intern_replace(rtn, "\n", "\\n"); rtn = rc_intern_replace(rtn, "\r", "\\r"); rtn = rc_intern_replace(rtn, "\t", "\\t"); @@ -526,7 +526,7 @@ uint64_t rcbasic_readInt() } -bool rcbasic_load(string filename) +bool rcbasic_load(std::string filename) { char rc[5]; @@ -544,7 +544,7 @@ bool rcbasic_load(string filename) if(! (rc[0]=='R' && rc[1] =='C' && rc[2]=='4') ) { - string rcs = rc; + std::string rcs = rc; cout << "This program was not built for this version of the runtime: " << rcs << endl; return false; } @@ -654,42 +654,6 @@ bool rcbasic_load(string filename) return true; } -bool rc_checkEvent() -{ - for(int i = 0; i < MAX_WINDOWS; i++) - if(rc_win[i]!=NULL) - return true; - return false; -} - -void rc_events() -{ - //rc_textinput_flag = false; - cycleVideo(); - if(rc_checkEvent()) - { - rc_fingers_pressed.clear(); - rc_inkey = 0; - rc_mouseX = -1; - rc_mouseY = -1; - rc_global_mouseX = -1; - rc_global_mouseY = -1; - rc_mwheelx = 0; - rc_mwheely = 0; - for(int i = 0; i < MAX_WINDOWS; i++) - rc_win_event[i] = 0; - while(rc_getEvents()){} - keyState = SDL_GetKeyboardState(NULL); - SDL_GetMouseState(&rc_mouseX, &rc_mouseY); - SDL_GetGlobalMouseState(&rc_global_mouseX, &rc_global_mouseY); - //rc_getEvents(); - #ifndef RC_WINDOWS - SDL_PumpEvents(); - #endif // RC_WINDOWS - //SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT);// - } -} - uint64_t readInt() { for(int i = 0; i < sizeof(uint64_t); i++) @@ -2175,9 +2139,9 @@ void rc_print_num(double n) { stringstream s; s << fixed << n; - string s_out = s.str(); + std::string s_out = s.str(); int s_decimal = s_out.find_first_of("."); - if(s_decimal != string::npos) + if(s_decimal != std::string::npos) { int trail_end = s_out.length(); for(int i = s_decimal; i < s_out.length(); i++) @@ -2210,7 +2174,7 @@ void rc_push_num(double n_val) //current_n_stack_count++; } -void rc_push_str(string s_val) +void rc_push_str(std::string s_val) { rc_vm_s s; s.value = s_val; @@ -2521,7 +2485,7 @@ void rc_number_array_fill(rc_numId* n_var, double n) } -void rc_string_array_fill(rc_strId* s_var, string s) +void rc_string_array_fill(rc_strId* s_var, std::string s) { uint64_t src_dim, src_dim_size[3]; rc_strId* src = (rc_strId*)s_var->sid_value.ref_parent; @@ -4401,13 +4365,13 @@ int main(int argc, char * argv[]) #ifdef RC_GETCWD char buf[2048]; getcwd(buf, 2048); - rc_dir_path = (string)buf; + rc_dir_path = (std::string)buf; #else rc_dir_path = get_current_dir_name(); #endif #endif // RC_WINDOWS - string rc_filename = "main.cbc"; + std::string rc_filename = "main.cbc"; if(argc > 1) rc_filename = argv[1]; @@ -4441,7 +4405,7 @@ int main(int argc, char * argv[]) if(argc >1) { rc_cmd_count = argc - 1; - rc_cmd_args = new string[rc_cmd_count]; + rc_cmd_args = new std::string[rc_cmd_count]; for(int i = 1; i < argc; i++) rc_cmd_args[i-1] = argv[i]; } diff --git a/rcbasic_runtime/rc_defines.h b/rcbasic_runtime/rc_defines.h index c3f29dd..2762303 100755 --- a/rcbasic_runtime/rc_defines.h +++ b/rcbasic_runtime/rc_defines.h @@ -1,4 +1,7 @@ -#define FN_FPrint 0 +#ifndef RC_DEFINES_H_INCLUDED +#define RC_DEFINES_H_INCLUDED + +#define FN_Fprint 0 #define FPRINT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] #define FN_Input$ 1 #define INPUT$_PROMPT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] @@ -17,1314 +20,97 @@ #define FN_NumberArraySize 7 #define NUMBERARRAYSIZE_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] #define NUMBERARRAYSIZE_ARRAY_DIM num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_Abs 8 -#define ABS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ACos 9 -#define ACOS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_AndBit 10 -#define ANDBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ANDBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ASin 11 -#define ASIN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ATan 12 -#define ATAN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Bin$ 13 -#define BIN$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_CInt32 14 -#define CINT32_I num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_CInt64 15 -#define CINT64_I num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Cos 16 -#define COS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Degrees 17 -#define DEGREES_R num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Exp 18 -#define EXP_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Frac 19 -#define FRAC_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Hex$ 20 -#define HEX$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_HexVal 21 -#define HEXVAL_N$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Int 22 -#define INT_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Log 23 -#define LOG_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Max 24 -#define MAX_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MAX_B num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_Min 25 -#define MIN_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MIN_B num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_OrBit 26 -#define ORBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ORBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_Radians 27 -#define RADIANS_D num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Randomize 28 -#define RANDOMIZE_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Rand 29 -#define RAND_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Round 30 -#define ROUND_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Sign 31 -#define SIGN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Sin 32 -#define SIN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Sqrt 33 -#define SQRT_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Tan 34 -#define TAN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_XOrBit 35 -#define XORBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define XORBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_Asc 36 -#define ASC_C$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Chr$ 37 -#define CHR$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Insert$ 38 -#define INSERT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define INSERT$_TGT$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define INSERT$_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_InStr 39 -#define INSTR_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define INSTR_SUBSTR$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_LCase$ 40 -#define LCASE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Left$ 41 -#define LEFT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define LEFT$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Length 42 -#define LENGTH_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Len 43 -#define LEN_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_LTrim$ 44 -#define LTRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Mid$ 45 -#define MID$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define MID$_START num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MID$_N num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ReplaceSubstr$ 46 -#define REPLACESUBSTR$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define REPLACESUBSTR$_RPC$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define REPLACESUBSTR$_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Replace$ 47 -#define REPLACE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define REPLACE$_TGT$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define REPLACE$_RPC$ str_var[2].sid_value.value[ str_var[2].byref_offset ] -#define FN_Reverse$ 48 -#define REVERSE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Right$ 49 -#define RIGHT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define RIGHT$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_RTrim$ 50 -#define RTRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_StringFill$ 51 -#define STRINGFILL$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define STRINGFILL$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Str$ 52 -#define STR$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Str_F$ 53 -#define STR_F$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Str_S$ 54 -#define STR_S$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Tally 55 -#define TALLY_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define TALLY_SUBSTR$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_Trim$ 56 -#define TRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_UCase$ 57 -#define UCASE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Val 58 -#define VAL_N$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Stack_N 59 -#define STACK_N_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Stack_S 60 -#define STACK_S_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Push_N 61 -#define PUSH_N_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Pop_N 62 -#define FN_Push_S 63 -#define PUSH_S_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Pop_S$ 64 -#define FN_Stack_Size_N 65 -#define FN_Stack_Size_S 66 -#define FN_FileOpen 67 -#define FILEOPEN_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FILEOPEN_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FILEOPEN_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_FileClose 68 -#define FILECLOSE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ReadByte 69 -#define READBYTE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WriteByte 70 -#define WRITEBYTE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WRITEBYTE_BYTE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ReadLine$ 71 -#define READLINE$_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Write 72 -#define WRITE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WRITE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_WriteLine 73 -#define WRITELINE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WRITELINE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_CopyFile 74 -#define COPYFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define COPYFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_RemoveFile 75 -#define REMOVEFILE_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_FileExists 76 -#define FILEEXISTS_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_MoveFile 77 -#define MOVEFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define MOVEFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_RenameFile 78 -#define RENAMEFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define RENAMEFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_FileLength 79 -#define FILELENGTH_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Tell 80 -#define TELL_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Seek 81 -#define SEEK_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SEEK_POS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_EOF 82 -#define EOF_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_FreeFile 83 -#define FN_ChangeDir 84 -#define CHANGEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_DirExists 85 -#define DIREXISTS_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_DirFirst$ 86 -#define FN_Dir$ 87 -#define FN_DirNext$ 88 -#define FN_MakeDir 89 -#define MAKEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_RemoveDir 90 -#define REMOVEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Date$ 91 -#define FN_Easter$ 92 -#define EASTER$_YEAR num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Ticks 93 -#define FN_Time$ 94 -#define FN_Timer 95 -#define FN_Wait 96 -#define WAIT_M_SEC num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowOpen 97 -#define WINDOWOPEN_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WINDOWOPEN_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define WINDOWOPEN_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define WINDOWOPEN_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define WINDOWOPEN_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define WINDOWOPEN_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define WINDOWOPEN_FLAG num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define WINDOWOPEN_VSYNC num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define FN_WindowClose 98 -#define WINDOWCLOSE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_RaiseWindow 99 -#define RAISEWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Window 100 -#define WINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Update 101 -#define FN_Cls 102 -#define FN_SetClearColor 103 -#define SETCLEARCOLOR_C num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ShowWindow 104 -#define SHOWWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_HideWindow 105 -#define HIDEWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowTitle 106 -#define SETWINDOWTITLE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWTITLE_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_WindowTitle$ 107 -#define WINDOWTITLE$_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowPosition 108 -#define SETWINDOWPOSITION_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETWINDOWPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetWindowPosition 109 -#define GETWINDOWPOSITION_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETWINDOWPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETWINDOWPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetWindowSize 110 -#define SETWINDOWSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETWINDOWSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetWindowSize 111 -#define GETWINDOWSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETWINDOWSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETWINDOWSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetWindowMinSize 112 -#define SETWINDOWMINSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWMINSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETWINDOWMINSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetWindowMinSize 113 -#define GETWINDOWMINSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETWINDOWMINSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETWINDOWMINSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetWindowMaxSize 114 -#define SETWINDOWMAXSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWMAXSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETWINDOWMAXSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetWindowMaxSize 115 -#define GETWINDOWMAXSIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETWINDOWMAXSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETWINDOWMAXSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_WindowIsFullscreen 116 -#define WINDOWISFULLSCREEN_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowIsVisible 117 -#define WINDOWISVISIBLE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowIsBordered 118 -#define WINDOWISBORDERED_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowIsResizable 119 -#define WINDOWISRESIZABLE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowIsMinimized 120 -#define WINDOWISMINIMIZED_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowIsMaximized 121 -#define WINDOWISMAXIMIZED_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowHasInputFocus 122 -#define WINDOWHASINPUTFOCUS_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowHasMouseFocus 123 -#define WINDOWHASMOUSEFOCUS_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowFullscreen 124 -#define SETWINDOWFULLSCREEN_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWFULLSCREEN_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_MaximizeWindow 125 -#define MAXIMIZEWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_MinimizeWindow 126 -#define MINIMIZEWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowBorder 127 -#define SETWINDOWBORDER_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWBORDER_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_WindowClip 128 -#define WINDOWCLIP_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WINDOWCLIP_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define WINDOWCLIP_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define WINDOWCLIP_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define WINDOWCLIP_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_WindowExists 129 -#define WINDOWEXISTS_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumWindows 130 -#define FN_WindowEvent_Close 131 -#define WINDOWEVENT_CLOSE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowEvent_Maximize 132 -#define WINDOWEVENT_MAXIMIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WindowEvent_Minimize 133 -#define WINDOWEVENT_MINIMIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ActiveWindow 134 -#define FN_FPS 135 -#define FN_SetWindowIcon 136 -#define SETWINDOWICON_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWICON_SLOT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasOpen 137 -#define CANVASOPEN_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CANVASOPEN_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CANVASOPEN_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define CANVASOPEN_VIEWPORT_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define CANVASOPEN_VIEWPORT_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define CANVASOPEN_VIEWPORT_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define CANVASOPEN_VIEWPORT_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define CANVASOPEN_MODE num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define FN_CanvasClose 138 -#define CANVASCLOSE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetCanvasVisible 139 -#define SETCANVASVISIBLE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASVISIBLE_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasIsVisible 140 -#define CANVASISVISIBLE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetCanvasViewport 141 -#define SETCANVASVIEWPORT_CNUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASVIEWPORT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETCANVASVIEWPORT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SETCANVASVIEWPORT_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define SETCANVASVIEWPORT_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_GetCanvasViewport 142 -#define GETCANVASVIEWPORT_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETCANVASVIEWPORT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETCANVASVIEWPORT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETCANVASVIEWPORT_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETCANVASVIEWPORT_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_Canvas 143 -#define CANVAS_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetCanvasOffset 144 -#define SETCANVASOFFSET_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASOFFSET_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETCANVASOFFSET_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetCanvasOffset 145 -#define GETCANVASOFFSET_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETCANVASOFFSET_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETCANVASOFFSET_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_GetCanvasSize 146 -#define GETCANVASSIZE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETCANVASSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETCANVASSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ClearCanvas 147 -#define FN_SetCanvasAlpha 148 -#define SETCANVASALPHA_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASALPHA_A num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasAlpha 149 -#define CANVASALPHA_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetCanvasBlendMode 150 -#define SETCANVASBLENDMODE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASBLENDMODE_BLEND_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasBlendMode 151 -#define CANVASBLENDMODE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetCanvasColorMod 152 -#define SETCANVASCOLORMOD_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASCOLORMOD_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasColorMod 153 -#define CANVASCOLORMOD_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_CopyCanvas 154 -#define COPYCANVAS_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COPYCANVAS_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define COPYCANVAS_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define COPYCANVAS_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define COPYCANVAS_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define COPYCANVAS_DST num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define COPYCANVAS_DX num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define COPYCANVAS_DY num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define FN_CloneCanvas 155 -#define CLONECANVAS_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CLONECANVAS_DST num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SetCanvasZ 156 -#define SETCANVASZ_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCANVASZ_Z num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CanvasZ 157 -#define CANVASZ_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_CanvasClip 158 -#define CANVASCLIP_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CANVASCLIP_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CANVASCLIP_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define CANVASCLIP_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define CANVASCLIP_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define CANVASCLIP_FLAG num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define FN_ActiveCanvas 159 -#define FN_Box 160 -#define BOX_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define BOX_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define BOX_X2 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define BOX_Y2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_BoxFill 161 -#define BOXFILL_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define BOXFILL_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define BOXFILL_X2 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define BOXFILL_Y2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_Circle 162 -#define CIRCLE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CIRCLE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CIRCLE_RADIUS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_CircleFill 163 -#define CIRCLEFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CIRCLEFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CIRCLEFILL_RADIUS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_Ellipse 164 -#define ELLIPSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ELLIPSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ELLIPSE_RX num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define ELLIPSE_RY num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_EllipseFill 165 -#define ELLIPSEFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ELLIPSEFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ELLIPSEFILL_RX num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define ELLIPSEFILL_RY num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_FloodFill 166 -#define FLOODFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FLOODFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_GetPixel 167 -#define GETPIXEL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETPIXEL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SetColor 168 -#define SETCOLOR_C num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Line 169 -#define LINE_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LINE_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define LINE_X2 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define LINE_Y2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_Poly 170 -#define POLY_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define POLY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define POLY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_PolyFill 171 -#define POLYFILL_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define POLYFILL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define POLYFILL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_Rect 172 -#define RECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define RECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define RECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_RectFill 173 -#define RECTFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RECTFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define RECTFILL_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define RECTFILL_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_RoundRect 174 -#define ROUNDRECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ROUNDRECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ROUNDRECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define ROUNDRECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define ROUNDRECT_R num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_RoundRectFill 175 -#define ROUNDRECTFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ROUNDRECTFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ROUNDRECTFILL_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define ROUNDRECTFILL_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define ROUNDRECTFILL_R num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_RGB 176 -#define RGB_R num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RGB_G num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define RGB_B num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_RGBA 177 -#define RGBA_R num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RGBA_G num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define RGBA_B num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define RGBA_A num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_PSet 178 -#define PSET_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define PSET_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_LoadImage 179 -#define LOADIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LOADIMAGE_IMG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_LoadImage_Ex 180 -#define LOADIMAGE_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LOADIMAGE_EX_IMG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define LOADIMAGE_EX_COLKEY num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ImageFromBuffer 181 -#define IMAGEFROMBUFFER_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define IMAGEFROMBUFFER_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define IMAGEFROMBUFFER_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define IMAGEFROMBUFFER_BUFFER num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_ImageFromBuffer_Ex 182 -#define IMAGEFROMBUFFER_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define IMAGEFROMBUFFER_EX_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define IMAGEFROMBUFFER_EX_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define IMAGEFROMBUFFER_EX_BUFFER num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define IMAGEFROMBUFFER_EX_COLKEY num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_BufferFromImage 183 -#define BUFFERFROMIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define BUFFERFROMIMAGE_BUFFER num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ImageExists 184 -#define IMAGEEXISTS_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ColorKey 185 -#define COLORKEY_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COLORKEY_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_CopyImage 186 -#define COPYIMAGE_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COPYIMAGE_DST num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_DeleteImage 187 -#define DELETEIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetImageAlpha 188 -#define SETIMAGEALPHA_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETIMAGEALPHA_A num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ImageAlpha 189 -#define IMAGEALPHA_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_GetImageSize 190 -#define GETIMAGESIZE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETIMAGESIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETIMAGESIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetImageBlendMode 191 -#define SETIMAGEBLENDMODE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETIMAGEBLENDMODE_BLEND_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ImageBlendMode 192 -#define IMAGEBLENDMODE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetImageColorMod 193 -#define SETIMAGECOLORMOD_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETIMAGECOLORMOD_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ImageColorMod 194 -#define IMAGECOLORMOD_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_DrawImage 195 -#define DRAWIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_DrawImage_Blit 196 -#define DRAWIMAGE_BLIT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_BLIT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_BLIT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_BLIT_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_BLIT_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_BLIT_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_BLIT_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define FN_DrawImage_Blit_Ex 197 -#define DRAWIMAGE_BLIT_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_BLIT_EX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_BLIT_EX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_BLIT_EX_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_BLIT_EX_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_BLIT_EX_SRC_X num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_BLIT_EX_SRC_Y num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_BLIT_EX_SRC_W num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define DRAWIMAGE_BLIT_EX_SRC_H num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define FN_DrawImage_Rotate 198 -#define DRAWIMAGE_ROTATE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ROTATE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ROTATE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ROTATE_ANGLE num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_DrawImage_Rotate_Ex 199 -#define DRAWIMAGE_ROTATE_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_ROTATE_EX_ANGLE num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define FN_DrawImage_Zoom 200 -#define DRAWIMAGE_ZOOM_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ZOOM_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ZOOM_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ZOOM_ZX num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_ZOOM_ZY num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_DrawImage_Zoom_Ex 201 -#define DRAWIMAGE_ZOOM_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_ZX num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define DRAWIMAGE_ZOOM_EX_ZY num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define FN_DrawImage_Rotozoom 202 -#define DRAWIMAGE_ROTOZOOM_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_ANGLE num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_ZX num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_ZY num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define FN_DrawImage_Rotozoom_Ex 203 -#define DRAWIMAGE_ROTOZOOM_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_ANGLE num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_ZX num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define DRAWIMAGE_ROTOZOOM_EX_ZY num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define FN_DrawImage_Flip 204 -#define DRAWIMAGE_FLIP_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_FLIP_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_FLIP_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_FLIP_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_FLIP_V num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_DrawImage_Flip_Ex 205 -#define DRAWIMAGE_FLIP_EX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_FLIP_EX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_FLIP_EX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_FLIP_EX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_FLIP_EX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_FLIP_EX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_FLIP_EX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_FLIP_EX_H num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define DRAWIMAGE_FLIP_EX_V num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define FN_InKey 206 -#define FN_Key 207 -#define KEY_KEY_CODE num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WaitKey 208 -#define FN_HideMouse 209 -#define FN_ShowMouse 210 -#define FN_MouseIsVisible 211 -#define FN_GetMouse 212 -#define GETMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETMOUSE_MB1 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETMOUSE_MB2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETMOUSE_MB3 num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_MouseX 213 -#define FN_MouseY 214 -#define FN_MouseButton 215 -#define MOUSEBUTTON_MB num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_GetMouseWheel 216 -#define GETMOUSEWHEEL_X_AXIS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETMOUSEWHEEL_Y_AXIS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_MouseWheelX 217 -#define FN_MouseWheelY 218 -#define FN_SoundFromBuffer 219 -#define SOUNDFROMBUFFER_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SOUNDFROMBUFFER_BUFFER num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SOUNDFROMBUFFER_BUFFER_SIZE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SOUNDFROMBUFFER_VOL num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_LoadSound 220 -#define LOADSOUND_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LOADSOUND_SND_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_LoadMusic 221 -#define LOADMUSIC_MUSIC_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_PlaySound 222 -#define PLAYSOUND_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define PLAYSOUND_CHANNEL num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define PLAYSOUND_LOOPS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_PlaySoundTimed 223 -#define PLAYSOUNDTIMED_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define PLAYSOUNDTIMED_CHANNEL num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define PLAYSOUNDTIMED_LOOPS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define PLAYSOUNDTIMED_MS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_PlayMusic 224 -#define PLAYMUSIC_MLOOPS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_PauseSound 225 -#define PAUSESOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ResumeSound 226 -#define RESUMESOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_PauseMusic 227 -#define FN_ResumeMusic 228 -#define FN_DeleteSound 229 -#define DELETESOUND_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_DeleteMusic 230 -#define FN_FadeMusicIn 231 -#define FADEMUSICIN_FADE_TIME num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FADEMUSICIN_LOOPS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_FadeMusicOut 232 -#define FADEMUSICOUT_FADE_TIME num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_MusicExists 233 -#define FN_SetMusicVolume 234 -#define SETMUSICVOLUME_VOL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_MusicVolume 235 -#define FN_SetMusicPosition 236 -#define SETMUSICPOSITION_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_MusicPosition 237 -#define FN_RewindMusic 238 -#define FN_SetSoundChannels 239 -#define SETSOUNDCHANNELS_MAX_CHANNELS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumSoundChannels 240 -#define FN_SoundIsEnabled 241 -#define FN_SoundExists 242 -#define SOUNDEXISTS_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetChannelVolume 243 -#define SETCHANNELVOLUME_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCHANNELVOLUME_VOL num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ChannelVolume 244 -#define CHANNELVOLUME_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetSoundVolume 245 -#define SETSOUNDVOLUME_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETSOUNDVOLUME_VOL num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SoundVolume 246 -#define SOUNDVOLUME_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_StopMusic 247 -#define FN_StopSound 248 -#define STOPSOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetChannelPanning 249 -#define SETCHANNELPANNING_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCHANNELPANNING_LEFT_VALUE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETCHANNELPANNING_RIGHT_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetChannelDistance 250 -#define SETCHANNELDISTANCE_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCHANNELDISTANCE_DIST_VALUE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ChannelIsPlaying 251 -#define CHANNELISPLAYING_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ChannelIsPaused 252 -#define CHANNELISPAUSED_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumJoysticks 253 -#define FN_NumJoyAxes 254 -#define NUMJOYAXES_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumJoyButtons 255 -#define NUMJOYBUTTONS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumJoyHats 256 -#define NUMJOYHATS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumJoyTrackBalls 257 -#define NUMJOYTRACKBALLS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_JoyAxis 258 -#define JOYAXIS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define JOYAXIS_JOY_AXIS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_JoyButton 259 -#define JOYBUTTON_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define JOYBUTTON_JOY_BUTTON num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_JoyHat 260 -#define JOYHAT_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define JOYHAT_JOY_HAT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_GetJoyTrackBall 261 -#define GETJOYTRACKBALL_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETJOYTRACKBALL_BALL num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETJOYTRACKBALL_DX num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETJOYTRACKBALL_DY num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_JoyName$ 262 -#define JOYNAME$_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_JoystickIsConnected 263 -#define JOYSTICKISCONNECTED_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_GetCursor 264 -#define GETCURSOR_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETCURSOR_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_PrintS 265 -#define PRINTS_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_InputS$ 266 -#define INPUTS$_PROMPT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_ZoneInputS$ 267 -#define ZONEINPUTS$_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ZONEINPUTS$_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ZONEINPUTS$_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define ZONEINPUTS$_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_Locate 268 -#define LOCATE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LOCATE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ReadInput_Start 269 -#define FN_ReadInput_Stop 270 -#define FN_ReadInput_Text$ 271 -#define FN_ReadInput_SetText 272 -#define READINPUT_SETTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_ReadInput_ToggleBackspace 273 -#define READINPUT_TOGGLEBACKSPACE_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_LoadFont 274 -#define LOADFONT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define LOADFONT_FNT_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define LOADFONT_SIZE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_DeleteFont 275 -#define DELETEFONT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_FontIsLoaded 276 -#define FONTISLOADED_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_Font 277 -#define FONT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetFontStyle 278 -#define SETFONTSTYLE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETFONTSTYLE_STYLE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_DrawText 279 -#define DRAWTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define DRAWTEXT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWTEXT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_DrawText_Shaded 280 -#define DRAWTEXT_SHADED_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define DRAWTEXT_SHADED_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWTEXT_SHADED_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWTEXT_SHADED_FG_COLOR num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWTEXT_SHADED_BG_COLOR num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_DrawText_Blended 281 -#define DRAWTEXT_BLENDED_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define DRAWTEXT_BLENDED_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWTEXT_BLENDED_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_RenderText 282 -#define RENDERTEXT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RENDERTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_GetTextSize 283 -#define GETTEXTSIZE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETTEXTSIZE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define GETTEXTSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETTEXTSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_TouchPressure 284 -#define FN_GetTouch 285 -#define GETTOUCH_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETTOUCH_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETTOUCH_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETTOUCH_DX num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETTOUCH_DY num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_GetMultiTouch 286 -#define GETMULTITOUCH_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETMULTITOUCH_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETMULTITOUCH_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETMULTITOUCH_FINGERS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETMULTITOUCH_DIST num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define GETMULTITOUCH_THETA num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define FN_GetTouchFinger 287 -#define GETTOUCHFINGER_FINGER num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETTOUCHFINGER_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETTOUCHFINGER_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETTOUCHFINGER_PRESSURE num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_NumFingers 288 -#define FN_CheckSockets 289 -#define CHECKSOCKETS_TIMEOUT_MS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TCP_SocketReady 290 -#define TCP_SOCKETREADY_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_UDP_SocketReady 291 -#define UDP_SOCKETREADY_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TCP_SocketOpen 292 -#define TCP_SOCKETOPEN_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define TCP_SOCKETOPEN_HOST$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define TCP_SOCKETOPEN_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_TCP_SocketClose 293 -#define TCP_SOCKETCLOSE_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TCP_RemoteHost 294 -#define TCP_REMOTEHOST_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TCP_RemotePort 295 -#define TCP_REMOTEPORT_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TCP_GetData 296 -#define TCP_GETDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define TCP_GETDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define TCP_GETDATA_NUMBYTES num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_TCP_SendData 297 -#define TCP_SENDDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define TCP_SENDDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_TCP_AcceptSocket 298 -#define TCP_ACCEPTSOCKET_SERVER num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define TCP_ACCEPTSOCKET_CLIENT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_UDP_SocketOpen 299 -#define UDP_SOCKETOPEN_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define UDP_SOCKETOPEN_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_UDP_SocketClose 300 -#define UDP_SOCKETCLOSE_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_UDP_GetData 301 -#define UDP_GETDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define UDP_GETDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define UDP_GETDATA_HOST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define UDP_GETDATA_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_UDP_Length 302 -#define FN_UDP_MaxLength 303 -#define FN_UDP_RemoteHost$ 304 -#define UDP_REMOTEHOST$_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_UDP_RemotePort 305 -#define UDP_REMOTEPORT_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_UDP_SendData 306 -#define UDP_SENDDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define UDP_SENDDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define UDP_SENDDATA_HOST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define UDP_SENDDATA_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_LoadVideo 307 -#define LOADVIDEO_VID$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_PlayVideo 308 -#define PLAYVIDEO_VLOOPS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_PauseVideo 309 -#define FN_StopVideo 310 -#define FN_SetVideoPosition 311 -#define SETVIDEOPOSITION_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ResumeVideo 312 -#define FN_VideoPosition 313 -#define FN_DeleteVideo 314 -#define FN_VideoIsPlaying 315 -#define FN_VideoEnd 316 -#define FN_GetVideoStats 317 -#define GETVIDEOSTATS_VFILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define GETVIDEOSTATS_VLEN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETVIDEOSTATS_VFPS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETVIDEOSTATS_FRAME_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETVIDEOSTATS_FRAME_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_SetVideoDrawRect 318 -#define SETVIDEODRAWRECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETVIDEODRAWRECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETVIDEODRAWRECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SETVIDEODRAWRECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_GetVideoDrawRect 319 -#define GETVIDEODRAWRECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETVIDEODRAWRECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETVIDEODRAWRECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETVIDEODRAWRECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_GetVideoSize 320 -#define GETVIDEOSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETVIDEOSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_VideoExists 321 -#define FN_SetVideoAlpha 322 -#define SETVIDEOALPHA_A num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_System 323 -#define SYSTEM_CMD$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_OS$ 324 -#define FN_Command$ 325 -#define COMMAND$_ARG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumCommands 326 -#define FN_Env$ 327 -#define ENV$_V$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_SetEnv 328 -#define SETENV_VAR$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define SETENV_VALUE$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define SETENV_OVERWRITE num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_PrefPath$ 329 -#define PREFPATH$_ORG_NAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define PREFPATH$_APP_NAME$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_Android_GetExternalStoragePath$ 330 -#define FN_Android_GetExternalStorageState 331 -#define FN_Android_GetInternalStoragePath$ 332 -#define FN_Android_JNI_Message$ 333 -#define ANDROID_JNI_MESSAGE$_ARG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_Runtime_Utility_Message$ 334 -#define RUNTIME_UTILITY_MESSAGE$_ARG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_ClipboardText$ 335 -#define FN_SetClipboardText 336 -#define SETCLIPBOARDTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_HasClipboardText 337 -#define FN_GetDesktopDisplayMode 338 -#define GETDESKTOPDISPLAYMODE_INDEX num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETDESKTOPDISPLAYMODE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETDESKTOPDISPLAYMODE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETDESKTOPDISPLAYMODE_FREQ num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_DrawImage_Transform 339 -#define DRAWIMAGE_TRANSFORM_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWIMAGE_TRANSFORM_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWIMAGE_TRANSFORM_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWIMAGE_TRANSFORM_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWIMAGE_TRANSFORM_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define DRAWIMAGE_TRANSFORM_SRC_X num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define DRAWIMAGE_TRANSFORM_SRC_Y num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define DRAWIMAGE_TRANSFORM_SRC_W num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define DRAWIMAGE_TRANSFORM_SRC_H num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define DRAWIMAGE_TRANSFORM_ANGLE num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define DRAWIMAGE_TRANSFORM_CENTER_X num_var[10].nid_value.value[ num_var[10].byref_offset ] -#define DRAWIMAGE_TRANSFORM_CENTER_Y num_var[11].nid_value.value[ num_var[11].byref_offset ] -#define DRAWIMAGE_TRANSFORM_FLIP_H num_var[12].nid_value.value[ num_var[12].byref_offset ] -#define DRAWIMAGE_TRANSFORM_FLIP_V num_var[13].nid_value.value[ num_var[13].byref_offset ] -#define FN_GetPowerInfo 340 -#define GETPOWERINFO_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETPOWERINFO_SECS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETPOWERINFO_PCT num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SystemRam 341 -#define FN_SetRenderScaleQuality 342 -#define SETRENDERSCALEQUALITY_N num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_EvalJS$ 343 -#define EVALJS$_JS_CODE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_GetRenderScaleQuality 344 -#define FN_GetGlobalMouse 345 -#define GETGLOBALMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETGLOBALMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETGLOBALMOUSE_MB1 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETGLOBALMOUSE_MB2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETGLOBALMOUSE_MB3 num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_GlobalMouseX 346 -#define FN_GlobalMouseY 347 -#define FN_GetAccel 348 -#define GETACCEL_ACCEL_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETACCEL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETACCEL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETACCEL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_AccelName$ 349 -#define ACCELNAME$_ACCEL_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumAccels 350 -#define FN_GetGyro 351 -#define GETGYRO_GYRO_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETGYRO_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETGYRO_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETGYRO_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_GyroName$ 352 -#define GYRONAME$_GYRO_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumGyros 353 -#define FN_JoyRumblePlay 354 -#define JOYRUMBLEPLAY_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define JOYRUMBLEPLAY_STRENGTH num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define JOYRUMBLEPLAY_DURATION num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_JoyRumbleStop 355 -#define JOYRUMBLESTOP_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_JoystickIsHaptic 356 -#define JOYSTICKISHAPTIC_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_WriteByteBuffer 357 -#define WRITEBYTEBUFFER_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WRITEBYTEBUFFER_BUF num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define WRITEBYTEBUFFER_BUF_SIZE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ReadByteBuffer 358 -#define READBYTEBUFFER_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define READBYTEBUFFER_BUF num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define READBYTEBUFFER_BUF_SIZE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_WindowEvent_Resize 359 -#define WINDOWEVENT_RESIZE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowAutoClose 360 -#define SETWINDOWAUTOCLOSE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWAUTOCLOSE_EXIT_ON_CLOSE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SetWindowResizable 361 -#define SETWINDOWRESIZABLE_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWRESIZABLE_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SystemReturnStdOut$ 362 -#define SYSTEMRETURNSTDOUT$_CMD$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_WindowMode 363 -#define WINDOWMODE_VISIBLE num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WINDOWMODE_FULLSCREEN num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define WINDOWMODE_RESIZABLE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define WINDOWMODE_BORDERLESS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define WINDOWMODE_HIGHDPI num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_WindowFlags 364 -#define WINDOWFLAGS_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_RestoreWindow 365 -#define RESTOREWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_UpdateAllWindows 366 -#define FN_QueryAudioSpec 367 -#define QUERYAUDIOSPEC_FREQ num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define QUERYAUDIOSPEC_FORMAT num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define QUERYAUDIOSPEC_CHANNELS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_MusicIsPlaying 368 -#define FN_DrawGeometry 369 -#define DRAWGEOMETRY_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DRAWGEOMETRY_NUM_VERTICES num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DRAWGEOMETRY_VERTICES num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DRAWGEOMETRY_NUM_INDICES num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define DRAWGEOMETRY_INDICES num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_Size 370 -#define SIZE_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_BufferFromString 371 -#define BUFFERFROMSTRING_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define BUFFERFROMSTRING_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_StringFromBuffer$ 372 -#define STRINGFROMBUFFER$_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define STRINGFROMBUFFER$_BUFFER_SIZE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_GrabInput 373 -#define GRABINPUT_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_GrabbedWindow 374 -#define FN_WarpMouse 375 -#define WARPMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WARPMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_WarpMouseGlobal 376 -#define WARPMOUSEGLOBAL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define WARPMOUSEGLOBAL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SetMouseZone 377 -#define SETMOUSEZONE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETMOUSEZONE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETMOUSEZONE_W num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SETMOUSEZONE_H num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_ClearMouseZone 378 -#define FN_SetWindowAlwaysOnTop 379 -#define SETWINDOWALWAYSONTOP_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWALWAYSONTOP_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SetMouseRelative 380 -#define SETMOUSERELATIVE_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetWindowVSync 381 -#define SETWINDOWVSYNC_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETWINDOWVSYNC_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_OpenURL 382 -#define OPENURL_URL$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_APIVersion$ 383 -#define FN_FlashWindow 384 -#define FLASHWINDOW_WIN num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_MessageBox 385 -#define MESSAGEBOX_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define MESSAGEBOX_MSG$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_NumberArrayCopy 386 +#define FN_NumberArrayCopy 8 #define NUMBERARRAYCOPY_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] #define NUMBERARRAYCOPY_DST num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_StringArrayCopy 387 +#define FN_StringArrayCopy 9 #define STRINGARRAYCOPY_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] #define STRINGARRAYCOPY_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_ArrayCopy 388 +#define FN_ArrayCopy 10 #define ARRAYCOPY_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] #define ARRAYCOPY_DST num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_NumberArrayFill 389 +#define FN_NumberArrayFill 11 #define NUMBERARRAYFILL_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] #define NUMBERARRAYFILL_FDATA num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_StringArrayFill 390 +#define FN_StringArrayFill 12 #define STRINGARRAYFILL_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] #define STRINGARRAYFILL_FDATA$ str_var[1].sid_value.value[ str_var[1].byref_offset ] -#define FN_ArrayFill 391 +#define FN_ArrayFill 13 #define ARRAYFILL_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] #define ARRAYFILL_FDATA num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_Runtime$ 392 -#define FN_DimMatrix 393 -#define DIMMATRIX_M num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DIMMATRIX_M_ROWS num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DIMMATRIX_M_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define DIMMATRIX_PRESERVE_FLAG num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_AddMatrix 394 -#define ADDMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ADDMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ADDMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_AugmentMatrix 395 -#define AUGMENTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define AUGMENTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define AUGMENTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_CopyMatrix 396 -#define COPYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COPYMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_InsertMatrixColumns 397 -#define INSERTMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define INSERTMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define INSERTMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_InsertMatrixRows 398 -#define INSERTMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define INSERTMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define INSERTMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_MultiplyMatrix 399 -#define MULTIPLYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MULTIPLYMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define MULTIPLYMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_CubeMatrix 400 -#define CUBEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CUBEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_DeleteMatrixColumns 401 -#define DELETEMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DELETEMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DELETEMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_DeleteMatrixRows 402 -#define DELETEMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define DELETEMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define DELETEMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ClearMatrix 403 -#define CLEARMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ClearMatrixColumns 404 -#define CLEARMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CLEARMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CLEARMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ClearMatrixRows 405 -#define CLEARMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CLEARMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CLEARMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_FillMatrix 406 -#define FILLMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FILLMATRIX_V num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_FillMatrixColumns 407 -#define FILLMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FILLMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FILLMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FILLMATRIXCOLUMNS_V num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_FillMatrixRows 408 -#define FILLMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FILLMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FILLMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FILLMATRIXROWS_V num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_CopyMatrixColumns 409 -#define COPYMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COPYMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define COPYMATRIXCOLUMNS_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define COPYMATRIXCOLUMNS_NUM_COLS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_CopyMatrixRows 410 -#define COPYMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define COPYMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define COPYMATRIXROWS_R num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define COPYMATRIXROWS_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_IdentityMatrix 411 -#define IDENTITYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define IDENTITYMATRIX_N num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SolveMatrix 412 -#define SOLVEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SOLVEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SOLVEMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_IsEqualMatrix 413 -#define ISEQUALMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ISEQUALMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define ISEQUALMATRIX_TOLERANCE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_Determinant 414 -#define DETERMINANT_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_AdjointMatrix 415 -#define ADJOINTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define ADJOINTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_InvertMatrix 416 -#define INVERTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define INVERTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_MatrixFromBuffer 417 -#define MATRIXFROMBUFFER_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MATRIXFROMBUFFER_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define MATRIXFROMBUFFER_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define MATRIXFROMBUFFER_BUFFER num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_GetMatrix 418 -#define GETMATRIX_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETMATRIX_MA num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_RandomizeMatrix 419 -#define RANDOMIZEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define RANDOMIZEMATRIX_VMIN num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define RANDOMIZEMATRIX_VMAX num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_MatrixValue 420 -#define MATRIXVALUE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define MATRIXVALUE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define MATRIXVALUE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetMatrixValue 421 -#define SETMATRIXVALUE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETMATRIXVALUE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETMATRIXVALUE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SETMATRIXVALUE_V num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_ScalarMatrix 422 -#define SCALARMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SCALARMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SCALARMATRIX_S_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ScalarMatrixColumns 423 -#define SCALARMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SCALARMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SCALARMATRIXCOLUMNS_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SCALARMATRIXCOLUMNS_NUM_COLS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define SCALARMATRIXCOLUMNS_S_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_ScalarMatrixRows 424 -#define SCALARMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SCALARMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SCALARMATRIXROWS_R num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define SCALARMATRIXROWS_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define SCALARMATRIXROWS_S_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_SquareMatrix 425 -#define SQUAREMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SQUAREMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SubMatrix 426 -#define SUBMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SUBMATRIX_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SUBMATRIX_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SubtractMatrix 427 -#define SUBTRACTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SUBTRACTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SUBTRACTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SwapMatrix 428 -#define SWAPMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SWAPMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_SwapMatrixColumn 429 -#define SWAPMATRIXCOLUMN_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SWAPMATRIXCOLUMN_C1 num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SWAPMATRIXCOLUMN_C2 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SwapMatrixRow 430 -#define SWAPMATRIXROW_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SWAPMATRIXROW_R1 num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SWAPMATRIXROW_R2 num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_TransposeMatrix 431 -#define TRANSPOSEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define TRANSPOSEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_UnAugmentMatrix 432 -#define UNAUGMENTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define UNAUGMENTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define UNAUGMENTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_ZeroMatrix 433 -#define ZEROMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_GetMatrixSize 434 -#define GETMATRIXSIZE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETMATRIXSIZE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETMATRIXSIZE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SetMatrixProcess 435 -#define SETMATRIXPROCESS_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessOpen 436 -#define PROCESSOPEN_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_SetProcessErrorMode 437 -#define SETPROCESSERRORMODE_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETPROCESSERRORMODE_ERROR_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ProcessError 438 -#define PROCESSERROR_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessWait 439 -#define PROCESSWAIT_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessWaitAll 440 -#define FN_ProcessContinue 441 -#define PROCESSCONTINUE_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessStop 442 -#define PROCESSSTOP_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessClear 443 -#define PROCESSCLEAR_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessClose 444 -#define PROCESSCLOSE_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessErrorMode 445 -#define PROCESSERRORMODE_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessSleep 446 -#define PROCESSSLEEP_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define PROCESSSLEEP_MSEC num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_ProcessExists 447 -#define PROCESSEXISTS_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_ProcessStopAll 448 -#define FN_ProcessContinueAll 449 -#define FN_ProcessQueueSize 450 -#define PROCESSQUEUESIZE_P_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_NumCPUs 451 -#define FN_GetProjectionGeometry 452 -#define GETPROJECTIONGEOMETRY_CAM_DIST num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define GETPROJECTIONGEOMETRY_MA num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define GETPROJECTIONGEOMETRY_F_VERTEX_COUNT num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define GETPROJECTIONGEOMETRY_COLUMNS num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define GETPROJECTIONGEOMETRY_UV num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define GETPROJECTIONGEOMETRY_GRAPH_OFFSET_X num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define GETPROJECTIONGEOMETRY_GRAPH_OFFSET_Y num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define GETPROJECTIONGEOMETRY_V_COLOR num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define GETPROJECTIONGEOMETRY_VERTEX_COUNT num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define GETPROJECTIONGEOMETRY_VERTEX2D num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define GETPROJECTIONGEOMETRY_INDEX_COUNT num_var[10].nid_value.value[ num_var[10].byref_offset ] -#define GETPROJECTIONGEOMETRY_INDEX num_var[11].nid_value.value[ num_var[11].byref_offset ] -#define GETPROJECTIONGEOMETRY_CLIP_DIST num_var[12].nid_value.value[ num_var[12].byref_offset ] -#define GETPROJECTIONGEOMETRY_MIN_X num_var[13].nid_value.value[ num_var[13].byref_offset ] -#define GETPROJECTIONGEOMETRY_MIN_Y num_var[14].nid_value.value[ num_var[14].byref_offset ] -#define GETPROJECTIONGEOMETRY_MAX_X num_var[15].nid_value.value[ num_var[15].byref_offset ] -#define GETPROJECTIONGEOMETRY_MAX_Y num_var[16].nid_value.value[ num_var[16].byref_offset ] -#define FN_CalculateFaceZ 453 -#define CALCULATEFACEZ_CAM_DIST num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define CALCULATEFACEZ_GRAPH_OFFSET_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define CALCULATEFACEZ_GRAPH_OFFSET_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define CALCULATEFACEZ_VIEW_W num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define CALCULATEFACEZ_VIEW_H num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define CALCULATEFACEZ_VIEW_DEPTH num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define CALCULATEFACEZ_MA num_var[6].nid_value.value[ num_var[6].byref_offset ] -#define CALCULATEFACEZ_F_VERTEX_COUNT num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define CALCULATEFACEZ_COLUMNS num_var[8].nid_value.value[ num_var[8].byref_offset ] -#define CALCULATEFACEZ_FACE_MIN_Z num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define CALCULATEFACEZ_FACE_MAX_Z num_var[10].nid_value.value[ num_var[10].byref_offset ] -#define CALCULATEFACEZ_Z_AVG num_var[11].nid_value.value[ num_var[11].byref_offset ] -#define FN_SetChannelSpacePosition 454 -#define SETCHANNELSPACEPOSITION_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SETCHANNELSPACEPOSITION_ANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define SETCHANNELSPACEPOSITION_DISTANCE num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_SaveBMP 455 -#define SAVEBMP_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SAVEBMP_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_SavePNG 456 -#define SAVEPNG_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SAVEPNG_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_SaveJPG 457 -#define SAVEJPG_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define SAVEJPG_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] -#define FN_GetLineIntersection 458 +#define FN_TypeArrayDim 14 +#define TYPEARRAYDIM_ID usr_var[0].var_ref +#define FN_TypeArraySize 15 +#define TYPEARRAYSIZE_ID usr_var[0].var_ref +#define TYPEARRAYSIZE_ARRAY_DIM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TypeArrayCopy 16 +#define TYPEARRAYCOPY_SRC usr_var[0].var_ref +#define TYPEARRAYCOPY_DST usr_var[1].var_ref +#define FN_TypeArrayFill 17 +#define TYPEARRAYFILL_SRC usr_var[0].var_ref +#define TYPEARRAYFILL_FDATA usr_var[1].var_ref->uid_value[0] +#define FN_Abs 18 +#define ABS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Acos 19 +#define ACOS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_AndBit 20 +#define ANDBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ANDBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_Asin 21 +#define ASIN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Atan 22 +#define ATAN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Bin$ 23 +#define BIN$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CInt32 24 +#define CINT32_I num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CInt64 25 +#define CINT64_I num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Cos 26 +#define COS_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Degrees 27 +#define DEGREES_R num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Exp 28 +#define EXP_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Frac 29 +#define FRAC_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Hex$ 30 +#define HEX$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_HexVal 31 +#define HEXVAL_N$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Int 32 +#define INT_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Log 33 +#define LOG_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Max 34 +#define MAX_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MAX_B num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_Min 35 +#define MIN_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MIN_B num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_OrBit 36 +#define ORBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ORBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_Radians 37 +#define RADIANS_D num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Randomize 38 +#define RANDOMIZE_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Rand 39 +#define RAND_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Round 40 +#define ROUND_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Sign 41 +#define SIGN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Sin 42 +#define SIN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Sqrt 43 +#define SQRT_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Tan 44 +#define TAN_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_XOrBit 45 +#define XORBIT_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define XORBIT_B num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLineIntersection 46 #define GETLINEINTERSECTION_P0_X num_var[0].nid_value.value[ num_var[0].byref_offset ] #define GETLINEINTERSECTION_P0_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] #define GETLINEINTERSECTION_P1_X num_var[2].nid_value.value[ num_var[2].byref_offset ] @@ -1335,16 +121,16 @@ #define GETLINEINTERSECTION_P3_Y num_var[7].nid_value.value[ num_var[7].byref_offset ] #define GETLINEINTERSECTION_I_X num_var[8].nid_value.value[ num_var[8].byref_offset ] #define GETLINEINTERSECTION_I_Y num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define FN_Interpolate 459 +#define FN_Interpolate 47 #define INTERPOLATE_MIN_A num_var[0].nid_value.value[ num_var[0].byref_offset ] #define INTERPOLATE_MAX_A num_var[1].nid_value.value[ num_var[1].byref_offset ] #define INTERPOLATE_MID_A num_var[2].nid_value.value[ num_var[2].byref_offset ] #define INTERPOLATE_MIN_B num_var[3].nid_value.value[ num_var[3].byref_offset ] #define INTERPOLATE_MAX_B num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_ATan2 460 +#define FN_ATan2 48 #define ATAN2_Y num_var[0].nid_value.value[ num_var[0].byref_offset ] #define ATAN2_X num_var[1].nid_value.value[ num_var[1].byref_offset ] -#define FN_PointInQuad 461 +#define FN_PointInQuad 49 #define POINTINQUAD_X num_var[0].nid_value.value[ num_var[0].byref_offset ] #define POINTINQUAD_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] #define POINTINQUAD_X1 num_var[2].nid_value.value[ num_var[2].byref_offset ] @@ -1355,7 +141,7 @@ #define POINTINQUAD_Y3 num_var[7].nid_value.value[ num_var[7].byref_offset ] #define POINTINQUAD_X4 num_var[8].nid_value.value[ num_var[8].byref_offset ] #define POINTINQUAD_Y4 num_var[9].nid_value.value[ num_var[9].byref_offset ] -#define FN_PointInTri 462 +#define FN_PointInTri 50 #define POINTINTRI_X num_var[0].nid_value.value[ num_var[0].byref_offset ] #define POINTINTRI_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] #define POINTINTRI_X1 num_var[2].nid_value.value[ num_var[2].byref_offset ] @@ -1364,19 +150,19 @@ #define POINTINTRI_Y2 num_var[5].nid_value.value[ num_var[5].byref_offset ] #define POINTINTRI_X3 num_var[6].nid_value.value[ num_var[6].byref_offset ] #define POINTINTRI_Y3 num_var[7].nid_value.value[ num_var[7].byref_offset ] -#define FN_Distance2D 463 +#define FN_Distance2D 51 #define DISTANCE2D_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] #define DISTANCE2D_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] #define DISTANCE2D_X2 num_var[2].nid_value.value[ num_var[2].byref_offset ] #define DISTANCE2D_Y2 num_var[3].nid_value.value[ num_var[3].byref_offset ] -#define FN_Distance3D 464 +#define FN_Distance3D 52 #define DISTANCE3D_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] #define DISTANCE3D_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] #define DISTANCE3D_Z1 num_var[2].nid_value.value[ num_var[2].byref_offset ] #define DISTANCE3D_X2 num_var[3].nid_value.value[ num_var[3].byref_offset ] #define DISTANCE3D_Y2 num_var[4].nid_value.value[ num_var[4].byref_offset ] #define DISTANCE3D_Z2 num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define FN_GetCircleLineIntersection 465 +#define FN_GetCircleLineIntersection 53 #define GETCIRCLELINEINTERSECTION_CIRCLE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] #define GETCIRCLELINEINTERSECTION_CIRCLE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] #define GETCIRCLELINEINTERSECTION_RADIUS num_var[2].nid_value.value[ num_var[2].byref_offset ] @@ -1388,41 +174,2341 @@ #define GETCIRCLELINEINTERSECTION_IY1 num_var[8].nid_value.value[ num_var[8].byref_offset ] #define GETCIRCLELINEINTERSECTION_IX2 num_var[9].nid_value.value[ num_var[9].byref_offset ] #define GETCIRCLELINEINTERSECTION_IY2 num_var[10].nid_value.value[ num_var[10].byref_offset ] -#define FN_GetLinePlaneIntersection 466 +#define FN_GetLinePlaneIntersection 54 #define GETLINEPLANEINTERSECTION_LINE_POINT num_var[0].nid_value.value[ num_var[0].byref_offset ] #define GETLINEPLANEINTERSECTION_LINE_DIRECTION num_var[1].nid_value.value[ num_var[1].byref_offset ] #define GETLINEPLANEINTERSECTION_PLANE_POINT_1 num_var[2].nid_value.value[ num_var[2].byref_offset ] #define GETLINEPLANEINTERSECTION_PLANE_POINT_2 num_var[3].nid_value.value[ num_var[3].byref_offset ] #define GETLINEPLANEINTERSECTION_PLANE_POINT_3 num_var[4].nid_value.value[ num_var[4].byref_offset ] #define GETLINEPLANEINTERSECTION_INTERSECTION num_var[5].nid_value.value[ num_var[5].byref_offset ] -#define FN_IncrementMatrixRows 467 +#define FN_Asc 55 +#define ASC_C$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Chr$ 56 +#define CHR$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Insert$ 57 +#define INSERT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define INSERT$_TGT$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define INSERT$_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_InStr 58 +#define INSTR_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define INSTR_SUBSTR$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_Lcase$ 59 +#define LCASE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Left$ 60 +#define LEFT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define LEFT$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Length 61 +#define LENGTH_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Len 62 +#define LEN_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Ltrim$ 63 +#define LTRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Mid$ 64 +#define MID$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define MID$_START num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MID$_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ReplaceSubstr$ 65 +#define REPLACESUBSTR$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define REPLACESUBSTR$_RPC$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define REPLACESUBSTR$_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Replace$ 66 +#define REPLACE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define REPLACE$_TGT$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define REPLACE$_RPC$ str_var[2].sid_value.value[ str_var[2].byref_offset ] +#define FN_Reverse$ 67 +#define REVERSE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Right$ 68 +#define RIGHT$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define RIGHT$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Rtrim$ 69 +#define RTRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_StringFill$ 70 +#define STRINGFILL$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define STRINGFILL$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Str$ 71 +#define STR$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Str_F$ 72 +#define STR_F$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Str_S$ 73 +#define STR_S$_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Tally 74 +#define TALLY_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define TALLY_SUBSTR$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_Trim$ 75 +#define TRIM$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Ucase$ 76 +#define UCASE$_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Val 77 +#define VAL_N$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Size 78 +#define SIZE_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_BufferFromString 79 +#define BUFFERFROMSTRING_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define BUFFERFROMSTRING_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_StringFromBuffer$ 80 +#define STRINGFROMBUFFER$_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define STRINGFROMBUFFER$_BUFFER_SIZE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_CreateStack_N 81 +#define FN_CreateStack_S 82 +#define FN_ClearStack_N 83 +#define CLEARSTACK_N_NUM_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ClearStack_S 84 +#define CLEARSTACK_S_STR_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteStack_N 85 +#define DELETESTACK_N_NUM_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteStack_S 86 +#define DELETESTACK_S_STR_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Push_N 87 +#define PUSH_N_NUM_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define PUSH_N_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_Pop_N 88 +#define POP_N_NUM_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Push_S 89 +#define PUSH_S_STR_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define PUSH_S_S$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Pop_S$ 90 +#define POP_S$_STR_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Stack_Size_N 91 +#define STACK_SIZE_N_NUM_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Stack_Size_S 92 +#define STACK_SIZE_S_STR_STACK num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_OpenFile 93 +#define OPENFILE_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define OPENFILE_MODE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CloseFile 94 +#define CLOSEFILE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ReadByte 95 +#define READBYTE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WriteByte 96 +#define WRITEBYTE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WRITEBYTE_BYTE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ReadLine$ 97 +#define READLINE$_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Write 98 +#define WRITE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WRITE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_WriteLine 99 +#define WRITELINE_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WRITELINE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_CopyFile 100 +#define COPYFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define COPYFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_RemoveFile 101 +#define REMOVEFILE_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_FileExists 102 +#define FILEEXISTS_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_MoveFile 103 +#define MOVEFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define MOVEFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_RenameFile 104 +#define RENAMEFILE_SRC$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define RENAMEFILE_DST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_FileLength 105 +#define FILELENGTH_FILENAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Tell 106 +#define TELL_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Seek 107 +#define SEEK_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SEEK_POS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_EOF 108 +#define EOF_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WriteByteBuffer 109 +#define WRITEBYTEBUFFER_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WRITEBYTEBUFFER_BUF num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define WRITEBYTEBUFFER_BUF_SIZE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ReadByteBuffer 110 +#define READBYTEBUFFER_STREAM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define READBYTEBUFFER_BUF num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define READBYTEBUFFER_BUF_SIZE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ChangeDir 111 +#define CHANGEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_DirExists 112 +#define DIREXISTS_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_DirFirst$ 113 +#define FN_Dir$ 114 +#define FN_DirNext$ 115 +#define FN_MakeDir 116 +#define MAKEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_RemoveDir 117 +#define REMOVEDIR_P$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Date$ 118 +#define FN_Easter$ 119 +#define EASTER$_YEAR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Ticks 120 +#define FN_Time$ 121 +#define FN_Timer 122 +#define FN_Wait 123 +#define WAIT_M_SEC num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_OpenWindow 124 +#define OPENWINDOW_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define OPENWINDOW_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define OPENWINDOW_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define OPENWINDOW_FULLSCREEN num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define OPENWINDOW_VSYNC num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_OpenWindowEx 125 +#define OPENWINDOWEX_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define OPENWINDOWEX_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define OPENWINDOWEX_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define OPENWINDOWEX_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define OPENWINDOWEX_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define OPENWINDOWEX_MODE num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define OPENWINDOWEX_AA num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define OPENWINDOWEX_STENCIL_BUFFER num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define OPENWINDOWEX_VSYNC num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define FN_CloseWindow 126 +#define FN_RaiseWindow 127 +#define FN_Update 128 +#define FN_Cls 129 +#define FN_SetClearColor 130 +#define SETCLEARCOLOR_C num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ShowWindow 131 +#define FN_HideWindow 132 +#define FN_SetWindowTitle 133 +#define SETWINDOWTITLE_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_WindowTitle$ 134 +#define FN_SetWindowPosition 135 +#define SETWINDOWPOSITION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWINDOWPOSITION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetWindowPosition 136 +#define GETWINDOWPOSITION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETWINDOWPOSITION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetWindowSize 137 +#define SETWINDOWSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWINDOWSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetWindowSize 138 +#define GETWINDOWSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETWINDOWSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetWindowMinSize 139 +#define SETWINDOWMINSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWINDOWMINSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetWindowMinSize 140 +#define GETWINDOWMINSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETWINDOWMINSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetWindowMaxSize 141 +#define SETWINDOWMAXSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWINDOWMAXSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetWindowMaxSize 142 +#define GETWINDOWMAXSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETWINDOWMAXSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_WindowIsFullscreen 143 +#define FN_WindowIsVisible 144 +#define FN_WindowIsBordered 145 +#define FN_WindowIsResizable 146 +#define FN_WindowIsMinimized 147 +#define FN_WindowIsMaximized 148 +#define FN_WindowHasInputFocus 149 +#define FN_WindowHasMouseFocus 150 +#define FN_SetWindowFullscreen 151 +#define SETWINDOWFULLSCREEN_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_MaximizeWindow 152 +#define FN_MinimizeWindow 153 +#define FN_SetWindowBordered 154 +#define SETWINDOWBORDERED_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WindowClip 155 +#define WINDOWCLIP_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WINDOWCLIP_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define WINDOWCLIP_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define WINDOWCLIP_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_WindowExists 156 +#define FN_WindowEvent_Close 157 +#define FN_WindowEvent_Maximize 158 +#define FN_WindowEvent_Minimize 159 +#define FN_FPS 160 +#define FN_SetWindowIcon 161 +#define SETWINDOWICON_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WindowEvent_Resize 162 +#define FN_SetWindowAutoClose 163 +#define SETWINDOWAUTOCLOSE_EXIT_ON_CLOSE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetWindowResizable 164 +#define SETWINDOWRESIZABLE_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WindowMode 165 +#define WINDOWMODE_VISIBLE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WINDOWMODE_FULLSCREEN num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define WINDOWMODE_RESIZABLE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define WINDOWMODE_BORDERLESS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define WINDOWMODE_HIGHDPI num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_getWindowMode 166 +#define FN_RestoreWindow 167 +#define FN_GrabInput 168 +#define GRABINPUT_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetWindowAlwaysOnTop 169 +#define SETWINDOWALWAYSONTOP_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetMouseRelative 170 +#define SETMOUSERELATIVE_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetWindowVSync 171 +#define SETWINDOWVSYNC_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_FlashWindow 172 +#define FLASHWINDOW_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WindowIsGrabbed 173 +#define FN_OpenCanvas 174 +#define OPENCANVAS_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define OPENCANVAS_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define OPENCANVAS_VIEWPORT_X num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define OPENCANVAS_VIEWPORT_Y num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define OPENCANVAS_VIEWPORT_W num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define OPENCANVAS_VIEWPORT_H num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define OPENCANVAS_MODE num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_CloseCanvas 175 +#define CLOSECANVAS_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetCanvas3D 176 +#define SETCANVAS3D_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVAS3D_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetCanvasVisible 177 +#define SETCANVASVISIBLE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASVISIBLE_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_CanvasIsVisible 178 +#define CANVASISVISIBLE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetCanvasViewport 179 +#define SETCANVASVIEWPORT_CNUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASVIEWPORT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCANVASVIEWPORT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETCANVASVIEWPORT_W num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SETCANVASVIEWPORT_H num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_GetCanvasViewport 180 +#define GETCANVASVIEWPORT_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCANVASVIEWPORT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCANVASVIEWPORT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCANVASVIEWPORT_W num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETCANVASVIEWPORT_H num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_Canvas 181 +#define CANVAS_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetCanvasOffset 182 +#define SETCANVASOFFSET_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASOFFSET_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCANVASOFFSET_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetCanvasOffset 183 +#define GETCANVASOFFSET_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCANVASOFFSET_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCANVASOFFSET_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetCanvasSize 184 +#define GETCANVASSIZE_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCANVASSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCANVASSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ClearCanvas 185 +#define FN_SetCanvasAlpha 186 +#define SETCANVASALPHA_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASALPHA_A num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetCanvasAlpha 187 +#define GETCANVASALPHA_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetCanvasColorMod 188 +#define SETCANVASCOLORMOD_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASCOLORMOD_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetCanvasColorMod 189 +#define GETCANVASCOLORMOD_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CloneCanvas 190 +#define CLONECANVAS_SRC num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CLONECANVAS_DST num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetCanvasZ 191 +#define SETCANVASZ_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCANVASZ_Z num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetCanvasZ 192 +#define GETCANVASZ_C_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CanvasClip 193 +#define CANVASCLIP_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CANVASCLIP_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CANVASCLIP_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CANVASCLIP_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_ActiveCanvas 194 +#define FN_Circle 195 +#define CIRCLE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CIRCLE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CIRCLE_RADIUS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_CircleFill 196 +#define CIRCLEFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CIRCLEFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CIRCLEFILL_RADIUS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_Ellipse 197 +#define ELLIPSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ELLIPSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ELLIPSE_RX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ELLIPSE_RY num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_EllipseFill 198 +#define ELLIPSEFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ELLIPSEFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ELLIPSEFILL_RX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ELLIPSEFILL_RY num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_FloodFill 199 +#define FLOODFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FLOODFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetPixel 200 +#define GETPIXEL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPIXEL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetColor 201 +#define SETCOLOR_C num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_Line 202 +#define LINE_X1 num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define LINE_Y1 num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define LINE_X2 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define LINE_Y2 num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_Poly 203 +#define POLY_N num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define POLY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define POLY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_Rect 204 +#define RECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define RECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define RECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_RectFill 205 +#define RECTFILL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RECTFILL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define RECTFILL_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define RECTFILL_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_RGB 206 +#define RGB_R num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RGB_G num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define RGB_B num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_RGBA 207 +#define RGBA_R num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RGBA_G num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define RGBA_B num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define RGBA_A num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_Pset 208 +#define PSET_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define PSET_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_LoadImage 209 +#define LOADIMAGE_IMG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_LoadImageEx 210 +#define LOADIMAGEEX_IMG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define LOADIMAGEEX_COLKEY num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_createImage 211 +#define CREATEIMAGE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEIMAGE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEIMAGE_BUFFER num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_createImageEx 212 +#define CREATEIMAGEEX_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEIMAGEEX_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEIMAGEEX_BUFFER num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATEIMAGEEX_COLOR num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getImageBuffer 213 +#define GETIMAGEBUFFER_IMG_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETIMAGEBUFFER_BUFFER num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ImageExists 214 +#define IMAGEEXISTS_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ColorKey 215 +#define COLORKEY_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COLORKEY_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setBilinearFilter 216 +#define SETBILINEARFILTER_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getBilinearFilter 217 +#define FN_CopyImage 218 +#define COPYIMAGE_IMG_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteImage 219 +#define DELETEIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetImageAlpha 220 +#define SETIMAGEALPHA_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETIMAGEALPHA_A num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetImageAlpha 221 +#define GETIMAGEALPHA_IMG_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetImageSize 222 +#define GETIMAGESIZE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETIMAGESIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETIMAGESIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetBlendMode 223 +#define SETBLENDMODE_BLEND_MODE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetBlendMode 224 +#define GETBLENDMODE_BLEND_MODE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetImageColorMod 225 +#define SETIMAGECOLORMOD_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETIMAGECOLORMOD_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ImageColorMod 226 +#define IMAGECOLORMOD_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DrawImage 227 +#define DRAWIMAGE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_DrawImage_Blit 228 +#define DRAWIMAGE_BLIT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_BLIT_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_BLIT_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_BLIT_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_BLIT_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_BLIT_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_BLIT_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_DrawImage_BlitEx 229 +#define DRAWIMAGE_BLITEX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_BLITEX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_BLITEX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_BLITEX_W num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_BLITEX_H num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_BLITEX_SRC_X num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_BLITEX_SRC_Y num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define DRAWIMAGE_BLITEX_SRC_W num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define DRAWIMAGE_BLITEX_SRC_H num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define FN_DrawImage_Rotate 230 +#define DRAWIMAGE_ROTATE_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ROTATE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ROTATE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ROTATE_ANGLE num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_DrawImage_RotateEx 231 +#define DRAWIMAGE_ROTATEEX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ROTATEEX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ROTATEEX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ROTATEEX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_ROTATEEX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_ROTATEEX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_ROTATEEX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define DRAWIMAGE_ROTATEEX_ANGLE num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define FN_DrawImage_Zoom 232 +#define DRAWIMAGE_ZOOM_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ZOOM_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ZOOM_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ZOOM_ZX num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_ZOOM_ZY num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_DrawImage_ZoomEx 233 +#define DRAWIMAGE_ZOOMEX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ZOOMEX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ZOOMEX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ZOOMEX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_ZOOMEX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_ZOOMEX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_ZOOMEX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define DRAWIMAGE_ZOOMEX_ZX num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define DRAWIMAGE_ZOOMEX_ZY num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define FN_DrawImage_Rotozoom 234 +#define DRAWIMAGE_ROTOZOOM_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ROTOZOOM_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ROTOZOOM_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ROTOZOOM_ANGLE num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_ROTOZOOM_ZX num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_ROTOZOOM_ZY num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_DrawImage_RotozoomEx 235 +#define DRAWIMAGE_ROTOZOOMEX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_ANGLE num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_ZX num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define DRAWIMAGE_ROTOZOOMEX_ZY num_var[9].nid_value.value[ num_var[9].byref_offset ] +#define FN_DrawImage_Flip 236 +#define DRAWIMAGE_FLIP_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_FLIP_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_FLIP_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_FLIP_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_FLIP_V num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_DrawImage_FlipEx 237 +#define DRAWIMAGE_FLIPEX_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWIMAGE_FLIPEX_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DRAWIMAGE_FLIPEX_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define DRAWIMAGE_FLIPEX_SRC_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define DRAWIMAGE_FLIPEX_SRC_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define DRAWIMAGE_FLIPEX_SRC_W num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define DRAWIMAGE_FLIPEX_SRC_H num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define DRAWIMAGE_FLIPEX_H num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define DRAWIMAGE_FLIPEX_V num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define FN_InKey 238 +#define FN_Key 239 +#define KEY_KEY_CODE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_WaitKey 240 +#define FN_HideMouse 241 +#define FN_ShowMouse 242 +#define FN_MouseIsVisible 243 +#define FN_GetMouse 244 +#define GETMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMOUSE_MB1 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETMOUSE_MB2 num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETMOUSE_MB3 num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_MouseX 245 +#define FN_MouseY 246 +#define FN_MouseButton 247 +#define MOUSEBUTTON_MB num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetMouseWheel 248 +#define GETMOUSEWHEEL_X_AXIS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMOUSEWHEEL_Y_AXIS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_MouseWheelX 249 +#define FN_MouseWheelY 250 +#define FN_GetGlobalMouse 251 +#define GETGLOBALMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETGLOBALMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETGLOBALMOUSE_MB1 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETGLOBALMOUSE_MB2 num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETGLOBALMOUSE_MB3 num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_GlobalMouseX 252 +#define FN_GlobalMouseY 253 +#define FN_WarpMouse 254 +#define WARPMOUSE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WARPMOUSE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_WarpMouseGlobal 255 +#define WARPMOUSEGLOBAL_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define WARPMOUSEGLOBAL_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetMouseZone 256 +#define SETMOUSEZONE_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMOUSEZONE_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMOUSEZONE_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETMOUSEZONE_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_ClearMouseZone 257 +#define FN_SoundFromBuffer 258 +#define SOUNDFROMBUFFER_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SOUNDFROMBUFFER_BUFFER_SIZE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SOUNDFROMBUFFER_VOL num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_LoadSound 259 +#define LOADSOUND_SND_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_LoadMusic 260 +#define LOADMUSIC_MUSIC_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_PlaySound 261 +#define PLAYSOUND_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define PLAYSOUND_CHANNEL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define PLAYSOUND_LOOPS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_PlaySoundTimed 262 +#define PLAYSOUNDTIMED_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define PLAYSOUNDTIMED_CHANNEL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define PLAYSOUNDTIMED_LOOPS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define PLAYSOUNDTIMED_MS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_PlayMusic 263 +#define PLAYMUSIC_MLOOPS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_PauseSound 264 +#define PAUSESOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ResumeSound 265 +#define RESUMESOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_PauseMusic 266 +#define FN_ResumeMusic 267 +#define FN_DeleteSound 268 +#define DELETESOUND_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteMusic 269 +#define FN_FadeMusicIn 270 +#define FADEMUSICIN_FADE_TIME num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FADEMUSICIN_LOOPS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_FadeMusicOut 271 +#define FADEMUSICOUT_FADE_TIME num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_MusicExists 272 +#define FN_SetMusicVolume 273 +#define SETMUSICVOLUME_VOL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetMusicVolume 274 +#define FN_SetMusicPosition 275 +#define SETMUSICPOSITION_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetMusicPosition 276 +#define FN_RewindMusic 277 +#define FN_SetSoundChannels 278 +#define SETSOUNDCHANNELS_MAX_CHANNELS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumSoundChannels 279 +#define FN_SoundIsEnabled 280 +#define FN_SoundExists 281 +#define SOUNDEXISTS_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetChannelVolume 282 +#define SETCHANNELVOLUME_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCHANNELVOLUME_VOL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetChannelVolume 283 +#define GETCHANNELVOLUME_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetSoundVolume 284 +#define SETSOUNDVOLUME_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETSOUNDVOLUME_VOL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetSoundVolume 285 +#define GETSOUNDVOLUME_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_StopMusic 286 +#define FN_StopSound 287 +#define STOPSOUND_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetChannelPanning 288 +#define SETCHANNELPANNING_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCHANNELPANNING_LEFT_VALUE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCHANNELPANNING_RIGHT_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetChannelDistance 289 +#define SETCHANNELDISTANCE_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCHANNELDISTANCE_DIST_VALUE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ChannelIsPlaying 290 +#define CHANNELISPLAYING_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ChannelIsPaused 291 +#define CHANNELISPAUSED_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_QueryAudioSpec 292 +#define QUERYAUDIOSPEC_FREQ num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define QUERYAUDIOSPEC_FORMAT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define QUERYAUDIOSPEC_CHANNELS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_MusicIsPlaying 293 +#define FN_SetChannelSpacePosition 294 +#define SETCHANNELSPACEPOSITION_CHANNEL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCHANNELSPACEPOSITION_ANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCHANNELSPACEPOSITION_DISTANCE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_NumJoysticks 295 +#define FN_NumJoyAxes 296 +#define NUMJOYAXES_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumJoyButtons 297 +#define NUMJOYBUTTONS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumJoyHats 298 +#define NUMJOYHATS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumJoyTrackBalls 299 +#define NUMJOYTRACKBALLS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_JoyAxis 300 +#define JOYAXIS_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define JOYAXIS_JOY_AXIS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_JoyButton 301 +#define JOYBUTTON_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define JOYBUTTON_JOY_BUTTON num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_JoyHat 302 +#define JOYHAT_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define JOYHAT_JOY_HAT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetJoyTrackBall 303 +#define GETJOYTRACKBALL_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETJOYTRACKBALL_BALL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETJOYTRACKBALL_DX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETJOYTRACKBALL_DY num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_JoyName$ 304 +#define JOYNAME$_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_JoystickIsConnected 305 +#define JOYSTICKISCONNECTED_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_JoyRumblePlay 306 +#define JOYRUMBLEPLAY_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define JOYRUMBLEPLAY_STRENGTH num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define JOYRUMBLEPLAY_DURATION num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_JoyRumbleStop 307 +#define JOYRUMBLESTOP_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_JoystickIsHaptic 308 +#define JOYSTICKISHAPTIC_JOY_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_LoadFont 309 +#define LOADFONT_FNT_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define LOADFONT_FONT_SIZE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteFont 310 +#define DELETEFONT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_FontExists 311 +#define FONTEXISTS_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetFont 312 +#define SETFONT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DrawText 313 +#define DRAWTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define DRAWTEXT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DRAWTEXT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_RenderText 314 +#define RENDERTEXT_SLOT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RENDERTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_GetTextSize 315 +#define GETTEXTSIZE_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define GETTEXTSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTEXTSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetTextWidth 316 +#define GETTEXTWIDTH_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_GetTextHeight 317 +#define GETTEXTHEIGHT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_TouchPressure 318 +#define FN_GetTouch 319 +#define GETTOUCH_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTOUCH_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTOUCH_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETTOUCH_DX num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETTOUCH_DY num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_GetMultiTouch 320 +#define GETMULTITOUCH_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMULTITOUCH_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMULTITOUCH_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETMULTITOUCH_FINGERS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETMULTITOUCH_DIST num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETMULTITOUCH_THETA num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_GetTouchFinger 321 +#define GETTOUCHFINGER_FINGER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTOUCHFINGER_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTOUCHFINGER_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETTOUCHFINGER_PRESSURE num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_NumFingers 322 +#define FN_GetAccel 323 +#define GETACCEL_ACCEL_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACCEL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACCEL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACCEL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_AccelName$ 324 +#define ACCELNAME$_ACCEL_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumAccels 325 +#define FN_GetGyro 326 +#define GETGYRO_GYRO_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETGYRO_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETGYRO_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETGYRO_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GyroName$ 327 +#define GYRONAME$_GYRO_NUM num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumGyros 328 +#define FN_CheckSockets 329 +#define CHECKSOCKETS_TIMEOUT_MS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_SocketReady 330 +#define TCP_SOCKETREADY_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_UDP_SocketReady 331 +#define UDP_SOCKETREADY_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_OpenSocket 332 +#define TCP_OPENSOCKET_HOST$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define TCP_OPENSOCKET_PORT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_CloseSocket 333 +#define TCP_CLOSESOCKET_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_RemoteHost 334 +#define TCP_REMOTEHOST_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_RemotePort 335 +#define TCP_REMOTEPORT_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_TCP_GetData 336 +#define TCP_GETDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TCP_GETDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define TCP_GETDATA_NUMBYTES num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_TCP_SendData 337 +#define TCP_SENDDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TCP_SENDDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_TCP_AcceptSocket 338 +#define TCP_ACCEPTSOCKET_SERVER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TCP_ACCEPTSOCKET_CLIENT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_UDP_OpenSocket 339 +#define UDP_OPENSOCKET_PORT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_UDP_CloseSocket 340 +#define UDP_CLOSESOCKET_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_UDP_GetData 341 +#define UDP_GETDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define UDP_GETDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define UDP_GETDATA_HOST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define UDP_GETDATA_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_UDP_Length 342 +#define FN_UDP_MaxLength 343 +#define FN_UDP_RemoteHost$ 344 +#define UDP_REMOTEHOST$_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_UDP_RemotePort 345 +#define UDP_REMOTEPORT_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_UDP_SendData 346 +#define UDP_SENDDATA_SOCKET num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define UDP_SENDDATA_SDATA$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define UDP_SENDDATA_HOST$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define UDP_SENDDATA_PORT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_LoadVideo 347 +#define LOADVIDEO_VID$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_PlayVideo 348 +#define PLAYVIDEO_VLOOPS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_PauseVideo 349 +#define FN_StopVideo 350 +#define FN_SetVideoPosition 351 +#define SETVIDEOPOSITION_POS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ResumeVideo 352 +#define FN_GetVideoPosition 353 +#define FN_DeleteVideo 354 +#define FN_VideoIsPlaying 355 +#define FN_VideoEnd 356 +#define FN_GetVideoStats 357 +#define GETVIDEOSTATS_VFILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define GETVIDEOSTATS_VLEN num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETVIDEOSTATS_VFPS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETVIDEOSTATS_FRAME_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETVIDEOSTATS_FRAME_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetVideoDrawRect 358 +#define SETVIDEODRAWRECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETVIDEODRAWRECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETVIDEODRAWRECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETVIDEODRAWRECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetVideoDrawRect 359 +#define GETVIDEODRAWRECT_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETVIDEODRAWRECT_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETVIDEODRAWRECT_W num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETVIDEODRAWRECT_H num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetVideoSize 360 +#define GETVIDEOSIZE_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETVIDEOSIZE_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_VideoExists 361 +#define FN_SetVideoAlpha 362 +#define SETVIDEOALPHA_A num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetVideoVolume 363 +#define SETVIDEOVOLUME_VOL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetVideoVolume 364 +#define GETVIDEOVOLUME_VOL num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_System 365 +#define SYSTEM_CMD$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_OS$ 366 +#define FN_Command$ 367 +#define COMMAND$_ARG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_NumCommands 368 +#define FN_Env$ 369 +#define ENV$_V$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_SetEnv 370 +#define SETENV_VAR$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define SETENV_VALUE$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_PrefPath$ 371 +#define PREFPATH$_ORG_NAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define PREFPATH$_APP_NAME$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_Android_GetExternalStoragePath$ 372 +#define FN_Android_GetExternalStorageState 373 +#define FN_Android_GetInternalStoragePath$ 374 +#define FN_Android_JNI_Message$ 375 +#define ANDROID_JNI_MESSAGE$_ARG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_Runtime_Utility_Message$ 376 +#define RUNTIME_UTILITY_MESSAGE$_ARG$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_GetDesktopDisplayMode 377 +#define GETDESKTOPDISPLAYMODE_INDEX num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETDESKTOPDISPLAYMODE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETDESKTOPDISPLAYMODE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETDESKTOPDISPLAYMODE_FREQ num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetPowerInfo 378 +#define GETPOWERINFO_STATUS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPOWERINFO_SECS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPOWERINFO_PCT num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_EvalJS$ 379 +#define EVALJS$_JS_CODE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_SystemReturnStdOut$ 380 +#define SYSTEMRETURNSTDOUT$_CMD$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_OpenURL 381 +#define OPENURL_URL$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_MessageBox 382 +#define MESSAGEBOX_TITLE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define MESSAGEBOX_MSG$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_Runtime$ 383 +#define FN_NumCPUs 384 +#define FN_DimMatrix 385 +#define DIMMATRIX_M_ROWS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DIMMATRIX_M_COLS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_DeleteMatrix 386 +#define DELETEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_AddMatrix 387 +#define ADDMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ADDMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ADDMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_AugmentMatrix 388 +#define AUGMENTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define AUGMENTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define AUGMENTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_CopyMatrix 389 +#define COPYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COPYMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_InsertMatrixColumns 390 +#define INSERTMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define INSERTMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define INSERTMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_InsertMatrixRows 391 +#define INSERTMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define INSERTMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define INSERTMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_MultiplyMatrix 392 +#define MULTIPLYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MULTIPLYMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define MULTIPLYMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_CubeMatrix 393 +#define CUBEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CUBEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_DeleteMatrixColumns 394 +#define DELETEMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DELETEMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DELETEMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_DeleteMatrixRows 395 +#define DELETEMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define DELETEMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define DELETEMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ClearMatrix 396 +#define CLEARMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ClearMatrixColumns 397 +#define CLEARMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CLEARMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CLEARMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ClearMatrixRows 398 +#define CLEARMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CLEARMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CLEARMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_FillMatrix 399 +#define FILLMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FILLMATRIX_V num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_FillMatrixColumns 400 +#define FILLMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FILLMATRIXCOLUMNS_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FILLMATRIXCOLUMNS_NUM_COLS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FILLMATRIXCOLUMNS_V num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_FillMatrixRows 401 +#define FILLMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FILLMATRIXROWS_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FILLMATRIXROWS_NUM_ROWS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FILLMATRIXROWS_V num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_CopyMatrixColumns 402 +#define COPYMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COPYMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COPYMATRIXCOLUMNS_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COPYMATRIXCOLUMNS_NUM_COLS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_CopyMatrixRows 403 +#define COPYMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COPYMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COPYMATRIXROWS_R num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COPYMATRIXROWS_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_IdentityMatrix 404 +#define IDENTITYMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define IDENTITYMATRIX_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SolveMatrix 405 +#define SOLVEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SOLVEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SOLVEMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_IsEqualMatrix 406 +#define ISEQUALMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ISEQUALMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ISEQUALMATRIX_TOLERANCE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_Determinant 407 +#define DETERMINANT_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_AdjointMatrix 408 +#define ADJOINTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ADJOINTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_InvertMatrix 409 +#define INVERTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define INVERTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_MatrixFromBuffer 410 +#define MATRIXFROMBUFFER_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MATRIXFROMBUFFER_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define MATRIXFROMBUFFER_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define MATRIXFROMBUFFER_BUFFER num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetMatrix 411 +#define GETMATRIX_BUFFER num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATRIX_MA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_RandomizeMatrix 412 +#define RANDOMIZEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define RANDOMIZEMATRIX_VMIN num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define RANDOMIZEMATRIX_VMAX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_MatrixValue 413 +#define MATRIXVALUE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define MATRIXVALUE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define MATRIXVALUE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetMatrixValue 414 +#define SETMATRIXVALUE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATRIXVALUE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATRIXVALUE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETMATRIXVALUE_V num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_ScalarMatrix 415 +#define SCALARMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SCALARMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SCALARMATRIX_S_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ScalarMatrixColumns 416 +#define SCALARMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SCALARMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SCALARMATRIXCOLUMNS_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SCALARMATRIXCOLUMNS_NUM_COLS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SCALARMATRIXCOLUMNS_S_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_ScalarMatrixRows 417 +#define SCALARMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SCALARMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SCALARMATRIXROWS_R num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SCALARMATRIXROWS_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SCALARMATRIXROWS_S_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_SquareMatrix 418 +#define SQUAREMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SQUAREMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_CofactorMatrix 419 +#define COFACTORMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COFACTORMATRIX_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COFACTORMATRIX_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SubtractMatrix 420 +#define SUBTRACTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SUBTRACTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SUBTRACTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SwapMatrix 421 +#define SWAPMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SWAPMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SwapMatrixColumn 422 +#define SWAPMATRIXCOLUMN_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SWAPMATRIXCOLUMN_C1 num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SWAPMATRIXCOLUMN_C2 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SwapMatrixRow 423 +#define SWAPMATRIXROW_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SWAPMATRIXROW_R1 num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SWAPMATRIXROW_R2 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_TransposeMatrix 424 +#define TRANSPOSEMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TRANSPOSEMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_UnAugmentMatrix 425 +#define UNAUGMENTMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define UNAUGMENTMATRIX_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define UNAUGMENTMATRIX_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ZeroMatrix 426 +#define ZEROMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetMatrixSize 427 +#define GETMATRIXSIZE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATRIXSIZE_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMATRIXSIZE_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_IncrementMatrixRows 428 #define INCREMENTMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] #define INCREMENTMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] #define INCREMENTMATRIXROWS_R num_var[2].nid_value.value[ num_var[2].byref_offset ] #define INCREMENTMATRIXROWS_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] #define INCREMENTMATRIXROWS_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_IncrementMatrixColumns 468 +#define FN_IncrementMatrixColumns 429 #define INCREMENTMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] #define INCREMENTMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] #define INCREMENTMATRIXCOLUMNS_C num_var[2].nid_value.value[ num_var[2].byref_offset ] #define INCREMENTMATRIXCOLUMNS_NUM_COLS num_var[3].nid_value.value[ num_var[3].byref_offset ] #define INCREMENTMATRIXCOLUMNS_VALUE num_var[4].nid_value.value[ num_var[4].byref_offset ] -#define FN_JoinMatrixRows 469 +#define FN_JoinMatrixRows 430 #define JOINMATRIXROWS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] #define JOINMATRIXROWS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] #define JOINMATRIXROWS_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_JoinMatrixColumns 470 +#define FN_JoinMatrixColumns 431 #define JOINMATRIXCOLUMNS_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] #define JOINMATRIXCOLUMNS_MB num_var[1].nid_value.value[ num_var[1].byref_offset ] #define JOINMATRIXCOLUMNS_MC num_var[2].nid_value.value[ num_var[2].byref_offset ] -#define FN_TypeArrayDim 471 -#define TYPEARRAYDIM_ID usr_var[0].var_ref -#define FN_TypeArraySize 472 -#define TYPEARRAYSIZE_ID usr_var[0].var_ref -#define TYPEARRAYSIZE_ARRAY_DIM num_var[0].nid_value.value[ num_var[0].byref_offset ] -#define FN_TypeArrayCopy 473 -#define TYPEARRAYCOPY_SRC usr_var[0].var_ref -#define TYPEARRAYCOPY_DST usr_var[1].var_ref -#define FN_TypeArrayFill 474 -#define TYPEARRAYFILL_SRC usr_var[0].var_ref -#define TYPEARRAYFILL_FDATA usr_var[1].var_ref->uid_value[0] +#define FN_ClipMatrix 432 +#define CLIPMATRIX_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CLIPMATRIX_R num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CLIPMATRIX_C num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CLIPMATRIX_NUM_ROWS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define CLIPMATRIX_NUM_COLS num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define CLIPMATRIX_MB num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_SetMatrixTranslation 433 +#define SETMATRIXTRANSLATION_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATRIXTRANSLATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATRIXTRANSLATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETMATRIXTRANSLATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetMatrixRotation 434 +#define SETMATRIXROTATION_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATRIXROTATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATRIXROTATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETMATRIXROTATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetMatrixScale 435 +#define SETMATRIXSCALE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATRIXSCALE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATRIXSCALE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETMATRIXSCALE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetMatrixTranslation 436 +#define GETMATRIXTRANSLATION_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATRIXTRANSLATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMATRIXTRANSLATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETMATRIXTRANSLATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetMatrixRotation 437 +#define GETMATRIXROTATION_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATRIXROTATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMATRIXROTATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETMATRIXROTATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetMatrixScale 438 +#define GETMATRIXSCALE_MA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATRIXSCALE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETMATRIXSCALE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETMATRIXSCALE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_ClipboardText$ 439 +#define FN_SetClipboardText 440 +#define SETCLIPBOARDTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_HasClipboardText 441 +#define FN_ReadInput_Start 442 +#define FN_ReadInput_Stop 443 +#define FN_ReadInput_Text$ 444 +#define FN_ReadInput_SetText 445 +#define READINPUT_SETTEXT_TXT$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_ReadInput_ToggleBackspace 446 +#define READINPUT_TOGGLEBACKSPACE_FLAG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateSprite 447 +#define CREATESPRITE_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_DeleteSprite 448 +#define DELETESPRITE_SPRITE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetSpritePosition 449 +#define SETSPRITEPOSITION_SPRITE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETSPRITEPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETSPRITEPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_LoadMesh 450 +#define LOADMESH_MESH_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_DeleteMesh 451 +#define DELETEMESH_MESH num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateMesh 452 +#define FN_AddMeshBuffer 453 +#define ADDMESHBUFFER_MESH num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ADDMESHBUFFER_VERTEX_COUNT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ADDMESHBUFFER_VERTEX_DATA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ADDMESHBUFFER_NORMAL_DATA num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define ADDMESHBUFFER_UV_DATA num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define ADDMESHBUFFER_INDEX_COUNT num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define ADDMESHBUFFER_INDEX_DATA num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_LoadMeshFromArchive 454 +#define LOADMESHFROMARCHIVE_ARCHIVE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define LOADMESHFROMARCHIVE_MESH_FILE$ str_var[1].sid_value.value[ str_var[1].byref_offset ] +#define FN_CreateMeshActor 455 +#define CREATEMESHACTOR_MESH num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateMeshOctreeActor 456 +#define CREATEMESHOCTREEACTOR_MESH num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateCubeActor 457 +#define CREATECUBEACTOR_CUBE_SIZE num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateSphereActor 458 +#define CREATESPHEREACTOR_RADIUS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_CreateWaterPlaneActor 459 +#define CREATEWATERPLANEACTOR_W num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEWATERPLANEACTOR_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_CreateLightActor 460 +#define FN_CreateBillboardActor 461 +#define FN_CreateTerrainActor 462 +#define CREATETERRAINACTOR_HMAP_FILE$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_DeleteActor 463 +#define DELETEACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorTransform 464 +#define GETACTORTRANSFORM_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORTRANSFORM_MATRIX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetActorPosition 465 +#define SETACTORPOSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORPOSITION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_TranslateActor 466 +#define TRANSLATEACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TRANSLATEACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define TRANSLATEACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define TRANSLATEACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_TranslateActorWorld 467 +#define TRANSLATEACTORWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TRANSLATEACTORWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define TRANSLATEACTORWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define TRANSLATEACTORWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetActorPosition 468 +#define GETACTORPOSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORPOSITION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetActorScale 469 +#define SETACTORSCALE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORSCALE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORSCALE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORSCALE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_ScaleActor 470 +#define SCALEACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SCALEACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SCALEACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SCALEACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetActorScale 471 +#define GETACTORSCALE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORSCALE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORSCALE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORSCALE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetActorRotation 472 +#define SETACTORROTATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORROTATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORROTATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORROTATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_RotateActor 473 +#define ROTATEACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ROTATEACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ROTATEACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ROTATEACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetActorRotation 474 +#define GETACTORROTATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORROTATION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORROTATION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORROTATION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetActorVisible 475 +#define SETACTORVISIBLE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORVISIBLE_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ActorIsVisible 476 +#define ACTORISVISIBLE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetActorAutoCulling 477 +#define SETACTORAUTOCULLING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORAUTOCULLING_CULL_TYPE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetActorAutoCulling 478 +#define GETACTORAUTOCULLING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_AddActorShadow 479 +#define ADDACTORSHADOW_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_RemoveActorShadow 480 +#define REMOVEACTORSHADOW_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetGravity3D 481 +#define SETGRAVITY3D_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETGRAVITY3D_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETGRAVITY3D_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetGravity3D 482 +#define GETGRAVITY3D_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETGRAVITY3D_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETGRAVITY3D_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetActorCollisionShape 483 +#define SETACTORCOLLISIONSHAPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORCOLLISIONSHAPE_SHAPE_TYPE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORCOLLISIONSHAPE_MASS num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetActorCollisionShape 484 +#define GETACTORCOLLISIONSHAPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetActorSolid 485 +#define SETACTORSOLID_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORSOLID_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_ActorIsSolid 486 +#define ACTORISSOLID_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorCollision 487 +#define GETACTORCOLLISION_ACTOR1 num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORCOLLISION_ACTOR2 num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetActorGravity 488 +#define SETACTORGRAVITY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORGRAVITY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORGRAVITY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORGRAVITY_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetActorGravity 489 +#define GETACTORGRAVITY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORGRAVITY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORGRAVITY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORGRAVITY_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorDamping 490 +#define SETACTORDAMPING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORDAMPING_LIN_DAMPING num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORDAMPING_ANG_DAMPING num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getActorLinearDamping 491 +#define GETACTORLINEARDAMPING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getActorAngularDamping 492 +#define GETACTORANGULARDAMPING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getActorLinearSleepThreshold 493 +#define GETACTORLINEARSLEEPTHRESHOLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getActorAngularSleepThreshold 494 +#define GETACTORANGULARSLEEPTHRESHOLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_applyActorDamping 495 +#define APPLYACTORDAMPING_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORDAMPING_TIMESTEP num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setActorMassProperties 496 +#define SETACTORMASSPROPERTIES_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMASSPROPERTIES_MASS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORMASSPROPERTIES_INERTIA_X num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORMASSPROPERTIES_INERTIA_Y num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SETACTORMASSPROPERTIES_INERTIA_Z num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_getActorLinearFactor 497 +#define GETACTORLINEARFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORLINEARFACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORLINEARFACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORLINEARFACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorLinearFactor 498 +#define SETACTORLINEARFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORLINEARFACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORLINEARFACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORLINEARFACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorInverseMass 499 +#define GETACTORINVERSEMASS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_integrateActorVelocities 500 +#define INTEGRATEACTORVELOCITIES_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_applyActorCentralForceLocal 501 +#define APPLYACTORCENTRALFORCELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORCENTRALFORCELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORCENTRALFORCELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORCENTRALFORCELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorCentralForceWorld 502 +#define APPLYACTORCENTRALFORCEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORCENTRALFORCEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORCENTRALFORCEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORCENTRALFORCEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorTotalForce 503 +#define GETACTORTOTALFORCE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORTOTALFORCE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORTOTALFORCE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORTOTALFORCE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorTotalTorque 504 +#define GETACTORTOTALTORQUE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORTOTALTORQUE_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORTOTALTORQUE_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORTOTALTORQUE_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorInverseInertiaDiagLocal 505 +#define GETACTORINVERSEINERTIADIAGLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORINVERSEINERTIADIAGLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORINVERSEINERTIADIAGLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORINVERSEINERTIADIAGLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorInverseInertiaDiagLocal 506 +#define SETACTORINVERSEINERTIADIAGLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORINVERSEINERTIADIAGLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORINVERSEINERTIADIAGLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORINVERSEINERTIADIAGLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorSleepThresholds 507 +#define SETACTORSLEEPTHRESHOLDS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORSLEEPTHRESHOLDS_LINEAR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORSLEEPTHRESHOLDS_ANGULAR num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_applyActorTorqueLocal 508 +#define APPLYACTORTORQUELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORTORQUELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORTORQUELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORTORQUELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorTorqueWorld 509 +#define APPLYACTORTORQUEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORTORQUEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORTORQUEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORTORQUEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorForceLocal 510 +#define APPLYACTORFORCELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORFORCELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORFORCELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORFORCELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define APPLYACTORFORCELOCAL_REL_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define APPLYACTORFORCELOCAL_REL_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define APPLYACTORFORCELOCAL_REL_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_applyActorForceWorld 511 +#define APPLYACTORFORCEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORFORCEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORFORCEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORFORCEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define APPLYACTORFORCEWORLD_REL_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define APPLYACTORFORCEWORLD_REL_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define APPLYACTORFORCEWORLD_REL_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_applyActorCentralImpulseLocal 512 +#define APPLYACTORCENTRALIMPULSELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORCENTRALIMPULSELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORCENTRALIMPULSELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORCENTRALIMPULSELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorCentralImpulseWorld 513 +#define APPLYACTORCENTRALIMPULSEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORCENTRALIMPULSEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORCENTRALIMPULSEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORCENTRALIMPULSEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorTorqueImpulseLocal 514 +#define APPLYACTORTORQUEIMPULSELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORTORQUEIMPULSELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORTORQUEIMPULSELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORTORQUEIMPULSELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorTorqueImpulseWorld 515 +#define APPLYACTORTORQUEIMPULSEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORTORQUEIMPULSEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORTORQUEIMPULSEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORTORQUEIMPULSEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_applyActorImpulseLocal 516 +#define APPLYACTORIMPULSELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORIMPULSELOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORIMPULSELOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORIMPULSELOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define APPLYACTORIMPULSELOCAL_REL_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define APPLYACTORIMPULSELOCAL_REL_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define APPLYACTORIMPULSELOCAL_REL_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_applyActorImpulseWorld 517 +#define APPLYACTORIMPULSEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define APPLYACTORIMPULSEWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define APPLYACTORIMPULSEWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define APPLYACTORIMPULSEWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define APPLYACTORIMPULSEWORLD_REL_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define APPLYACTORIMPULSEWORLD_REL_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define APPLYACTORIMPULSEWORLD_REL_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_clearActorForces 518 +#define CLEARACTORFORCES_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_updateActorInertiaTensor 519 +#define UPDATEACTORINERTIATENSOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getActorCOMPosition 520 +#define GETACTORCOMPOSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORCOMPOSITION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORCOMPOSITION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORCOMPOSITION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorRotationQ 521 +#define GETACTORROTATIONQ_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORROTATIONQ_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORROTATIONQ_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORROTATIONQ_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETACTORROTATIONQ_W num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_getActorLinearVelocity 522 +#define GETACTORLINEARVELOCITY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORLINEARVELOCITY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORLINEARVELOCITY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORLINEARVELOCITY_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorAngularVelocity 523 +#define GETACTORANGULARVELOCITY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORANGULARVELOCITY_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORANGULARVELOCITY_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORANGULARVELOCITY_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorLinearVelocityLocal 524 +#define SETACTORLINEARVELOCITYLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORLINEARVELOCITYLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORLINEARVELOCITYLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORLINEARVELOCITYLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorLinearVelocityWorld 525 +#define SETACTORLINEARVELOCITYWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORLINEARVELOCITYWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORLINEARVELOCITYWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORLINEARVELOCITYWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorAngularVelocityLocal 526 +#define SETACTORANGULARVELOCITYLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORANGULARVELOCITYLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORANGULARVELOCITYLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORANGULARVELOCITYLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorAngularVelocityWorld 527 +#define SETACTORANGULARVELOCITYWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORANGULARVELOCITYWORLD_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORANGULARVELOCITYWORLD_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORANGULARVELOCITYWORLD_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorLocalPointVelocity 528 +#define GETACTORLOCALPOINTVELOCITY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_REL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_REL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_REL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETACTORLOCALPOINTVELOCITY_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_getActorLinearVelocityLocal 529 +#define GETACTORLINEARVELOCITYLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORLINEARVELOCITYLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORLINEARVELOCITYLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORLINEARVELOCITYLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorAngularVelocityLocal 530 +#define GETACTORANGULARVELOCITYLOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORANGULARVELOCITYLOCAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORANGULARVELOCITYLOCAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORANGULARVELOCITYLOCAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorAABB 531 +#define GETACTORAABB_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORAABB_MIN_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORAABB_MIN_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORAABB_MIN_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETACTORAABB_MAX_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETACTORAABB_MAX_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETACTORAABB_MAX_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_computeActorImpulseDenominator 532 +#define COMPUTEACTORIMPULSEDENOMINATOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_POS_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_POS_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_POS_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_computeActorAngularImpulseDenominator 533 +#define COMPUTEACTORANGULARIMPULSEDENOMINATOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COMPUTEACTORANGULARIMPULSEDENOMINATOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COMPUTEACTORANGULARIMPULSEDENOMINATOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COMPUTEACTORANGULARIMPULSEDENOMINATOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setActorAngularFactor 534 +#define SETACTORANGULARFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORANGULARFACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORANGULARFACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETACTORANGULARFACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getActorAngularFactor 535 +#define GETACTORANGULARFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORANGULARFACTOR_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORANGULARFACTOR_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORANGULARFACTOR_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_computeActorGyroImpulseLocal 536 +#define COMPUTEACTORGYROIMPULSELOCAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COMPUTEACTORGYROIMPULSELOCAL_DT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COMPUTEACTORGYROIMPULSELOCAL_X num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COMPUTEACTORGYROIMPULSELOCAL_Y num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define COMPUTEACTORGYROIMPULSELOCAL_Z num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_computeActorGyroImpulseWorld 537 +#define COMPUTEACTORGYROIMPULSEWORLD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COMPUTEACTORGYROIMPULSEWORLD_DT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define COMPUTEACTORGYROIMPULSEWORLD_X num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define COMPUTEACTORGYROIMPULSEWORLD_Y num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define COMPUTEACTORGYROIMPULSEWORLD_Z num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_getActorLocalInertia 538 +#define GETACTORLOCALINERTIA_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORLOCALINERTIA_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORLOCALINERTIA_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETACTORLOCALINERTIA_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_createPointConstraint 539 +#define CREATEPOINTCONSTRAINT_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEPOINTCONSTRAINT_PXA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEPOINTCONSTRAINT_PYA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATEPOINTCONSTRAINT_PZA num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_createPointConstraintEx 540 +#define CREATEPOINTCONSTRAINTEX_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_ACTORB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PXA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PYA num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PZA num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PXB num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PYB num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define CREATEPOINTCONSTRAINTEX_PZB num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define FN_setConstraintPivotA 541 +#define SETCONSTRAINTPIVOTA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTPIVOTA_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCONSTRAINTPIVOTA_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETCONSTRAINTPIVOTA_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setConstraintPivotB 542 +#define SETCONSTRAINTPIVOTB_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTPIVOTB_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCONSTRAINTPIVOTB_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETCONSTRAINTPIVOTB_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_createHingeConstraint 543 +#define CREATEHINGECONSTRAINT_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEHINGECONSTRAINT_PXA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEHINGECONSTRAINT_PYA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATEHINGECONSTRAINT_PZA num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define CREATEHINGECONSTRAINT_AXA num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define CREATEHINGECONSTRAINT_AYA num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define CREATEHINGECONSTRAINT_AZA num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_createHingeConstraintEx 544 +#define CREATEHINGECONSTRAINTEX_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATEHINGECONSTRAINTEX_ACTORB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PXA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PYA num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PZA num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PXB num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PYB num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define CREATEHINGECONSTRAINTEX_PZB num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AXA num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AYA num_var[9].nid_value.value[ num_var[9].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AZA num_var[10].nid_value.value[ num_var[10].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AXB num_var[11].nid_value.value[ num_var[11].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AYB num_var[12].nid_value.value[ num_var[12].byref_offset ] +#define CREATEHINGECONSTRAINTEX_AZB num_var[13].nid_value.value[ num_var[13].byref_offset ] +#define FN_createSlideConstraint 545 +#define CREATESLIDECONSTRAINT_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATESLIDECONSTRAINT_FRAMEINB_MATRIX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATESLIDECONSTRAINT_USELINEARREFERENCEFRAMEA num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_createSlideConstraintEx 546 +#define CREATESLIDECONSTRAINTEX_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATESLIDECONSTRAINTEX_ACTORB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATESLIDECONSTRAINTEX_FRAMEINA_MATRIX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATESLIDECONSTRAINTEX_FRAMEINB_MATRIX num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define CREATESLIDECONSTRAINTEX_USELINEARREFERENCEFRAMEA num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define FN_createConeConstraint 547 +#define CREATECONECONSTRAINT_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATECONECONSTRAINT_RBAFRAME_MATRIX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_createConeConstraintEx 548 +#define CREATECONECONSTRAINTEX_ACTORA num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define CREATECONECONSTRAINTEX_ACTORB num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define CREATECONECONSTRAINTEX_RBAFRAME_MATRIX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define CREATECONECONSTRAINTEX_RBBFRAME_MATRIX num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_deleteConstraint 549 +#define DELETECONSTRAINT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintFrameOffsetA 550 +#define GETCONSTRAINTFRAMEOFFSETA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_RX num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_RY num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETA_RZ num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_getConstraintFrameOffsetB 551 +#define GETCONSTRAINTFRAMEOFFSETB_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_RX num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_RY num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETCONSTRAINTFRAMEOFFSETB_RZ num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_useConstraintFrameOffset 552 +#define USECONSTRAINTFRAMEOFFSET_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define USECONSTRAINTFRAMEOFFSET_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getHingeAngle 553 +#define GETHINGEANGLE_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getHingeAngleEx 554 +#define GETHINGEANGLEEX_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETHINGEANGLEEX_T_MATRIXA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETHINGEANGLEEX_T_MATRIXB num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getConstraintBreakingImpulseThreshold 555 +#define GETCONSTRAINTBREAKINGIMPULSETHRESHOLD_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintAFrame 556 +#define GETCONSTRAINTAFRAME_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTAFRAME_MA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getConstraintBFrame 557 +#define GETCONSTRAINTBFRAME_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTBFRAME_MA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintAxis 558 +#define SETCONSTRAINTAXIS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTAXIS_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCONSTRAINTAXIS_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETCONSTRAINTAXIS_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setConstraintBreakingImpulseThreshold 559 +#define SETCONSTRAINTBREAKINGIMPULSETHRESHOLD_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTBREAKINGIMPULSETHRESHOLD_THRESHOLD num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintFrames 560 +#define SETCONSTRAINTFRAMES_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTFRAMES_FRAMEA_MATRIX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCONSTRAINTFRAMES_FRAMEB_MATRIX num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setHingeLimit 561 +#define SETHINGELIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETHINGELIMIT_LOW num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETHINGELIMIT_HIGH num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETHINGELIMIT_SOFTNESS num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SETHINGELIMIT_BIAS_FACTOR num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define SETHINGELIMIT_RELAXATION_FACTOR num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_setConeLimit 562 +#define SETCONELIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONELIMIT_SWINGSPAN1 num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCONELIMIT_SWINGSPAN2 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETCONELIMIT_TWISTSPAN num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SETCONELIMIT_SOFTNESS num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define SETCONELIMIT_BIAS_FACTOR num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define SETCONELIMIT_RELAXATION_FACTOR num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_getConstraintLimitBiasFactor 563 +#define GETCONSTRAINTLIMITBIASFACTOR_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getLimitRelaxationFactor 564 +#define GETLIMITRELAXATIONFACTOR_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLimitSign 565 +#define GETCONSTRAINTLIMITSIGN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getHingeSolveLimit 566 +#define GETHINGESOLVELIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_useHingeReferenceFrameA 567 +#define USEHINGEREFERENCEFRAMEA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define USEHINGEREFERENCEFRAMEA_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getConstraintAppliedImpulse 568 +#define GETCONSTRAINTAPPLIEDIMPULSE_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintFixedActor 569 +#define GETCONSTRAINTFIXEDACTOR_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintPivotA 570 +#define GETCONSTRAINTPIVOTA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTPIVOTA_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTPIVOTA_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTPIVOTA_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getConstraintPivotB 571 +#define GETCONSTRAINTPIVOTB_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTPIVOTB_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTPIVOTB_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTPIVOTB_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getConstraintActorA 572 +#define GETCONSTRAINTACTORA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintActorB 573 +#define GETCONSTRAINTACTORB_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setConstraintSolverIterations 574 +#define SETCONSTRAINTSOLVERITERATIONS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOLVERITERATIONS_NUM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getConstraintBiasFactor 575 +#define GETCONSTRAINTBIASFACTOR_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDamping 576 +#define GETCONSTRAINTDAMPING_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintFixThresh 577 +#define GETCONSTRAINTFIXTHRESH_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLimit 578 +#define GETCONSTRAINTLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTLIMIT_LIMIT_INDEX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getConstraintLimitSoftness 579 +#define GETCONSTRAINTLIMITSOFTNESS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolverIterations 580 +#define GETCONSTRAINTSOLVERITERATIONS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintAnglePoint 581 +#define GETCONSTRAINTANGLEPOINT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTANGLEPOINT_ANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTANGLEPOINT_C_LEN num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTANGLEPOINT_X num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETCONSTRAINTANGLEPOINT_Y num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETCONSTRAINTANGLEPOINT_Z num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_getConstraintAngularOnly 582 +#define GETCONSTRAINTANGULARONLY_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolveSwingLimit 583 +#define GETCONSTRAINTSOLVESWINGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolveTwistLimit 584 +#define GETCONSTRAINTSOLVETWISTLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolveLimit 585 +#define GETCONSTRAINTSOLVELIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSwingSpan1 586 +#define GETCONSTRAINTSWINGSPAN1_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSwingSpan2 587 +#define GETCONSTRAINTSWINGSPAN2_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintTwistAngle 588 +#define GETCONSTRAINTTWISTANGLE_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintTwistLimitSign 589 +#define GETCONSTRAINTTWISTLIMITSIGN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintTwistSpan 590 +#define GETCONSTRAINTTWISTSPAN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setConstraintAngularOnly 591 +#define SETCONSTRAINTANGULARONLY_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTANGULARONLY_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDamping 592 +#define SETCONSTRAINTDAMPING_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPING_DAMPING num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintFixThresh 593 +#define SETCONSTRAINTFIXTHRESH_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTFIXTHRESH_FIXTHRESH num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getConstraintAnchorA 594 +#define GETCONSTRAINTANCHORA_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTANCHORA_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTANCHORA_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTANCHORA_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getConstraintAnchorB 595 +#define GETCONSTRAINTANCHORB_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCONSTRAINTANCHORB_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCONSTRAINTANCHORB_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETCONSTRAINTANCHORB_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getConstraintAngDepth 596 +#define GETCONSTRAINTANGDEPTH_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintAngularPos 597 +#define GETCONSTRAINTANGULARPOS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingDirAng 598 +#define GETCONSTRAINTDAMPINGDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingDirLin 599 +#define GETCONSTRAINTDAMPINGDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingLimAng 600 +#define GETCONSTRAINTDAMPINGLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingLimLin 601 +#define GETCONSTRAINTDAMPINGLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingOrthoAng 602 +#define GETCONSTRAINTDAMPINGORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintDampingOrthoLin 603 +#define GETCONSTRAINTDAMPINGORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLinearPos 604 +#define GETCONSTRAINTLINEARPOS_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLinDepth 605 +#define GETCONSTRAINTLINDEPTH_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLowerAngLimit 606 +#define GETCONSTRAINTLOWERANGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintLowerLinLimit 607 +#define GETCONSTRAINTLOWERLINLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionDirAng 608 +#define GETCONSTRAINTRESTITUTIONDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionDirLin 609 +#define GETCONSTRAINTRESTITUTIONDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionLimAng 610 +#define GETCONSTRAINTRESTITUTIONLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionLimLin 611 +#define GETCONSTRAINTRESTITUTIONLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionOrthoAng 612 +#define GETCONSTRAINTRESTITUTIONORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintRestitutionOrthoLin 613 +#define GETCONSTRAINTRESTITUTIONORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessDirAng 614 +#define GETCONSTRAINTSOFTNESSDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessDirLin 615 +#define GETCONSTRAINTSOFTNESSDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessLimAng 616 +#define GETCONSTRAINTSOFTNESSLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessLimLin 617 +#define GETCONSTRAINTSOFTNESSLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessOrthoAng 618 +#define GETCONSTRAINTSOFTNESSORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSoftnessOrthoLin 619 +#define GETCONSTRAINTSOFTNESSORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolveAngLimit 620 +#define GETCONSTRAINTSOLVEANGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintSolveLinLimit 621 +#define GETCONSTRAINTSOLVELINLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintUpperAngLimit 622 +#define GETCONSTRAINTUPPERANGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintUpperLinLimit 623 +#define GETCONSTRAINTUPPERLINLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getConstraintUseFrameOffset 624 +#define GETCONSTRAINTUSEFRAMEOFFSET_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setConstraintDampingDirAng 625 +#define SETCONSTRAINTDAMPINGDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGDIRANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDampingDirLin 626 +#define SETCONSTRAINTDAMPINGDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGDIRLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDampingLimAng 627 +#define SETCONSTRAINTDAMPINGLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGLIMANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDampingLimLin 628 +#define SETCONSTRAINTDAMPINGLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGLIMLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDampingOrthoAng 629 +#define SETCONSTRAINTDAMPINGORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGORTHOANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintDampingOrthoLin 630 +#define SETCONSTRAINTDAMPINGORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTDAMPINGORTHOLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintLowerAngLimit 631 +#define SETCONSTRAINTLOWERANGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTLOWERANGLIMIT_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintLowerLinLimit 632 +#define SETCONSTRAINTLOWERLINLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTLOWERLINLIMIT_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionDirAng 633 +#define SETCONSTRAINTRESTITUTIONDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONDIRANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionDirLin 634 +#define SETCONSTRAINTRESTITUTIONDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONDIRLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionLimAng 635 +#define SETCONSTRAINTRESTITUTIONLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONLIMANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionLimLin 636 +#define SETCONSTRAINTRESTITUTIONLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONLIMLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionOrthoAng 637 +#define SETCONSTRAINTRESTITUTIONORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONORTHOANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintRestitutionOrthoLin 638 +#define SETCONSTRAINTRESTITUTIONORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTRESTITUTIONORTHOLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessDirAng 639 +#define SETCONSTRAINTSOFTNESSDIRANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSDIRANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessDirLin 640 +#define SETCONSTRAINTSOFTNESSDIRLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSDIRLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessLimAng 641 +#define SETCONSTRAINTSOFTNESSLIMANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSLIMANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessLimLin 642 +#define SETCONSTRAINTSOFTNESSLIMLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSLIMLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessOrthoAng 643 +#define SETCONSTRAINTSOFTNESSORTHOANG_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSORTHOANG_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintSoftnessOrthoLin 644 +#define SETCONSTRAINTSOFTNESSORTHOLIN_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTSOFTNESSORTHOLIN_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintUpperAngLimit 645 +#define SETCONSTRAINTUPPERANGLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTUPPERANGLIMIT_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setConstraintUpperLinLimit 646 +#define SETCONSTRAINTUPPERLINLIMIT_CONSTRAINT_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCONSTRAINTUPPERLINLIMIT_N num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetCameraPosition 647 +#define SETCAMERAPOSITION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCAMERAPOSITION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCAMERAPOSITION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetCameraPosition 648 +#define GETCAMERAPOSITION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCAMERAPOSITION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCAMERAPOSITION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_TranslateCamera 649 +#define TRANSLATECAMERA_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define TRANSLATECAMERA_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define TRANSLATECAMERA_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetCameraRotation 650 +#define SETCAMERAROTATION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETCAMERAROTATION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETCAMERAROTATION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetCameraRotation 651 +#define GETCAMERAROTATION_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETCAMERAROTATION_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETCAMERAROTATION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_RotateCamera 652 +#define ROTATECAMERA_X num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ROTATECAMERA_Y num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ROTATECAMERA_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetCameraFOV 653 +#define SETCAMERAFOV_FOV num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetCameraFOV 654 +#define FN_SetCameraAspectRatio 655 +#define SETCAMERAASPECTRATIO_ASPECT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetCameraAspectRatio 656 +#define FN_SetCameraFarValue 657 +#define SETCAMERAFARVALUE_ZF num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetCameraFarValue 658 +#define FN_SetCameraNearValue 659 +#define SETCAMERANEARVALUE_ZN num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetCameraNearValue 660 +#define FN_AddSceneSkyBox 661 +#define ADDSCENESKYBOX_IMG_TOP num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ADDSCENESKYBOX_IMG_BOTTOM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ADDSCENESKYBOX_IMG_LEFT num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ADDSCENESKYBOX_IMG_RIGHT num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define ADDSCENESKYBOX_IMG_FRONT num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define ADDSCENESKYBOX_IMG_BACK num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_AddSceneSkyDome 662 +#define ADDSCENESKYDOME_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_AddSceneSkyDomeEx 663 +#define ADDSCENESKYDOMEEX_IMG num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define ADDSCENESKYDOMEEX_HORIRES num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define ADDSCENESKYDOMEEX_VERTRES num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define ADDSCENESKYDOMEEX_TXPERCENTAGE num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define ADDSCENESKYDOMEEX_SPHEREPERCENTAGE num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define ADDSCENESKYDOMEEX_RADIUS num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define FN_RemoveSceneSky 664 +#define FN_SetWorld3DDeltaTime 665 +#define SETWORLD3DDELTATIME_DT num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetWorld3DMaxSubSteps 666 +#define SETWORLD3DMAXSUBSTEPS_STEPS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetWorld3DTimeStep 667 +#define SETWORLD3DTIMESTEP_TS num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_startParticleEmitter 668 +#define STARTPARTICLEEMITTER_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_stopParticleEmitter 669 +#define STOPPARTICLEEMITTER_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleDirection 670 +#define SETPARTICLEDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEDIRECTION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLEDIRECTION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETPARTICLEDIRECTION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getParticleDirection 671 +#define GETPARTICLEDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLEDIRECTION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLEDIRECTION_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETPARTICLEDIRECTION_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_useParticleEveryMeshVertex 672 +#define USEPARTICLEEVERYMESHVERTEX_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define USEPARTICLEEVERYMESHVERTEX_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_particleIsUsingEveryMeshVertex 673 +#define PARTICLEISUSINGEVERYMESHVERTEX_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleNormalDirectionMod 674 +#define SETPARTICLENORMALDIRECTIONMOD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getParticleNormalDirectionMod 675 +#define GETPARTICLENORMALDIRECTIONMOD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_useParticleNormalDirection 676 +#define USEPARTICLENORMALDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define USEPARTICLENORMALDIRECTION_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_particleIsUsingNormalDirection 677 +#define PARTICLEISUSINGNORMALDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMesh 678 +#define SETPARTICLEMESH_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMESH_MESH num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setParticleMinParticlesPerSecond 679 +#define SETPARTICLEMINPARTICLESPERSECOND_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMINPARTICLESPERSECOND_MINPARTICLESPERSECOND num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMinParticlesPerSecond 680 +#define GETPARTICLEMINPARTICLESPERSECOND_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMaxParticlesPerSecond 681 +#define SETPARTICLEMAXPARTICLESPERSECOND_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMAXPARTICLESPERSECOND_MAXPARTICLESPERSECOND num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMaxParticlesPerSecond 682 +#define GETPARTICLEMAXPARTICLESPERSECOND_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMinStartColor 683 +#define SETPARTICLEMINSTARTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMINSTARTCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMinStartColor 684 +#define GETPARTICLEMINSTARTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMaxStartColor 685 +#define SETPARTICLEMAXSTARTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMAXSTARTCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMaxStartColor 686 +#define GETPARTICLEMAXSTARTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMinLife 687 +#define SETPARTICLEMINLIFE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMINLIFE_MINLIFE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMinLife 688 +#define GETPARTICLEMINLIFE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMaxLife 689 +#define SETPARTICLEMAXLIFE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMAXLIFE_MAXLIFE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMaxLife 690 +#define GETPARTICLEMAXLIFE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMaxAngle 691 +#define SETPARTICLEMAXANGLE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMAXANGLE_MAXANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleMaxAngle 692 +#define GETPARTICLEMAXANGLE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleMinStartSize 693 +#define SETPARTICLEMINSTARTSIZE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMINSTARTSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLEMINSTARTSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getParticleMinStartSize 694 +#define GETPARTICLEMINSTARTSIZE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLEMINSTARTSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLEMINSTARTSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setParticleMaxStartSize 695 +#define SETPARTICLEMAXSTARTSIZE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEMAXSTARTSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLEMAXSTARTSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getParticleMaxStartSize 696 +#define GETPARTICLEMAXSTARTSIZE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLEMAXSTARTSIZE_W num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLEMAXSTARTSIZE_H num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setParticleCenter 697 +#define SETPARTICLECENTER_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLECENTER_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLECENTER_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETPARTICLECENTER_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getParticleCenter 698 +#define GETPARTICLECENTER_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLECENTER_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLECENTER_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETPARTICLECENTER_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setParticleRadius 699 +#define SETPARTICLERADIUS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLERADIUS_RADIUS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleRadius 700 +#define GETPARTICLERADIUS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleRingThickness 701 +#define SETPARTICLERINGTHICKNESS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLERINGTHICKNESS_RINGTHICKNESS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleRingThickness 702 +#define GETPARTICLERINGTHICKNESS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setParticleBox 703 +#define SETPARTICLEBOX_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLEBOX_MIN_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLEBOX_MIN_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETPARTICLEBOX_MIN_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define SETPARTICLEBOX_MAX_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define SETPARTICLEBOX_MAX_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define SETPARTICLEBOX_MAX_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_getParticleBox 704 +#define GETPARTICLEBOX_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLEBOX_MIN_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLEBOX_MIN_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETPARTICLEBOX_MIN_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETPARTICLEBOX_MAX_X num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETPARTICLEBOX_MAX_Y num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETPARTICLEBOX_MAX_Z num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define FN_setParticleNormal 705 +#define SETPARTICLENORMAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLENORMAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETPARTICLENORMAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETPARTICLENORMAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_getParticleNormal 706 +#define GETPARTICLENORMAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETPARTICLENORMAL_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETPARTICLENORMAL_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETPARTICLENORMAL_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setParticleLength 707 +#define SETPARTICLELENGTH_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETPARTICLELENGTH_P_LEN num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getParticleLength 708 +#define GETPARTICLELENGTH_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_useParticleOutlineOnly 709 +#define USEPARTICLEOUTLINEONLY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define USEPARTICLEOUTLINEONLY_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_particleIsUsingOutlineOnly 710 +#define PARTICLEISUSINGOUTLINEONLY_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_lightIsCastingShadow 711 +#define LIGHTISCASTINGSHADOW_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getLightType 712 +#define GETLIGHTTYPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_getLightRadius 713 +#define GETLIGHTRADIUS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setLightType 714 +#define SETLIGHTTYPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTTYPE_LIGHT_TYPE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setLightRadius 715 +#define SETLIGHTRADIUS_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTRADIUS_RADIUS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setLightShadowCast 716 +#define SETLIGHTSHADOWCAST_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTSHADOWCAST_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetLightAmbientColor 717 +#define SETLIGHTAMBIENTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTAMBIENTCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightAmbientColor 718 +#define GETLIGHTAMBIENTCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetLightAttenuation 719 +#define SETLIGHTATTENUATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTATTENUATION_L_CONSTANT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETLIGHTATTENUATION_L_LINEAR num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETLIGHTATTENUATION_L_QUADRATIC num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_GetLightAttenuation 720 +#define GETLIGHTATTENUATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETLIGHTATTENUATION_CONSTANT num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETLIGHTATTENUATION_LINEAR num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETLIGHTATTENUATION_QUADRATIC num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetLightDiffuseColor 721 +#define SETLIGHTDIFFUSECOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTDIFFUSECOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightDiffuseColor 722 +#define GETLIGHTDIFFUSECOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetLightFalloff 723 +#define SETLIGHTFALLOFF_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTFALLOFF_FALLOFF num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightFalloff 724 +#define GETLIGHTFALLOFF_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetLightInnerCone 725 +#define SETLIGHTINNERCONE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTINNERCONE_ANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightInnerCone 726 +#define GETLIGHTINNERCONE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetLightOuterCone 727 +#define SETLIGHTOUTERCONE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTOUTERCONE_ANGLE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightOuterCone 728 +#define GETLIGHTOUTERCONE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetLightSpecularColor 729 +#define SETLIGHTSPECULARCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETLIGHTSPECULARCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_GetLightSpecularColor 730 +#define GETLIGHTSPECULARCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetTerrainPatchAABB 731 +#define GETTERRAINPATCHAABB_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTERRAINPATCHAABB_PATCHX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTERRAINPATCHAABB_PATCHZ num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETTERRAINPATCHAABB_MINX num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define GETTERRAINPATCHAABB_MINY num_var[4].nid_value.value[ num_var[4].byref_offset ] +#define GETTERRAINPATCHAABB_MINZ num_var[5].nid_value.value[ num_var[5].byref_offset ] +#define GETTERRAINPATCHAABB_MAXX num_var[6].nid_value.value[ num_var[6].byref_offset ] +#define GETTERRAINPATCHAABB_MAXY num_var[7].nid_value.value[ num_var[7].byref_offset ] +#define GETTERRAINPATCHAABB_MAXZ num_var[8].nid_value.value[ num_var[8].byref_offset ] +#define FN_GetTerrainPatchLOD 732 +#define GETTERRAINPATCHLOD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTERRAINPATCHLOD_PATCHX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTERRAINPATCHLOD_PATCHZ num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetTerrainHeight 733 +#define GETTERRAINHEIGHT_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTERRAINHEIGHT_PATCHX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTERRAINHEIGHT_PATCHZ num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_GetTerrainCenter 734 +#define GETTERRAINCENTER_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETTERRAINCENTER_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETTERRAINCENTER_Y num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define GETTERRAINCENTER_Z num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_SetTerrainLODDistance 735 +#define SETTERRAINLODDISTANCE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETTERRAINLODDISTANCE_LOD num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETTERRAINLODDISTANCE_DISTANCE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_ScaleTerrainTexture 736 +#define SCALETERRAINTEXTURE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SCALETERRAINTEXTURE_SCALE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SCALETERRAINTEXTURE_SCALE2 num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetTerrainCameraMovementDelta 737 +#define SETTERRAINCAMERAMOVEMENTDELTA_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETTERRAINCAMERAMOVEMENTDELTA_DELTA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetTerrainCameraRotationDelta 738 +#define SETTERRAINCAMERAROTATIONDELTA_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETTERRAINCAMERAROTATIONDELTA_DELTA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetTerrainPatchLOD 739 +#define SETTERRAINPATCHLOD_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETTERRAINPATCHLOD_PATCHX num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETTERRAINPATCHLOD_PATCHZ num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define SETTERRAINPATCHLOD_LOD num_var[3].nid_value.value[ num_var[3].byref_offset ] +#define FN_setWaterWindForce 740 +#define SETWATERWINDFORCE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWATERWINDFORCE_F num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getWaterWindForce 741 +#define GETWATERWINDFORCE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setWaterWaveHeight 742 +#define SETWATERWAVEHEIGHT_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWATERWAVEHEIGHT_H num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getWaterWaveHeight 743 +#define GETWATERWAVEHEIGHT_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setWaterWindDirection 744 +#define SETWATERWINDDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWATERWINDDIRECTION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETWATERWINDDIRECTION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getWaterWindDirection 745 +#define GETWATERWINDDIRECTION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETWATERWINDDIRECTION_X num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETWATERWINDDIRECTION_Z num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setWaterColor 746 +#define SETWATERCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWATERCOLOR_C num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getWaterColor 747 +#define GETWATERCOLOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setWaterColorBlendFactor 748 +#define SETWATERCOLORBLENDFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETWATERCOLORBLENDFACTOR_CBFACTOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getWaterColorBlendFactor 749 +#define GETWATERCOLORBLENDFACTOR_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_SetActorAnimation 750 +#define SETACTORANIMATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORANIMATION_START_FRAME num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORANIMATION_END_FRAME num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_SetActorAnimationSpeed 751 +#define SETACTORANIMATIONSPEED_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORANIMATIONSPEED_SPEED num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetActorFrame 752 +#define SETACTORFRAME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORFRAME_FRAME num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetActorMD2Animation 753 +#define SETACTORMD2ANIMATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMD2ANIMATION_ANIM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_SetActorMD2AnimationByName 754 +#define SETACTORMD2ANIMATIONBYNAME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMD2ANIMATIONBYNAME_ANIM_NAME$ str_var[0].sid_value.value[ str_var[0].byref_offset ] +#define FN_GetActorAnimationSpeed 755 +#define GETACTORANIMATIONSPEED_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorEndFrame 756 +#define GETACTORENDFRAME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorCurrentFrame 757 +#define GETACTORCURRENTFRAME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorStartFrame 758 +#define GETACTORSTARTFRAME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_StartActorTransition 759 +#define STARTACTORTRANSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define STARTACTORTRANSITION_FRAME num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define STARTACTORTRANSITION_TRANSITION_TIME num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_StopActorTransition 760 +#define STOPACTORTRANSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_ActorIsInTransition 761 +#define ACTORISINTRANSITION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_GetActorTransitionTime 762 +#define GETACTORTRANSITIONTIME_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_actorAnimationIsLooped 763 +#define ACTORANIMATIONISLOOPED_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_loopActorAnimation 764 +#define LOOPACTORANIMATION_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define LOOPACTORANIMATION_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_createMaterial 765 +#define FN_deleteMaterial 766 +#define DELETEMATERIAL_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setActorMaterial 767 +#define SETACTORMATERIAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMATERIAL_MATERIAL_NUM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORMATERIAL_MATERIAL_ID num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getActorMaterial 768 +#define GETACTORMATERIAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORMATERIAL_MATERIAL_NUM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_copyActorMaterial 769 +#define COPYACTORMATERIAL_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define COPYACTORMATERIAL_MATERIAL_NUM num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_copyMaterial 770 +#define COPYMATERIAL_SMATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialTextureCanvas 771 +#define SETMATERIALTEXTURECANVAS_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALTEXTURECANVAS_LEVEL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATERIALTEXTURECANVAS_CANVAS_ID num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setMaterialAmbientColor 772 +#define SETMATERIALAMBIENTCOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALAMBIENTCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialAmbientColor 773 +#define GETMATERIALAMBIENTCOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialAntiAliasing 774 +#define SETMATERIALANTIALIASING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALANTIALIASING_AA num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialAntiAliasing 775 +#define GETMATERIALANTIALIASING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialBackfaceCulling 776 +#define SETMATERIALBACKFACECULLING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALBACKFACECULLING_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialBackfaceCulling 777 +#define GETMATERIALBACKFACECULLING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialBlendFactor 778 +#define SETMATERIALBLENDFACTOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALBLENDFACTOR_BF num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialBlendFactor 779 +#define GETMATERIALBLENDFACTOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialBlendMode 780 +#define SETMATERIALBLENDMODE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALBLENDMODE_BLEND_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialBlendMode 781 +#define GETMATERIALBLENDMODE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialColorMask 782 +#define SETMATERIALCOLORMASK_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALCOLORMASK_COLOR_MASK num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialColorMask 783 +#define GETMATERIALCOLORMASK_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialColorMode 784 +#define SETMATERIALCOLORMODE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALCOLORMODE_COLOR_MODE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialColorMode 785 +#define GETMATERIALCOLORMODE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialDiffuseColor 786 +#define SETMATERIALDIFFUSECOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALDIFFUSECOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialDiffuseColor 787 +#define GETMATERIALDIFFUSECOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialEmissiveColor 788 +#define SETMATERIALEMISSIVECOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALEMISSIVECOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialEmissiveColor 789 +#define GETMATERIALEMISSIVECOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialFog 790 +#define SETMATERIALFOG_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALFOG_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialFog 791 +#define GETMATERIALFOG_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialFrontfaceCulling 792 +#define SETMATERIALFRONTFACECULLING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALFRONTFACECULLING_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialFrontfaceCulling 793 +#define GETMATERIALFRONTFACECULLING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialGouraudShading 794 +#define SETMATERIALGOURAUDSHADING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALGOURAUDSHADING_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_materialGouraudShading 795 +#define MATERIALGOURAUDSHADING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_materialIsAplhaBlend 796 +#define MATERIALISAPLHABLEND_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_materialIsTransparent 797 +#define MATERIALISTRANSPARENT_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialLighting 798 +#define SETMATERIALLIGHTING_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALLIGHTING_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_materialIsLit 799 +#define MATERIALISLIT_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialType 800 +#define SETMATERIALTYPE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALTYPE_MAT_TYPE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialType 801 +#define GETMATERIALTYPE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialNormalize 802 +#define SETMATERIALNORMALIZE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALNORMALIZE_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_materialIsNormalized 803 +#define MATERIALISNORMALIZED_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialPointCloud 804 +#define SETMATERIALPOINTCLOUD_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALPOINTCLOUD_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_materialIsPointCloud 805 +#define MATERIALISPOINTCLOUD_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialFlag 806 +#define SETMATERIALFLAG_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALFLAG_MATERIAL_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATERIALFLAG_F_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getMaterialFlag 807 +#define GETMATERIALFLAG_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETMATERIALFLAG_MATERIAL_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_setMaterialTexture 808 +#define SETMATERIALTEXTURE_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALTEXTURE_LEVEL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETMATERIALTEXTURE_IMG_ID num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setMaterialShininess 809 +#define SETMATERIALSHININESS_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALSHININESS_SHININESS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialShininess 810 +#define GETMATERIALSHININESS_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialSpecularColor 811 +#define SETMATERIALSPECULARCOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALSPECULARCOLOR_COLOR num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialSpecularColor 812 +#define GETMATERIALSPECULARCOLOR_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialThickness 813 +#define SETMATERIALTHICKNESS_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALTHICKNESS_THICKNESS num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getMaterialThickness 814 +#define GETMATERIALTHICKNESS_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setMaterialWireframe 815 +#define SETMATERIALWIREFRAME_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETMATERIALWIREFRAME_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_materialIsWireframe 816 +#define MATERIALISWIREFRAME_MATERIAL_ID num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setActorTexture 817 +#define SETACTORTEXTURE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORTEXTURE_LAYER num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORTEXTURE_IMAGE_ID num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getActorMaterialCount 818 +#define GETACTORMATERIALCOUNT_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define FN_setActorMaterialFlag 819 +#define SETACTORMATERIALFLAG_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMATERIALFLAG_FLAG num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define SETACTORMATERIALFLAG_FLAG_VALUE num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_getActorMaterialFlag 820 +#define GETACTORMATERIALFLAG_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORMATERIALFLAG_MATERIAL num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define GETACTORMATERIALFLAG_FLAG num_var[2].nid_value.value[ num_var[2].byref_offset ] +#define FN_setActorMaterialType 821 +#define SETACTORMATERIALTYPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define SETACTORMATERIALTYPE_MATERIAL_TYPE num_var[1].nid_value.value[ num_var[1].byref_offset ] +#define FN_getActorMaterialType 822 +#define GETACTORMATERIALTYPE_ACTOR num_var[0].nid_value.value[ num_var[0].byref_offset ] +#define GETACTORMATERIALTYPE_MATERIAL num_var[1].nid_value.value[ num_var[1].byref_offset ] + + +#endif // RC_DEFINES_H_INCLUDED diff --git a/rcbasic_runtime/rc_font.h b/rcbasic_runtime/rc_font.h new file mode 100644 index 0000000..5d1d81f --- /dev/null +++ b/rcbasic_runtime/rc_font.h @@ -0,0 +1,6 @@ +#ifndef RC_FONT_H_INCLUDED +#define RC_FONT_H_INCLUDED + + + +#endif // RC_FONT_H_INCLUDED diff --git a/rcbasic_runtime/rc_func130_cases.h b/rcbasic_runtime/rc_func130_cases.h new file mode 100644 index 0000000..caba457 --- /dev/null +++ b/rcbasic_runtime/rc_func130_cases.h @@ -0,0 +1,2498 @@ +case FN_Fprint: //Sub Procedure + rc_fprint( FPRINT_TXT$ ); + break; +case FN_Input$: //String Function + rc_push_str(rc_input( INPUT$_PROMPT$ )); + break; +case FN_ArrayDim: //Number Function + //DUMMY CASE + + break; +case FN_StringArrayDim: //Number Function + rc_push_num( rc_string_array_dim( (rc_strId*) str_var[0].sid_value.ref_parent ) ); + arr_ref_id.clear(); + + break; +case FN_NumberArrayDim: //Number Function + rc_push_num( rc_number_array_dim( (rc_numId*)num_var[0].nid_value.ref_parent ) ); + arr_ref_id.clear(); + + break; +case FN_ArraySize: //Number Function + //DUMMY CASE + + break; +case FN_StringArraySize: //Number Function + rc_push_num( rc_string_array_size( (rc_strId*) str_var[0].sid_value.ref_parent, STRINGARRAYSIZE_ARRAY_DIM)); + arr_ref_id.clear(); + + break; +case FN_NumberArraySize: //Number Function + rc_push_num( rc_number_array_size( (rc_numId*)num_var[0].nid_value.ref_parent, NUMBERARRAYSIZE_ARRAY_DIM)); + arr_ref_id.clear(); + + break; +case FN_NumberArrayCopy: //Sub Procedure + rc_number_array_copy( &num_var[0], &num_var[1]); + arr_ref_id.clear(); + + break; +case FN_StringArrayCopy: //Sub Procedure + rc_string_array_copy( &str_var[0], &str_var[1]); + arr_ref_id.clear(); + + break; +case FN_ArrayCopy: //Sub Procedure + //DUMMY CASE + + break; +case FN_NumberArrayFill: //Sub Procedure + rc_number_array_fill( &num_var[0], NUMBERARRAYFILL_FDATA); + arr_ref_id.clear(); + + break; +case FN_StringArrayFill: //Sub Procedure + rc_string_array_fill( &str_var[0], STRINGARRAYFILL_FDATA$); + arr_ref_id.clear(); + + break; +case FN_ArrayFill: //Sub Procedure + //DUMMY CASE + + break; +case FN_TypeArrayDim: //Number Function + rc_push_num( rc_type_array_dim( TYPEARRAYDIM_ID ) ); + arr_ref_id.clear(); + + break; +case FN_TypeArraySize: //Number Function + rc_push_num( rc_type_array_size( TYPEARRAYSIZE_ID, TYPEARRAYSIZE_ARRAY_DIM ) ); + arr_ref_id.clear(); + + break; +case FN_TypeArrayCopy: //Sub Procedure + rc_free_type(TYPEARRAYCOPY_DST); + rc_type_array_copy( TYPEARRAYCOPY_SRC, TYPEARRAYCOPY_DST ); + + break; +case FN_TypeArrayFill: //Sub Procedure + rc_type_array_fill( TYPEARRAYFILL_SRC, &TYPEARRAYFILL_FDATA ); + + break; +case FN_Abs: //Number Function + rc_push_num(rc_intern_abs( ABS_N )); + break; +case FN_Acos: //Number Function + rc_push_num(rc_intern_aCos( ACOS_N )); + break; +case FN_AndBit: //Number Function + rc_push_num(rc_intern_andBit( ANDBIT_A, ANDBIT_B )); + break; +case FN_Asin: //Number Function + rc_push_num(rc_intern_aSin( ASIN_N )); + break; +case FN_Atan: //Number Function + rc_push_num(rc_intern_aTan( ATAN_N )); + break; +case FN_Bin$: //String Function + rc_push_str(rc_intern_bin( BIN$_N )); + break; +case FN_CInt32: //Number Function + rc_push_num(rc_intern_cint32( CINT32_I )); + break; +case FN_CInt64: //Number Function + rc_push_num(rc_intern_cint64( CINT64_I )); + break; +case FN_Cos: //Number Function + rc_push_num(rc_intern_cos( COS_N )); + break; +case FN_Degrees: //Number Function + rc_push_num(rc_intern_degrees( DEGREES_R )); + break; +case FN_Exp: //Number Function + rc_push_num(rc_intern_exp( EXP_N )); + break; +case FN_Frac: //Number Function + rc_push_num(rc_intern_frac( FRAC_N )); + break; +case FN_Hex$: //String Function + rc_push_str(rc_intern_hex( HEX$_N )); + break; +case FN_HexVal: //Number Function + rc_push_num(rc_intern_hexInt( HEXVAL_N$ )); + break; +case FN_Int: //Number Function + rc_push_num(rc_intern_int( INT_N )); + break; +case FN_Log: //Number Function + rc_push_num(rc_intern_log( LOG_N )); + break; +case FN_Max: //Number Function + rc_push_num(rc_intern_max( MAX_A, MAX_B )); + break; +case FN_Min: //Number Function + rc_push_num(rc_intern_min( MIN_A, MIN_B )); + break; +case FN_OrBit: //Number Function + rc_push_num(rc_intern_orBit( ORBIT_A, ORBIT_B )); + break; +case FN_Radians: //Number Function + rc_push_num(rc_intern_radians( RADIANS_D )); + break; +case FN_Randomize: //Number Function + rc_push_num(rc_intern_randomize( RANDOMIZE_N )); + break; +case FN_Rand: //Number Function + rc_push_num(rc_intern_rand( RAND_N )); + break; +case FN_Round: //Number Function + rc_push_num(rc_intern_round( ROUND_N )); + break; +case FN_Sign: //Number Function + rc_push_num(rc_intern_sign( SIGN_N )); + break; +case FN_Sin: //Number Function + rc_push_num(rc_intern_sin( SIN_N )); + break; +case FN_Sqrt: //Number Function + rc_push_num(rc_intern_sqrt( SQRT_N )); + break; +case FN_Tan: //Number Function + rc_push_num(rc_intern_tan( TAN_N )); + break; +case FN_XOrBit: //Number Function + rc_push_num(rc_intern_xorbit( XORBIT_A, XORBIT_B )); + break; +case FN_GetLineIntersection: //Number Function + rc_push_num(GetLineIntersect( GETLINEINTERSECTION_P0_X, GETLINEINTERSECTION_P0_Y, GETLINEINTERSECTION_P1_X, GETLINEINTERSECTION_P1_Y, GETLINEINTERSECTION_P2_X, GETLINEINTERSECTION_P2_Y, GETLINEINTERSECTION_P3_X, GETLINEINTERSECTION_P3_Y, &GETLINEINTERSECTION_I_X, &GETLINEINTERSECTION_I_Y )); + break; +case FN_Interpolate: //Number Function + rc_push_num(Interpolate( INTERPOLATE_MIN_A, INTERPOLATE_MAX_A, INTERPOLATE_MID_A, INTERPOLATE_MIN_B, INTERPOLATE_MAX_B )); + break; +case FN_ATan2: //Number Function + rc_push_num(atan2( ATAN2_Y, ATAN2_X )); + break; +case FN_PointInQuad: //Number Function + rc_push_num(PointInQuad( POINTINQUAD_X, POINTINQUAD_Y, POINTINQUAD_X1, POINTINQUAD_Y1, POINTINQUAD_X2, POINTINQUAD_Y2, POINTINQUAD_X3, POINTINQUAD_Y3, POINTINQUAD_X4, POINTINQUAD_Y4 )); + break; +case FN_PointInTri: //Number Function + rc_push_num(PointInTri( POINTINTRI_X, POINTINTRI_Y, POINTINTRI_X1, POINTINTRI_Y1, POINTINTRI_X2, POINTINTRI_Y2, POINTINTRI_X3, POINTINTRI_Y3 )); + break; +case FN_Distance2D: //Number Function + rc_push_num(Distance2D( DISTANCE2D_X1, DISTANCE2D_Y1, DISTANCE2D_X2, DISTANCE2D_Y2 )); + break; +case FN_Distance3D: //Number Function + rc_push_num(Distance3D( DISTANCE3D_X1, DISTANCE3D_Y1, DISTANCE3D_Z1, DISTANCE3D_X2, DISTANCE3D_Y2, DISTANCE3D_Z2 )); + break; +case FN_GetCircleLineIntersection: //Number Function + rc_push_num(GetCircleLineIntersection( GETCIRCLELINEINTERSECTION_CIRCLE_X, GETCIRCLELINEINTERSECTION_CIRCLE_Y, GETCIRCLELINEINTERSECTION_RADIUS, GETCIRCLELINEINTERSECTION_X1, GETCIRCLELINEINTERSECTION_Y1, GETCIRCLELINEINTERSECTION_X2, GETCIRCLELINEINTERSECTION_Y2, &GETCIRCLELINEINTERSECTION_IX1, &GETCIRCLELINEINTERSECTION_IY1, &GETCIRCLELINEINTERSECTION_IX2, &GETCIRCLELINEINTERSECTION_IY2 )); + break; +case FN_GetLinePlaneIntersection: //Number Function + rc_push_num(GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION )); + break; +case FN_Asc: //Number Function + rc_push_num(rc_intern_asc( ASC_C$ )); + break; +case FN_Chr$: //String Function + rc_push_str(rc_intern_chr( CHR$_N )); + break; +case FN_Insert$: //String Function + rc_push_str(rc_intern_insert( INSERT$_SRC$, INSERT$_TGT$, INSERT$_POS )); + break; +case FN_InStr: //Number Function + rc_push_num(rc_intern_instr( INSTR_SRC$, INSTR_SUBSTR$ )); + break; +case FN_Lcase$: //String Function + rc_push_str(rc_intern_lcase( LCASE$_SRC$ )); + break; +case FN_Left$: //String Function + rc_push_str(rc_intern_left( LEFT$_SRC$, LEFT$_N )); + break; +case FN_Length: //Number Function + rc_push_num(rc_intern_length( LENGTH_SRC$ )); + break; +case FN_Len: //Number Function + rc_push_num(rc_intern_length( LEN_SRC$ )); + break; +case FN_Ltrim$: //String Function + rc_push_str(rc_intern_ltrim( LTRIM$_SRC$ )); + break; +case FN_Mid$: //String Function + rc_push_str(rc_intern_mid( MID$_SRC$, MID$_START, MID$_N )); + break; +case FN_ReplaceSubstr$: //String Function + rc_push_str(rc_intern_replaceSubstr( REPLACESUBSTR$_SRC$, REPLACESUBSTR$_RPC$, REPLACESUBSTR$_POS )); + break; +case FN_Replace$: //String Function + rc_push_str(rc_intern_replace( REPLACE$_SRC$, REPLACE$_TGT$, REPLACE$_RPC$ )); + break; +case FN_Reverse$: //String Function + rc_push_str(rc_intern_reverse( REVERSE$_SRC$ )); + break; +case FN_Right$: //String Function + rc_push_str(rc_intern_right( RIGHT$_SRC$, RIGHT$_N )); + break; +case FN_Rtrim$: //String Function + rc_push_str(rc_intern_rtrim( RTRIM$_SRC$ )); + break; +case FN_StringFill$: //String Function + rc_push_str(rc_intern_stringfill( STRINGFILL$_SRC$, STRINGFILL$_N )); + break; +case FN_Str$: //String Function + rc_push_str(rc_intern_str( STR$_N )); + break; +case FN_Str_F$: //String Function + rc_push_str(rc_intern_str_f( STR_F$_N )); + break; +case FN_Str_S$: //String Function + rc_push_str(rc_intern_str_s( STR_S$_N )); + break; +case FN_Tally: //Number Function + rc_push_num(rc_intern_tally( TALLY_SRC$, TALLY_SUBSTR$ )); + break; +case FN_Trim$: //String Function + rc_push_str(rc_intern_trim( TRIM$_SRC$ )); + break; +case FN_Ucase$: //String Function + rc_push_str(rc_intern_ucase( UCASE$_SRC$ )); + break; +case FN_Val: //Number Function + rc_push_num(rc_intern_val( VAL_N$ )); + break; +case FN_Size: //Number Function + rc_push_num(rc_intern_size( SIZE_S$ )); + break; +case FN_BufferFromString: //Number Function + rc_push_num(rc_intern_bufferFromString( BUFFERFROMSTRING_S$, &BUFFERFROMSTRING_BUFFER )); + break; +case FN_StringFromBuffer$: //String Function + rc_push_str(rc_intern_stringFromBuffer( &STRINGFROMBUFFER$_BUFFER, STRINGFROMBUFFER$_BUFFER_SIZE )); + break; +case FN_CreateStack_N: //Number Function + rc_push_num(rc_intern_createStack_N( )); + break; +case FN_CreateStack_S: //Number Function + rc_push_num(rc_intern_createStack_S( )); + break; +case FN_ClearStack_N: //Sub Procedure + rc_intern_clearStack_N( CLEARSTACK_N_NUM_STACK ); + break; +case FN_ClearStack_S: //Sub Procedure + rc_intern_clearStack_S( CLEARSTACK_S_STR_STACK ); + break; +case FN_DeleteStack_N: //Sub Procedure + rc_intern_deleteStack_N( DELETESTACK_N_NUM_STACK ); + break; +case FN_DeleteStack_S: //Sub Procedure + rc_intern_deleteStack_S( DELETESTACK_S_STR_STACK ); + break; +case FN_Push_N: //Sub Procedure + rc_intern_push_n( PUSH_N_NUM_STACK, PUSH_N_N ); + break; +case FN_Pop_N: //Number Function + rc_push_num(rc_intern_pop_n( POP_N_NUM_STACK )); + break; +case FN_Push_S: //Sub Procedure + rc_intern_push_s( PUSH_S_STR_STACK, PUSH_S_S$ ); + break; +case FN_Pop_S$: //String Function + rc_push_str(rc_intern_pop_s( POP_S$_STR_STACK )); + break; +case FN_Stack_Size_N: //Number Function + rc_push_num(rc_intern_n_stack_size( STACK_SIZE_N_NUM_STACK )); + break; +case FN_Stack_Size_S: //Number Function + rc_push_num(rc_intern_s_stack_size( STACK_SIZE_S_STR_STACK )); + break; +case FN_OpenFile: //Number Function + rc_push_num(rc_intern_fileOpen( OPENFILE_FILENAME$, OPENFILE_MODE )); + break; +case FN_CloseFile: //Sub Procedure + rc_intern_fileClose( CLOSEFILE_STREAM ); + break; +case FN_ReadByte: //Number Function + rc_push_num(rc_intern_fileReadByte( READBYTE_STREAM )); + break; +case FN_WriteByte: //Sub Procedure + rc_intern_fileWriteByte( WRITEBYTE_STREAM, WRITEBYTE_BYTE ); + break; +case FN_ReadLine$: //String Function + rc_push_str(rc_intern_fileReadLine( READLINE$_STREAM )); + break; +case FN_Write: //Sub Procedure + rc_intern_fileWrite( WRITE_STREAM, WRITE_TXT$ ); + break; +case FN_WriteLine: //Sub Procedure + rc_intern_fileWriteLine( WRITELINE_STREAM, WRITELINE_TXT$ ); + break; +case FN_CopyFile: //Sub Procedure + rc_intern_fileCopy( COPYFILE_SRC$, COPYFILE_DST$ ); + break; +case FN_RemoveFile: //Number Function + rc_push_num(rc_intern_fileDelete( REMOVEFILE_FILENAME$ )); + break; +case FN_FileExists: //Number Function + rc_push_num(rc_intern_fileExist( FILEEXISTS_FILENAME$ )); + break; +case FN_MoveFile: //Number Function + rc_push_num(rc_intern_fileMove( MOVEFILE_SRC$, MOVEFILE_DST$ )); + break; +case FN_RenameFile: //Number Function + rc_push_num(rc_intern_fileRename( RENAMEFILE_SRC$, RENAMEFILE_DST$ )); + break; +case FN_FileLength: //Number Function + rc_push_num(rc_intern_fileLength( FILELENGTH_FILENAME$ )); + break; +case FN_Tell: //Number Function + rc_push_num(rc_intern_fileTell( TELL_STREAM )); + break; +case FN_Seek: //Number Function + rc_push_num(rc_intern_fileSeek( SEEK_STREAM, SEEK_POS )); + break; +case FN_EOF: //Number Function + rc_push_num(rc_intern_eof( EOF_STREAM )); + break; +case FN_WriteByteBuffer: //Number Function + rc_push_num(rc_intern_fileWriteByteBuffer( WRITEBYTEBUFFER_STREAM, &WRITEBYTEBUFFER_BUF, WRITEBYTEBUFFER_BUF_SIZE )); + break; +case FN_ReadByteBuffer: //Number Function + rc_push_num(rc_intern_fileReadByteBuffer( READBYTEBUFFER_STREAM, &READBYTEBUFFER_BUF, READBYTEBUFFER_BUF_SIZE )); + break; +case FN_ChangeDir: //Sub Procedure + rc_intern_dirChange( CHANGEDIR_P$ ); + break; +case FN_DirExists: //Number Function + rc_push_num(rc_intern_dirExist( DIREXISTS_P$ )); + break; +case FN_DirFirst$: //String Function + rc_push_str(rc_intern_dirFirst( )); + break; +case FN_Dir$: //String Function + rc_push_str(rc_intern_dir( )); + break; +case FN_DirNext$: //String Function + rc_push_str(rc_intern_dirNext( )); + break; +case FN_MakeDir: //Number Function + rc_push_num(rc_intern_dirCreate( MAKEDIR_P$ )); + break; +case FN_RemoveDir: //Number Function + rc_push_num(rc_intern_dirDelete( REMOVEDIR_P$ )); + break; +case FN_Date$: //String Function + rc_push_str(rc_intern_date( )); + break; +case FN_Easter$: //String Function + rc_push_str(rc_intern_easter( EASTER$_YEAR )); + break; +case FN_Ticks: //Number Function + rc_push_num(rc_intern_ticks( )); + break; +case FN_Time$: //String Function + rc_push_str(rc_intern_time( )); + break; +case FN_Timer: //Number Function + rc_push_num(rc_intern_timer( )); + break; +case FN_Wait: //Sub Procedure + rc_intern_wait( WAIT_M_SEC ); + break; +case FN_OpenWindow: //Number Function + rc_push_num(rc_windowOpen( OPENWINDOW_TITLE$, OPENWINDOW_W, OPENWINDOW_H, OPENWINDOW_FULLSCREEN, OPENWINDOW_VSYNC )); + break; +case FN_OpenWindowEx: //Number Function + rc_push_num(rc_windowOpenEx( OPENWINDOWEX_TITLE$, OPENWINDOWEX_X, OPENWINDOWEX_Y, OPENWINDOWEX_W, OPENWINDOWEX_H, OPENWINDOWEX_MODE, OPENWINDOWEX_AA, OPENWINDOWEX_STENCIL_BUFFER, OPENWINDOWEX_VSYNC )); + break; +case FN_CloseWindow: //Sub Procedure + rc_closeWindow_hw( ); + break; +case FN_RaiseWindow: //Sub Procedure + rc_raiseWindow( ); + break; +case FN_Update: //Sub Procedure + rc_update( ); + break; +case FN_Cls: //Sub Procedure + rc_cls( ); + break; +case FN_SetClearColor: //Sub Procedure + rc_setClearColor( SETCLEARCOLOR_C ); + break; +case FN_ShowWindow: //Sub Procedure + rc_showWindow( ); + break; +case FN_HideWindow: //Sub Procedure + rc_hideWindow( ); + break; +case FN_SetWindowTitle: //Sub Procedure + rc_setWindowTitle( SETWINDOWTITLE_TITLE$ ); + break; +case FN_WindowTitle$: //String Function + rc_push_str(rc_getWindowTitle( )); + break; +case FN_SetWindowPosition: //Sub Procedure + rc_setWindowPosition( SETWINDOWPOSITION_X, SETWINDOWPOSITION_Y ); + break; +case FN_GetWindowPosition: //Sub Procedure + rc_getWindowPosition( &GETWINDOWPOSITION_X, &GETWINDOWPOSITION_Y ); + break; +case FN_SetWindowSize: //Sub Procedure + rc_setWindowSize( SETWINDOWSIZE_W, SETWINDOWSIZE_H ); + break; +case FN_GetWindowSize: //Sub Procedure + rc_getWindowSize( &GETWINDOWSIZE_W, &GETWINDOWSIZE_H ); + break; +case FN_SetWindowMinSize: //Sub Procedure + rc_setWindowMinSize( SETWINDOWMINSIZE_W, SETWINDOWMINSIZE_H ); + break; +case FN_GetWindowMinSize: //Sub Procedure + rc_getWindowMinSize( &GETWINDOWMINSIZE_W, &GETWINDOWMINSIZE_H ); + break; +case FN_SetWindowMaxSize: //Sub Procedure + rc_setWindowMaxSize( SETWINDOWMAXSIZE_W, SETWINDOWMAXSIZE_H ); + break; +case FN_GetWindowMaxSize: //Sub Procedure + rc_getWindowMaxSize( &GETWINDOWMAXSIZE_W, &GETWINDOWMAXSIZE_H ); + break; +case FN_WindowIsFullscreen: //Number Function + rc_push_num(rc_windowIsFullscreen( )); + break; +case FN_WindowIsVisible: //Number Function + rc_push_num(rc_windowIsVisible( )); + break; +case FN_WindowIsBordered: //Number Function + rc_push_num(rc_windowIsBordered( )); + break; +case FN_WindowIsResizable: //Number Function + rc_push_num(rc_windowIsResizable( )); + break; +case FN_WindowIsMinimized: //Number Function + rc_push_num(rc_windowIsMinimized( )); + break; +case FN_WindowIsMaximized: //Number Function + rc_push_num(rc_windowIsMaximized( )); + break; +case FN_WindowHasInputFocus: //Number Function + rc_push_num(rc_windowHasInputFocus( )); + break; +case FN_WindowHasMouseFocus: //Number Function + rc_push_num(rc_windowHasMouseFocus( )); + break; +case FN_SetWindowFullscreen: //Sub Procedure + rc_setWindowFullscreen( SETWINDOWFULLSCREEN_FLAG ); + break; +case FN_MaximizeWindow: //Sub Procedure + rc_maximizeWindow( ); + break; +case FN_MinimizeWindow: //Sub Procedure + rc_minimizeWindow( ); + break; +case FN_SetWindowBordered: //Sub Procedure + rc_setWindowBordered( SETWINDOWBORDERED_FLAG ); + break; +case FN_WindowClip: //Number Function + rc_push_num(rc_windowClip( WINDOWCLIP_X, WINDOWCLIP_Y, WINDOWCLIP_W, WINDOWCLIP_H )); + break; +case FN_WindowExists: //Number Function + rc_push_num(rc_windowExists( )); + break; +case FN_WindowEvent_Close: //Number Function + rc_push_num(rc_windowEvent_Close( )); + break; +case FN_WindowEvent_Maximize: //Number Function + rc_push_num(rc_windowEvent_Maximize( )); + break; +case FN_WindowEvent_Minimize: //Number Function + rc_push_num(rc_windowEvent_Minimize( )); + break; +case FN_FPS: //Number Function + rc_push_num(rc_FPS( )); + break; +case FN_SetWindowIcon: //Sub Procedure + rc_setWindowIcon( SETWINDOWICON_SLOT ); + break; +case FN_WindowEvent_Resize: //Number Function + rc_push_num(rc_windowEvent_Resize( )); + break; +case FN_SetWindowAutoClose: //Sub Procedure + rc_setWindowAutoClose( SETWINDOWAUTOCLOSE_EXIT_ON_CLOSE ); + break; +case FN_SetWindowResizable: //Sub Procedure + rc_setWindowResizable( SETWINDOWRESIZABLE_FLAG ); + break; +case FN_WindowMode: //Number Function + rc_push_num(rc_windowMode( WINDOWMODE_VISIBLE, WINDOWMODE_FULLSCREEN, WINDOWMODE_RESIZABLE, WINDOWMODE_BORDERLESS, WINDOWMODE_HIGHDPI )); + break; +case FN_getWindowMode: //Number Function + rc_push_num(rc_getWindowMode( )); + break; +case FN_RestoreWindow: //Sub Procedure + rc_restoreWindow( ); + break; +case FN_GrabInput: //Sub Procedure + rc_grabInput( GRABINPUT_FLAG ); + break; +case FN_SetWindowAlwaysOnTop: //Sub Procedure + rc_setWindowAlwaysOnTop( SETWINDOWALWAYSONTOP_FLAG ); + break; +case FN_SetMouseRelative: //Sub Procedure + rc_setMouseRelative( SETMOUSERELATIVE_FLAG ); + break; +case FN_SetWindowVSync: //Sub Procedure + rc_setWindowVSync( SETWINDOWVSYNC_FLAG ); + break; +case FN_FlashWindow: //Number Function + rc_push_num(rc_flashWindow( FLASHWINDOW_FLAG )); + break; +case FN_WindowIsGrabbed: //Number Function + rc_push_num(rc_windowIsGrabbed( )); + break; +case FN_OpenCanvas: //Number Function + rc_push_num(rc_canvasOpen( OPENCANVAS_W, OPENCANVAS_H, OPENCANVAS_VIEWPORT_X, OPENCANVAS_VIEWPORT_Y, OPENCANVAS_VIEWPORT_W, OPENCANVAS_VIEWPORT_H, OPENCANVAS_MODE )); + break; +case FN_CloseCanvas: //Sub Procedure + rc_canvasClose( CLOSECANVAS_C_NUM ); + break; +case FN_SetCanvas3D: //Sub Procedure + rc_setCanvas3D( SETCANVAS3D_C_NUM, SETCANVAS3D_FLAG ); + break; +case FN_SetCanvasVisible: //Sub Procedure + rc_setCanvasVisible( SETCANVASVISIBLE_C_NUM, SETCANVASVISIBLE_FLAG ); + break; +case FN_CanvasIsVisible: //Number Function + rc_push_num(rc_canvasIsVisible( CANVASISVISIBLE_C_NUM )); + break; +case FN_SetCanvasViewport: //Sub Procedure + rc_setCanvasViewport( SETCANVASVIEWPORT_CNUM, SETCANVASVIEWPORT_X, SETCANVASVIEWPORT_Y, SETCANVASVIEWPORT_W, SETCANVASVIEWPORT_H ); + break; +case FN_GetCanvasViewport: //Sub Procedure + rc_getCanvasViewport( GETCANVASVIEWPORT_C_NUM, &GETCANVASVIEWPORT_X, &GETCANVASVIEWPORT_Y, &GETCANVASVIEWPORT_W, &GETCANVASVIEWPORT_H ); + break; +case FN_Canvas: //Sub Procedure + rc_setActiveCanvas( CANVAS_C_NUM ); + break; +case FN_SetCanvasOffset: //Sub Procedure + rc_setCanvasOffset( SETCANVASOFFSET_C_NUM, SETCANVASOFFSET_X, SETCANVASOFFSET_Y ); + break; +case FN_GetCanvasOffset: //Sub Procedure + rc_getCanvasOffset( GETCANVASOFFSET_C_NUM, &GETCANVASOFFSET_X, &GETCANVASOFFSET_Y ); + break; +case FN_GetCanvasSize: //Sub Procedure + rc_getCanvasSize( GETCANVASSIZE_C_NUM, &GETCANVASSIZE_W, &GETCANVASSIZE_H ); + break; +case FN_ClearCanvas: //Sub Procedure + rc_clearCanvas( ); + break; +case FN_SetCanvasAlpha: //Sub Procedure + rc_setCanvasAlpha( SETCANVASALPHA_C_NUM, SETCANVASALPHA_A ); + break; +case FN_GetCanvasAlpha: //Number Function + rc_push_num(rc_getCanvasAlpha( GETCANVASALPHA_C_NUM )); + break; +case FN_SetCanvasColorMod: //Number Function + rc_push_num(rc_setCanvasColorMod( SETCANVASCOLORMOD_C_NUM, SETCANVASCOLORMOD_C )); + break; +case FN_GetCanvasColorMod: //Number Function + rc_push_num(rc_getCanvasColorMod( GETCANVASCOLORMOD_C_NUM )); + break; +case FN_CloneCanvas: //Sub Procedure + rc_cloneCanvas( CLONECANVAS_SRC, CLONECANVAS_DST ); + break; +case FN_SetCanvasZ: //Sub Procedure + rc_setCanvasZ( SETCANVASZ_C_NUM, SETCANVASZ_Z ); + break; +case FN_GetCanvasZ: //Number Function + rc_push_num(rc_getCanvasZ( GETCANVASZ_C_NUM )); + break; +case FN_CanvasClip: //Number Function + rc_push_num(rc_canvasClip( CANVASCLIP_X, CANVASCLIP_Y, CANVASCLIP_W, CANVASCLIP_H )); + break; +case FN_ActiveCanvas: //Number Function + rc_push_num(rc_activeCanvas( )); + break; +case FN_Circle: //Sub Procedure + rc_drawCircle( CIRCLE_X, CIRCLE_Y, CIRCLE_RADIUS ); + break; +case FN_CircleFill: //Sub Procedure + rc_drawCircleFill( CIRCLEFILL_X, CIRCLEFILL_Y, CIRCLEFILL_RADIUS ); + break; +case FN_Ellipse: //Sub Procedure + rc_drawEllipse( ELLIPSE_X, ELLIPSE_Y, ELLIPSE_RX, ELLIPSE_RY ); + break; +case FN_EllipseFill: //Sub Procedure + rc_drawEllipseFill( ELLIPSEFILL_X, ELLIPSEFILL_Y, ELLIPSEFILL_RX, ELLIPSEFILL_RY ); + break; +case FN_FloodFill: //Sub Procedure + rc_floodFill( FLOODFILL_X, FLOODFILL_Y ); + break; +case FN_GetPixel: //Number Function + rc_push_num(rc_getPixel( GETPIXEL_X, GETPIXEL_Y )); + break; +case FN_SetColor: //Sub Procedure + rc_setColor( SETCOLOR_C ); + break; +case FN_Line: //Sub Procedure + rc_drawLine( LINE_X1, LINE_Y1, LINE_X2, LINE_Y2 ); + break; +case FN_Poly: //Sub Procedure + rc_poly( POLY_N, &POLY_X, &POLY_Y ); + break; +case FN_Rect: //Sub Procedure + rc_drawRect( RECT_X, RECT_Y, RECT_W, RECT_H ); + break; +case FN_RectFill: //Sub Procedure + rc_drawRectFill( RECTFILL_X, RECTFILL_Y, RECTFILL_W, RECTFILL_H ); + break; +case FN_RGB: //Number Function + rc_push_num(rc_rgb( RGB_R, RGB_G, RGB_B )); + break; +case FN_RGBA: //Number Function + rc_push_num(rc_rgba( RGBA_R, RGBA_G, RGBA_B, RGBA_A )); + break; +case FN_Pset: //Sub Procedure + rc_drawPixel( PSET_X, PSET_Y ); + break; +case FN_LoadImage: //Number Function + rc_push_num(rc_loadImage( LOADIMAGE_IMG$ )); + break; +case FN_LoadImageEx: //Number Function + rc_push_num(rc_loadImageEx( LOADIMAGEEX_IMG$, LOADIMAGEEX_COLKEY )); + break; +case FN_createImage: //Number Function + rc_push_num(rc_createImage( CREATEIMAGE_W, CREATEIMAGE_H, &CREATEIMAGE_BUFFER )); + break; +case FN_createImageEx: //Number Function + rc_push_num(rc_createImageEx( CREATEIMAGEEX_W, CREATEIMAGEEX_H, &CREATEIMAGEEX_BUFFER, CREATEIMAGEEX_COLOR )); + break; +case FN_getImageBuffer: //Sub Procedure + rc_getImageBuffer( GETIMAGEBUFFER_IMG_ID, &GETIMAGEBUFFER_BUFFER ); + break; +case FN_ImageExists: //Number Function + rc_push_num(rc_imageExists( IMAGEEXISTS_SLOT )); + break; +case FN_ColorKey: //Sub Procedure + rc_colorKey( COLORKEY_SLOT, COLORKEY_C ); + break; +case FN_setBilinearFilter: //Sub Procedure + rc_setBilinearFilter( SETBILINEARFILTER_FLAG ); + break; +case FN_getBilinearFilter: //Number Function + rc_push_num(rc_getBilinearFilter( )); + break; +case FN_CopyImage: //Number Function + rc_push_num(rc_copyImage( COPYIMAGE_IMG_ID )); + break; +case FN_DeleteImage: //Sub Procedure + rc_deleteImage( DELETEIMAGE_SLOT ); + break; +case FN_SetImageAlpha: //Sub Procedure + rc_setImageAlpha( SETIMAGEALPHA_SLOT, SETIMAGEALPHA_A ); + break; +case FN_GetImageAlpha: //Number Function + rc_push_num(rc_getImageAlpha( GETIMAGEALPHA_IMG_ID )); + break; +case FN_GetImageSize: //Sub Procedure + rc_getImageSize( GETIMAGESIZE_SLOT, &GETIMAGESIZE_W, &GETIMAGESIZE_H ); + break; +case FN_SetBlendMode: //Sub Procedure + rc_setBlendMode( SETBLENDMODE_BLEND_MODE ); + break; +case FN_GetBlendMode: //Number Function + rc_push_num(rc_getBlendMode( GETBLENDMODE_BLEND_MODE )); + break; +case FN_SetImageColorMod: //Number Function + rc_push_num(rc_setImageColorMod( SETIMAGECOLORMOD_SLOT, SETIMAGECOLORMOD_C )); + break; +case FN_ImageColorMod: //Number Function + rc_push_num(rc_imageColorMod( IMAGECOLORMOD_SLOT )); + break; +case FN_DrawImage: //Sub Procedure + rc_drawImage( DRAWIMAGE_SLOT, DRAWIMAGE_X, DRAWIMAGE_Y ); + break; +case FN_DrawImage_Blit: //Sub Procedure + rc_drawImage_Blit( DRAWIMAGE_BLIT_SLOT, DRAWIMAGE_BLIT_X, DRAWIMAGE_BLIT_Y, DRAWIMAGE_BLIT_SRC_X, DRAWIMAGE_BLIT_SRC_Y, DRAWIMAGE_BLIT_SRC_W, DRAWIMAGE_BLIT_SRC_H ); + break; +case FN_DrawImage_BlitEx: //Sub Procedure + rc_drawImage_BlitEx( DRAWIMAGE_BLITEX_SLOT, DRAWIMAGE_BLITEX_X, DRAWIMAGE_BLITEX_Y, DRAWIMAGE_BLITEX_W, DRAWIMAGE_BLITEX_H, DRAWIMAGE_BLITEX_SRC_X, DRAWIMAGE_BLITEX_SRC_Y, DRAWIMAGE_BLITEX_SRC_W, DRAWIMAGE_BLITEX_SRC_H ); + break; +case FN_DrawImage_Rotate: //Sub Procedure + rc_drawImage_Rotate( DRAWIMAGE_ROTATE_SLOT, DRAWIMAGE_ROTATE_X, DRAWIMAGE_ROTATE_Y, DRAWIMAGE_ROTATE_ANGLE ); + break; +case FN_DrawImage_RotateEx: //Sub Procedure + rc_drawImage_RotateEx( DRAWIMAGE_ROTATEEX_SLOT, DRAWIMAGE_ROTATEEX_X, DRAWIMAGE_ROTATEEX_Y, DRAWIMAGE_ROTATEEX_SRC_X, DRAWIMAGE_ROTATEEX_SRC_Y, DRAWIMAGE_ROTATEEX_SRC_W, DRAWIMAGE_ROTATEEX_SRC_H, DRAWIMAGE_ROTATEEX_ANGLE ); + break; +case FN_DrawImage_Zoom: //Sub Procedure + rc_drawImage_Zoom( DRAWIMAGE_ZOOM_SLOT, DRAWIMAGE_ZOOM_X, DRAWIMAGE_ZOOM_Y, DRAWIMAGE_ZOOM_ZX, DRAWIMAGE_ZOOM_ZY ); + break; +case FN_DrawImage_ZoomEx: //Sub Procedure + rc_drawImage_ZoomEx( DRAWIMAGE_ZOOMEX_SLOT, DRAWIMAGE_ZOOMEX_X, DRAWIMAGE_ZOOMEX_Y, DRAWIMAGE_ZOOMEX_SRC_X, DRAWIMAGE_ZOOMEX_SRC_Y, DRAWIMAGE_ZOOMEX_SRC_W, DRAWIMAGE_ZOOMEX_SRC_H, DRAWIMAGE_ZOOMEX_ZX, DRAWIMAGE_ZOOMEX_ZY ); + break; +case FN_DrawImage_Rotozoom: //Sub Procedure + rc_drawImage_Rotozoom( DRAWIMAGE_ROTOZOOM_SLOT, DRAWIMAGE_ROTOZOOM_X, DRAWIMAGE_ROTOZOOM_Y, DRAWIMAGE_ROTOZOOM_ANGLE, DRAWIMAGE_ROTOZOOM_ZX, DRAWIMAGE_ROTOZOOM_ZY ); + break; +case FN_DrawImage_RotozoomEx: //Sub Procedure + rc_drawImage_RotozoomEx( DRAWIMAGE_ROTOZOOMEX_SLOT, DRAWIMAGE_ROTOZOOMEX_X, DRAWIMAGE_ROTOZOOMEX_Y, DRAWIMAGE_ROTOZOOMEX_SRC_X, DRAWIMAGE_ROTOZOOMEX_SRC_Y, DRAWIMAGE_ROTOZOOMEX_SRC_W, DRAWIMAGE_ROTOZOOMEX_SRC_H, DRAWIMAGE_ROTOZOOMEX_ANGLE, DRAWIMAGE_ROTOZOOMEX_ZX, DRAWIMAGE_ROTOZOOMEX_ZY ); + break; +case FN_DrawImage_Flip: //Sub Procedure + rc_drawImage_Flip( DRAWIMAGE_FLIP_SLOT, DRAWIMAGE_FLIP_X, DRAWIMAGE_FLIP_Y, DRAWIMAGE_FLIP_H, DRAWIMAGE_FLIP_V ); + break; +case FN_DrawImage_FlipEx: //Sub Procedure + rc_drawImage_FlipEx( DRAWIMAGE_FLIPEX_SLOT, DRAWIMAGE_FLIPEX_X, DRAWIMAGE_FLIPEX_Y, DRAWIMAGE_FLIPEX_SRC_X, DRAWIMAGE_FLIPEX_SRC_Y, DRAWIMAGE_FLIPEX_SRC_W, DRAWIMAGE_FLIPEX_SRC_H, DRAWIMAGE_FLIPEX_H, DRAWIMAGE_FLIPEX_V ); + break; +case FN_InKey: //Number Function + rc_push_num(rc_inKey( )); + break; +case FN_Key: //Number Function + rc_push_num(rc_key( KEY_KEY_CODE )); + break; +case FN_WaitKey: //Number Function + rc_push_num(rc_waitKey( )); + break; +case FN_HideMouse: //Sub Procedure + rc_hideMouse( ); + break; +case FN_ShowMouse: //Sub Procedure + rc_showMouse( ); + break; +case FN_MouseIsVisible: //Number Function + rc_push_num(rc_mouseIsVisible( )); + break; +case FN_GetMouse: //Sub Procedure + rc_getMouse( &GETMOUSE_X, &GETMOUSE_Y, &GETMOUSE_MB1, &GETMOUSE_MB2, &GETMOUSE_MB3 ); + break; +case FN_MouseX: //Number Function + rc_push_num(rc_mouseX( )); + break; +case FN_MouseY: //Number Function + rc_push_num(rc_mouseY( )); + break; +case FN_MouseButton: //Number Function + rc_push_num(rc_mouseButton( MOUSEBUTTON_MB )); + break; +case FN_GetMouseWheel: //Sub Procedure + rc_getMouseWheel( &GETMOUSEWHEEL_X_AXIS, &GETMOUSEWHEEL_Y_AXIS ); + break; +case FN_MouseWheelX: //Number Function + rc_push_num(rc_mouseWheelX( )); + break; +case FN_MouseWheelY: //Number Function + rc_push_num(rc_mouseWheelY( )); + break; +case FN_GetGlobalMouse: //Sub Procedure + rc_getGlobalMouse( &GETGLOBALMOUSE_X, &GETGLOBALMOUSE_Y, &GETGLOBALMOUSE_MB1, &GETGLOBALMOUSE_MB2, &GETGLOBALMOUSE_MB3 ); + break; +case FN_GlobalMouseX: //Number Function + rc_push_num(rc_globalMouseX( )); + break; +case FN_GlobalMouseY: //Number Function + rc_push_num(rc_globalMouseY( )); + break; +case FN_WarpMouse: //Sub Procedure + rc_warpMouse( WARPMOUSE_X, WARPMOUSE_Y ); + break; +case FN_WarpMouseGlobal: //Sub Procedure + rc_warpMouseGlobal( WARPMOUSEGLOBAL_X, WARPMOUSEGLOBAL_Y ); + break; +case FN_SetMouseZone: //Sub Procedure + rc_setMouseZone( SETMOUSEZONE_X, SETMOUSEZONE_Y, SETMOUSEZONE_W, SETMOUSEZONE_H ); + break; +case FN_ClearMouseZone: //Sub Procedure + rc_clearMouseZone( ); + break; +case FN_SoundFromBuffer: //Number Function + rc_push_num(rc_soundFromBuffer( &SOUNDFROMBUFFER_BUFFER, SOUNDFROMBUFFER_BUFFER_SIZE, SOUNDFROMBUFFER_VOL )); + break; +case FN_LoadSound: //Number Function + rc_push_num(rc_loadSound( LOADSOUND_SND_FILE$ )); + break; +case FN_LoadMusic: //Sub Procedure + rc_loadMusic( LOADMUSIC_MUSIC_FILE$ ); + break; +case FN_PlaySound: //Sub Procedure + rc_playSound( PLAYSOUND_SLOT, PLAYSOUND_CHANNEL, PLAYSOUND_LOOPS ); + break; +case FN_PlaySoundTimed: //Sub Procedure + rc_playSoundTimed( PLAYSOUNDTIMED_SLOT, PLAYSOUNDTIMED_CHANNEL, PLAYSOUNDTIMED_LOOPS, PLAYSOUNDTIMED_MS ); + break; +case FN_PlayMusic: //Sub Procedure + rc_playMusic( PLAYMUSIC_MLOOPS ); + break; +case FN_PauseSound: //Sub Procedure + rc_pauseSound( PAUSESOUND_CHANNEL ); + break; +case FN_ResumeSound: //Sub Procedure + rc_resumeSound( RESUMESOUND_CHANNEL ); + break; +case FN_PauseMusic: //Sub Procedure + rc_pauseMusic( ); + break; +case FN_ResumeMusic: //Sub Procedure + rc_resumeMusic( ); + break; +case FN_DeleteSound: //Sub Procedure + rc_deleteSound( DELETESOUND_SLOT ); + break; +case FN_DeleteMusic: //Sub Procedure + rc_deleteMusic( ); + break; +case FN_FadeMusicIn: //Sub Procedure + rc_fadeMusicIn( FADEMUSICIN_FADE_TIME, FADEMUSICIN_LOOPS ); + break; +case FN_FadeMusicOut: //Sub Procedure + rc_fadeMusicOut( FADEMUSICOUT_FADE_TIME ); + break; +case FN_MusicExists: //Number Function + rc_push_num(rc_musicExists( )); + break; +case FN_SetMusicVolume: //Sub Procedure + rc_setMusicVolume( SETMUSICVOLUME_VOL ); + break; +case FN_GetMusicVolume: //Number Function + rc_push_num(rc_getMusicVolume( )); + break; +case FN_SetMusicPosition: //Sub Procedure + rc_setMusicPosition( SETMUSICPOSITION_POS ); + break; +case FN_GetMusicPosition: //Number Function + rc_push_num(rc_getMusicPosition( )); + break; +case FN_RewindMusic: //Sub Procedure + rc_rewindMusic( ); + break; +case FN_SetSoundChannels: //Sub Procedure + rc_setSoundChannels( SETSOUNDCHANNELS_MAX_CHANNELS ); + break; +case FN_NumSoundChannels: //Number Function + rc_push_num(rc_numSoundChannels( )); + break; +case FN_SoundIsEnabled: //Number Function + rc_push_num(rc_soundIsEnabled( )); + break; +case FN_SoundExists: //Number Function + rc_push_num(rc_soundExists( SOUNDEXISTS_SLOT )); + break; +case FN_SetChannelVolume: //Sub Procedure + rc_setChannelVolume( SETCHANNELVOLUME_CHANNEL, SETCHANNELVOLUME_VOL ); + break; +case FN_GetChannelVolume: //Number Function + rc_push_num(rc_getChannelVolume( GETCHANNELVOLUME_CHANNEL )); + break; +case FN_SetSoundVolume: //Sub Procedure + rc_setSoundVolume( SETSOUNDVOLUME_SLOT, SETSOUNDVOLUME_VOL ); + break; +case FN_GetSoundVolume: //Number Function + rc_push_num(rc_getSoundVolume( GETSOUNDVOLUME_SLOT )); + break; +case FN_StopMusic: //Sub Procedure + rc_stopMusic( ); + break; +case FN_StopSound: //Sub Procedure + rc_stopSound( STOPSOUND_CHANNEL ); + break; +case FN_SetChannelPanning: //Number Function + rc_push_num(rc_setChannelPanning( SETCHANNELPANNING_CHANNEL, SETCHANNELPANNING_LEFT_VALUE, SETCHANNELPANNING_RIGHT_VALUE )); + break; +case FN_SetChannelDistance: //Number Function + rc_push_num(rc_setChannelDistance( SETCHANNELDISTANCE_CHANNEL, SETCHANNELDISTANCE_DIST_VALUE )); + break; +case FN_ChannelIsPlaying: //Number Function + rc_push_num(rc_channelIsPlaying( CHANNELISPLAYING_CHANNEL )); + break; +case FN_ChannelIsPaused: //Number Function + rc_push_num(rc_channelIsPaused( CHANNELISPAUSED_CHANNEL )); + break; +case FN_QueryAudioSpec: //Number Function + rc_push_num(rc_queryAudioSpec( &QUERYAUDIOSPEC_FREQ, &QUERYAUDIOSPEC_FORMAT, &QUERYAUDIOSPEC_CHANNELS )); + break; +case FN_MusicIsPlaying: //Number Function + rc_push_num(rc_musicIsPlaying( )); + break; +case FN_SetChannelSpacePosition: //Number Function + rc_push_num(rc_setChannelSpacePosition( SETCHANNELSPACEPOSITION_CHANNEL, SETCHANNELSPACEPOSITION_ANGLE, SETCHANNELSPACEPOSITION_DISTANCE )); + break; +case FN_NumJoysticks: //Number Function + rc_push_num(rc_getNumJoysticks( )); + break; +case FN_NumJoyAxes: //Number Function + rc_push_num(rc_numJoyAxes( NUMJOYAXES_JOY_NUM )); + break; +case FN_NumJoyButtons: //Number Function + rc_push_num(rc_numJoyButtons( NUMJOYBUTTONS_JOY_NUM )); + break; +case FN_NumJoyHats: //Number Function + rc_push_num(rc_numJoyHats( NUMJOYHATS_JOY_NUM )); + break; +case FN_NumJoyTrackBalls: //Number Function + rc_push_num(rc_numJoyTrackBalls( NUMJOYTRACKBALLS_JOY_NUM )); + break; +case FN_JoyAxis: //Number Function + rc_push_num(rc_joyAxis( JOYAXIS_JOY_NUM, JOYAXIS_JOY_AXIS )); + break; +case FN_JoyButton: //Number Function + rc_push_num(rc_joyButton( JOYBUTTON_JOY_NUM, JOYBUTTON_JOY_BUTTON )); + break; +case FN_JoyHat: //Number Function + rc_push_num(rc_joyHat( JOYHAT_JOY_NUM, JOYHAT_JOY_HAT )); + break; +case FN_GetJoyTrackBall: //Sub Procedure + rc_getJoyTrackBall( GETJOYTRACKBALL_JOY_NUM, GETJOYTRACKBALL_BALL, &GETJOYTRACKBALL_DX, &GETJOYTRACKBALL_DY ); + break; +case FN_JoyName$: //String Function + rc_push_str(rc_joyName( JOYNAME$_JOY_NUM )); + break; +case FN_JoystickIsConnected: //Number Function + rc_push_num(rc_joystickIsConnected( JOYSTICKISCONNECTED_JOY_NUM )); + break; +case FN_JoyRumblePlay: //Sub Procedure + rc_joyRumblePlay( JOYRUMBLEPLAY_JOY_NUM, JOYRUMBLEPLAY_STRENGTH, JOYRUMBLEPLAY_DURATION ); + break; +case FN_JoyRumbleStop: //Sub Procedure + rc_joyRumbleStop( JOYRUMBLESTOP_JOY_NUM ); + break; +case FN_JoystickIsHaptic: //Number Function + rc_push_num(rc_joystickIsHaptic( JOYSTICKISHAPTIC_JOY_NUM )); + break; +case FN_LoadFont: //Number Function + rc_push_num(rc_loadFont( LOADFONT_FNT_FILE$, LOADFONT_FONT_SIZE )); + break; +case FN_DeleteFont: //Sub Procedure + rc_deleteFont( DELETEFONT_SLOT ); + break; +case FN_FontExists: //Number Function + rc_push_num(rc_fontExists( FONTEXISTS_SLOT )); + break; +case FN_SetFont: //Sub Procedure + rc_setFont( SETFONT_SLOT ); + break; +case FN_DrawText: //Sub Procedure + rc_drawText( DRAWTEXT_TXT$, DRAWTEXT_X, DRAWTEXT_Y ); + break; +case FN_RenderText: //Sub Procedure + rc_renderText( RENDERTEXT_SLOT, RENDERTEXT_TXT$ ); + break; +case FN_GetTextSize: //Sub Procedure + rc_getTextSize( GETTEXTSIZE_TXT$, &GETTEXTSIZE_W, &GETTEXTSIZE_H ); + break; +case FN_GetTextWidth: //Number Function + rc_push_num(rc_getTextWidth( GETTEXTWIDTH_TXT$ )); + break; +case FN_GetTextHeight: //Number Function + rc_push_num(rc_getTextHeight( GETTEXTHEIGHT_TXT$ )); + break; +case FN_TouchPressure: //Number Function + rc_push_num(rc_touchPressure( )); + break; +case FN_GetTouch: //Sub Procedure + rc_getTouch( &GETTOUCH_STATUS, &GETTOUCH_X, &GETTOUCH_Y, &GETTOUCH_DX, &GETTOUCH_DY ); + break; +case FN_GetMultiTouch: //Sub Procedure + rc_getMultiTouch( &GETMULTITOUCH_STATUS, &GETMULTITOUCH_X, &GETMULTITOUCH_Y, &GETMULTITOUCH_FINGERS, &GETMULTITOUCH_DIST, &GETMULTITOUCH_THETA ); + break; +case FN_GetTouchFinger: //Sub Procedure + rc_getTouchFinger( GETTOUCHFINGER_FINGER, &GETTOUCHFINGER_X, &GETTOUCHFINGER_Y, &GETTOUCHFINGER_PRESSURE ); + break; +case FN_NumFingers: //Number Function + rc_push_num(rc_numFingers( )); + break; +case FN_GetAccel: //Sub Procedure + rc_getAccel( GETACCEL_ACCEL_NUM, &GETACCEL_X, &GETACCEL_Y, &GETACCEL_Z ); + break; +case FN_AccelName$: //String Function + rc_push_str(rc_accelName( ACCELNAME$_ACCEL_NUM )); + break; +case FN_NumAccels: //Number Function + rc_push_num(rc_numAccels( )); + break; +case FN_GetGyro: //Sub Procedure + rc_getGyro( GETGYRO_GYRO_NUM, &GETGYRO_X, &GETGYRO_Y, &GETGYRO_Z ); + break; +case FN_GyroName$: //String Function + rc_push_str(rc_gyroName( GYRONAME$_GYRO_NUM )); + break; +case FN_NumGyros: //Number Function + rc_push_num(rc_numGyros( )); + break; +case FN_CheckSockets: //Number Function + rc_push_num(rc_checkSockets( CHECKSOCKETS_TIMEOUT_MS )); + break; +case FN_TCP_SocketReady: //Number Function + rc_push_num(rc_tCP_SocketReady( TCP_SOCKETREADY_SOCKET )); + break; +case FN_UDP_SocketReady: //Number Function + rc_push_num(rc_uDP_SocketReady( UDP_SOCKETREADY_SOCKET )); + break; +case FN_TCP_OpenSocket: //Number Function + rc_push_num(rc_tCP_OpenSocket( TCP_OPENSOCKET_HOST$, TCP_OPENSOCKET_PORT )); + break; +case FN_TCP_CloseSocket: //Sub Procedure + rc_tCP_CloseSocket( TCP_CLOSESOCKET_SOCKET ); + break; +case FN_TCP_RemoteHost: //Number Function + rc_push_num(rc_tCP_RemoteHost( TCP_REMOTEHOST_SOCKET )); + break; +case FN_TCP_RemotePort: //Number Function + rc_push_num(rc_tCP_RemotePort( TCP_REMOTEPORT_SOCKET )); + break; +case FN_TCP_GetData: //Number Function + rc_push_num(rc_tCP_GetData( TCP_GETDATA_SOCKET, &TCP_GETDATA_SDATA$, TCP_GETDATA_NUMBYTES )); + break; +case FN_TCP_SendData: //Sub Procedure + rc_tCP_SendData( TCP_SENDDATA_SOCKET, TCP_SENDDATA_SDATA$ ); + break; +case FN_TCP_AcceptSocket: //Number Function + rc_push_num(rc_tCP_AcceptSocket( TCP_ACCEPTSOCKET_SERVER, TCP_ACCEPTSOCKET_CLIENT )); + break; +case FN_UDP_OpenSocket: //Number Function + rc_push_num(rc_uDP_OpenSocket( UDP_OPENSOCKET_PORT )); + break; +case FN_UDP_CloseSocket: //Sub Procedure + rc_uDP_CloseSocket( UDP_CLOSESOCKET_SOCKET ); + break; +case FN_UDP_GetData: //Number Function + rc_push_num(rc_uDP_GetData( UDP_GETDATA_SOCKET, &UDP_GETDATA_SDATA$, &UDP_GETDATA_HOST$, &UDP_GETDATA_PORT )); + break; +case FN_UDP_Length: //Number Function + rc_push_num(rc_uDP_Length( )); + break; +case FN_UDP_MaxLength: //Number Function + rc_push_num(rc_uDP_MaxLength( )); + break; +case FN_UDP_RemoteHost$: //String Function + rc_push_str(rc_uDP_RemoteHost( UDP_REMOTEHOST$_SOCKET )); + break; +case FN_UDP_RemotePort: //Number Function + rc_push_num(rc_uDP_RemotePort( UDP_REMOTEPORT_SOCKET )); + break; +case FN_UDP_SendData: //Sub Procedure + rc_uDP_SendData( UDP_SENDDATA_SOCKET, UDP_SENDDATA_SDATA$, UDP_SENDDATA_HOST$, UDP_SENDDATA_PORT ); + break; +case FN_LoadVideo: //Sub Procedure + rc_loadVideo( LOADVIDEO_VID$ ); + break; +case FN_PlayVideo: //Sub Procedure + rc_playVideo( PLAYVIDEO_VLOOPS ); + break; +case FN_PauseVideo: //Sub Procedure + rc_pauseVideo( ); + break; +case FN_StopVideo: //Sub Procedure + rc_stopVideo( ); + break; +case FN_SetVideoPosition: //Sub Procedure + rc_setVideoPosition( SETVIDEOPOSITION_POS ); + break; +case FN_ResumeVideo: //Sub Procedure + rc_resumeVideo( ); + break; +case FN_GetVideoPosition: //Number Function + rc_push_num(rc_getVideoPosition( )); + break; +case FN_DeleteVideo: //Sub Procedure + rc_deleteVideo( ); + break; +case FN_VideoIsPlaying: //Number Function + rc_push_num(rc_videoIsPlaying( )); + break; +case FN_VideoEnd: //Number Function + rc_push_num(rc_videoEnd( )); + break; +case FN_GetVideoStats: //Sub Procedure + rc_getVideoStats( GETVIDEOSTATS_VFILE$, &GETVIDEOSTATS_VLEN, &GETVIDEOSTATS_VFPS, &GETVIDEOSTATS_FRAME_W, &GETVIDEOSTATS_FRAME_H ); + break; +case FN_SetVideoDrawRect: //Sub Procedure + rc_setVideoDrawRect( SETVIDEODRAWRECT_X, SETVIDEODRAWRECT_Y, SETVIDEODRAWRECT_W, SETVIDEODRAWRECT_H ); + break; +case FN_GetVideoDrawRect: //Sub Procedure + rc_getVideoDrawRect( &GETVIDEODRAWRECT_X, &GETVIDEODRAWRECT_Y, &GETVIDEODRAWRECT_W, &GETVIDEODRAWRECT_H ); + break; +case FN_GetVideoSize: //Sub Procedure + rc_getVideoSize( &GETVIDEOSIZE_W, &GETVIDEOSIZE_H ); + break; +case FN_VideoExists: //Number Function + rc_push_num(rc_videoExists( )); + break; +case FN_SetVideoAlpha: //Sub Procedure + rc_setVideoAlpha( SETVIDEOALPHA_A ); + break; +case FN_SetVideoVolume: //Sub Procedure + rc_setVideoVolume( SETVIDEOVOLUME_VOL ); + break; +case FN_GetVideoVolume: //Number Function + rc_push_num(rc_getVideoVolume( GETVIDEOVOLUME_VOL )); + break; +case FN_System: //Number Function + rc_push_num(rc_system( SYSTEM_CMD$ )); + break; +case FN_OS$: //String Function + rc_push_str(rc_oS( )); + break; +case FN_Command$: //String Function + rc_push_str(rc_command( COMMAND$_ARG )); + break; +case FN_NumCommands: //Number Function + rc_push_num(rc_numCommands( )); + break; +case FN_Env$: //String Function + rc_push_str(rc_env( ENV$_V$ )); + break; +case FN_SetEnv: //Sub Procedure + rc_setEnv( SETENV_VAR$, SETENV_VALUE$ ); + break; +case FN_PrefPath$: //String Function + rc_push_str(rc_prefPath( PREFPATH$_ORG_NAME$, PREFPATH$_APP_NAME$ )); + break; +case FN_Android_GetExternalStoragePath$: //String Function + rc_push_str(rc_android_GetExternalStoragePath( )); + break; +case FN_Android_GetExternalStorageState: //Number Function + rc_push_num(rc_android_GetExternalStorageState( )); + break; +case FN_Android_GetInternalStoragePath$: //String Function + rc_push_str(rc_android_GetInternalStoragePath( )); + break; +case FN_Android_JNI_Message$: //String Function + rc_push_str(rc_android_JNI_Message( ANDROID_JNI_MESSAGE$_ARG$ )); + break; +case FN_Runtime_Utility_Message$: //String Function + rc_push_str(rc_runtime_Utility_Message( RUNTIME_UTILITY_MESSAGE$_ARG$ )); + break; +case FN_GetDesktopDisplayMode: //Sub Procedure + rc_getDesktopDisplayMode( GETDESKTOPDISPLAYMODE_INDEX, &GETDESKTOPDISPLAYMODE_W, &GETDESKTOPDISPLAYMODE_H, &GETDESKTOPDISPLAYMODE_FREQ ); + break; +case FN_GetPowerInfo: //Sub Procedure + rc_getPowerInfo( &GETPOWERINFO_STATUS, &GETPOWERINFO_SECS, &GETPOWERINFO_PCT ); + break; +case FN_EvalJS$: //String Function + rc_push_str(rc_evalJS( EVALJS$_JS_CODE$ )); + break; +case FN_SystemReturnStdOut$: //String Function + rc_push_str(rc_systemReturnStdOut( SYSTEMRETURNSTDOUT$_CMD$ )); + break; +case FN_OpenURL: //Number Function + rc_push_num(rc_openURL( OPENURL_URL$ )); + break; +case FN_MessageBox: //Number Function + rc_push_num(rc_messageBox( MESSAGEBOX_TITLE$, MESSAGEBOX_MSG$ )); + break; +case FN_Runtime$: //String Function + rc_push_str( rcbasic_runtime_path ); + + break; +case FN_NumCPUs: //Number Function + rc_push_num(rc_numCPUs( )); + break; +case FN_DimMatrix: //Number Function + rc_push_num(rc_dimMatrix( DIMMATRIX_M_ROWS, DIMMATRIX_M_COLS )); + break; +case FN_DeleteMatrix: //Sub Procedure + rc_deleteMatrix( DELETEMATRIX_MA ); + break; +case FN_AddMatrix: //Number Function + rc_push_num(rc_addMatrix( ADDMATRIX_MA, ADDMATRIX_MB, ADDMATRIX_MC )); + break; +case FN_AugmentMatrix: //Number Function + rc_push_num(rc_augmentMatrix ( AUGMENTMATRIX _MA, AUGMENTMATRIX _MB, AUGMENTMATRIX _MC )); + break; +case FN_CopyMatrix: //Sub Procedure + rc_copyMatrix( COPYMATRIX_MA, COPYMATRIX_MB ); + break; +case FN_InsertMatrixColumns: //Number Function + rc_push_num(rc_insertMatrixColumns( INSERTMATRIXCOLUMNS_MA, INSERTMATRIXCOLUMNS_C, INSERTMATRIXCOLUMNS_NUM_COLS )); + break; +case FN_InsertMatrixRows: //Number Function + rc_push_num(rc_insertMatrixRows( INSERTMATRIXROWS_MA, INSERTMATRIXROWS_R, INSERTMATRIXROWS_NUM_ROWS )); + break; +case FN_MultiplyMatrix: //Number Function + rc_push_num(rc_multiplyMatrix ( MULTIPLYMATRIX _MA, MULTIPLYMATRIX _MB, MULTIPLYMATRIX _MC )); + break; +case FN_CubeMatrix: //Number Function + rc_push_num(rc_cubeMatrix( CUBEMATRIX_MA, CUBEMATRIX_MB )); + break; +case FN_DeleteMatrixColumns: //Number Function + rc_push_num(rc_deleteMatrixColumns( DELETEMATRIXCOLUMNS_MA, DELETEMATRIXCOLUMNS_C, DELETEMATRIXCOLUMNS_NUM_COLS )); + break; +case FN_DeleteMatrixRows: //Number Function + rc_push_num(rc_deleteMatrixRows( DELETEMATRIXROWS_MA, DELETEMATRIXROWS_R, DELETEMATRIXROWS_NUM_ROWS )); + break; +case FN_ClearMatrix: //Sub Procedure + rc_clearMatrix( CLEARMATRIX_MA ); + break; +case FN_ClearMatrixColumns: //Number Function + rc_push_num(rc_clearMatrixColumns ( CLEARMATRIXCOLUMNS _MA, CLEARMATRIXCOLUMNS _C, CLEARMATRIXCOLUMNS _NUM_COLS )); + break; +case FN_ClearMatrixRows: //Number Function + rc_push_num(rc_clearMatrixRows( CLEARMATRIXROWS_MA, CLEARMATRIXROWS_R, CLEARMATRIXROWS_NUM_ROWS )); + break; +case FN_FillMatrix: //Sub Procedure + rc_fillMatrix( FILLMATRIX_MA, FILLMATRIX_V ); + break; +case FN_FillMatrixColumns: //Number Function + rc_push_num(rc_fillMatrixColumns( FILLMATRIXCOLUMNS_MA, FILLMATRIXCOLUMNS_C, FILLMATRIXCOLUMNS_NUM_COLS, FILLMATRIXCOLUMNS_V )); + break; +case FN_FillMatrixRows: //Number Function + rc_push_num(rc_fillMatrixRows( FILLMATRIXROWS_MA, FILLMATRIXROWS_R, FILLMATRIXROWS_NUM_ROWS, FILLMATRIXROWS_V )); + break; +case FN_CopyMatrixColumns: //Number Function + rc_push_num(rc_copyMatrixColumns( COPYMATRIXCOLUMNS_MA, COPYMATRIXCOLUMNS_MB, COPYMATRIXCOLUMNS_C, COPYMATRIXCOLUMNS_NUM_COLS )); + break; +case FN_CopyMatrixRows: //Number Function + rc_push_num(rc_copyMatrixRows ( COPYMATRIXROWS _MA, COPYMATRIXROWS _MB, COPYMATRIXROWS _R, COPYMATRIXROWS _NUM_ROWS )); + break; +case FN_IdentityMatrix: //Sub Procedure + rc_identityMatrix( IDENTITYMATRIX_MA, IDENTITYMATRIX_N ); + break; +case FN_SolveMatrix: //Number Function + rc_push_num(rc_solveMatrix( SOLVEMATRIX_MA, SOLVEMATRIX_MB, SOLVEMATRIX_MC )); + break; +case FN_IsEqualMatrix: //Number Function + rc_push_num(rc_isEqualMatrix( ISEQUALMATRIX_MA, ISEQUALMATRIX_MB, ISEQUALMATRIX_TOLERANCE )); + break; +case FN_Determinant: //Number Function + rc_push_num(rc_determinant( DETERMINANT_MA )); + break; +case FN_AdjointMatrix: //Number Function + rc_push_num(rc_adjointMatrix( ADJOINTMATRIX_MA, ADJOINTMATRIX_MB )); + break; +case FN_InvertMatrix: //Number Function + rc_push_num(rc_invertMatrix( INVERTMATRIX_MA, INVERTMATRIX_MB )); + break; +case FN_MatrixFromBuffer: //Sub Procedure + rc_matrixFromBuffer( MATRIXFROMBUFFER_MA, MATRIXFROMBUFFER_R, MATRIXFROMBUFFER_C, &MATRIXFROMBUFFER_BUFFER ); + break; +case FN_GetMatrix: //Sub Procedure + rc_getMatrix( &GETMATRIX_BUFFER, GETMATRIX_MA ); + break; +case FN_RandomizeMatrix: //Sub Procedure + rc_randomizeMatrix( RANDOMIZEMATRIX_MA, RANDOMIZEMATRIX_VMIN, RANDOMIZEMATRIX_VMAX ); + break; +case FN_MatrixValue: //Number Function + rc_push_num(rc_matrixValue( MATRIXVALUE_MA, MATRIXVALUE_R, MATRIXVALUE_C )); + break; +case FN_SetMatrixValue: //Sub Procedure + rc_setMatrixValue( SETMATRIXVALUE_MA, SETMATRIXVALUE_R, SETMATRIXVALUE_C, SETMATRIXVALUE_V ); + break; +case FN_ScalarMatrix: //Sub Procedure + rc_scalarMatrix ( SCALARMATRIX _MA, SCALARMATRIX _MB, SCALARMATRIX _S_VALUE ); + break; +case FN_ScalarMatrixColumns: //Number Function + rc_push_num(rc_scalarMatrixColumns( SCALARMATRIXCOLUMNS_MA, SCALARMATRIXCOLUMNS_MB, SCALARMATRIXCOLUMNS_C, SCALARMATRIXCOLUMNS_NUM_COLS, SCALARMATRIXCOLUMNS_S_VALUE )); + break; +case FN_ScalarMatrixRows: //Number Function + rc_push_num(rc_scalarMatrixRows( SCALARMATRIXROWS_MA, SCALARMATRIXROWS_MB, SCALARMATRIXROWS_R, SCALARMATRIXROWS_NUM_ROWS, SCALARMATRIXROWS_S_VALUE )); + break; +case FN_SquareMatrix: //Number Function + rc_push_num(rc_squareMatrix( SQUAREMATRIX_MA, SQUAREMATRIX_MB )); + break; +case FN_CofactorMatrix: //Sub Procedure + rc_cofactorMatrix( COFACTORMATRIX_MA, COFACTORMATRIX_R, COFACTORMATRIX_C ); + break; +case FN_SubtractMatrix: //Number Function + rc_push_num(rc_subtractMatrix ( SUBTRACTMATRIX _MA, SUBTRACTMATRIX _MB, SUBTRACTMATRIX _MC )); + break; +case FN_SwapMatrix: //Sub Procedure + rc_swapMatrix( SWAPMATRIX_MA, SWAPMATRIX_MB ); + break; +case FN_SwapMatrixColumn: //Number Function + rc_push_num(rc_swapMatrixColumn( SWAPMATRIXCOLUMN_MA, SWAPMATRIXCOLUMN_C1, SWAPMATRIXCOLUMN_C2 )); + break; +case FN_SwapMatrixRow: //Number Function + rc_push_num(rc_swapMatrixRow( SWAPMATRIXROW_MA, SWAPMATRIXROW_R1, SWAPMATRIXROW_R2 )); + break; +case FN_TransposeMatrix: //Number Function + rc_push_num(rc_transposeMatrix( TRANSPOSEMATRIX_MA, TRANSPOSEMATRIX_MB )); + break; +case FN_UnAugmentMatrix: //Number Function + rc_push_num(rc_unAugmentMatrix( UNAUGMENTMATRIX_MA, UNAUGMENTMATRIX_MB, UNAUGMENTMATRIX_MC )); + break; +case FN_ZeroMatrix: //Sub Procedure + rc_zeroMatrix( ZEROMATRIX_MA ); + break; +case FN_GetMatrixSize: //Sub Procedure + rc_getMatrixSize( GETMATRIXSIZE_MA, &GETMATRIXSIZE_R, &GETMATRIXSIZE_C ); + break; +case FN_IncrementMatrixRows: //Sub Procedure + rc_incrementMatrixRows( INCREMENTMATRIXROWS_MA, INCREMENTMATRIXROWS_MB, INCREMENTMATRIXROWS_R, INCREMENTMATRIXROWS_NUM_ROWS, INCREMENTMATRIXROWS_VALUE ); + break; +case FN_IncrementMatrixColumns: //Sub Procedure + rc_incrementMatrixColumns( INCREMENTMATRIXCOLUMNS_MA, INCREMENTMATRIXCOLUMNS_MB, INCREMENTMATRIXCOLUMNS_C, INCREMENTMATRIXCOLUMNS_NUM_COLS, INCREMENTMATRIXCOLUMNS_VALUE ); + break; +case FN_JoinMatrixRows: //Sub Procedure + rc_joinMatrixRows( JOINMATRIXROWS_MA, JOINMATRIXROWS_MB, JOINMATRIXROWS_MC ); + break; +case FN_JoinMatrixColumns: //Sub Procedure + rc_joinMatrixColumns( JOINMATRIXCOLUMNS_MA, JOINMATRIXCOLUMNS_MB, JOINMATRIXCOLUMNS_MC ); + break; +case FN_ClipMatrix: //Sub Procedure + rc_clipMatrix( CLIPMATRIX_MA, CLIPMATRIX_R, CLIPMATRIX_C, CLIPMATRIX_NUM_ROWS, CLIPMATRIX_NUM_COLS, CLIPMATRIX_MB ); + break; +case FN_SetMatrixTranslation: //Sub Procedure + rc_setMatrixTranslation( SETMATRIXTRANSLATION_MA, SETMATRIXTRANSLATION_X, SETMATRIXTRANSLATION_Y, SETMATRIXTRANSLATION_Z ); + break; +case FN_SetMatrixRotation: //Sub Procedure + rc_setMatrixRotation( SETMATRIXROTATION_MA, SETMATRIXROTATION_X, SETMATRIXROTATION_Y, SETMATRIXROTATION_Z ); + break; +case FN_SetMatrixScale: //Sub Procedure + rc_setMatrixScale( SETMATRIXSCALE_MA, SETMATRIXSCALE_X, SETMATRIXSCALE_Y, SETMATRIXSCALE_Z ); + break; +case FN_GetMatrixTranslation: //Sub Procedure + rc_getMatrixTranslation( GETMATRIXTRANSLATION_MA, &GETMATRIXTRANSLATION_X, &GETMATRIXTRANSLATION_Y, &GETMATRIXTRANSLATION_Z ); + break; +case FN_GetMatrixRotation: //Sub Procedure + rc_getMatrixRotation( GETMATRIXROTATION_MA, &GETMATRIXROTATION_X, &GETMATRIXROTATION_Y, &GETMATRIXROTATION_Z ); + break; +case FN_GetMatrixScale: //Sub Procedure + rc_getMatrixScale( GETMATRIXSCALE_MA, &GETMATRIXSCALE_X, &GETMATRIXSCALE_Y, &GETMATRIXSCALE_Z ); + break; +case FN_ClipboardText$: //String Function + rc_push_str(rc_clipboardText( )); + break; +case FN_SetClipboardText: //Sub Procedure + rc_setClipboardText( SETCLIPBOARDTEXT_TXT$ ); + break; +case FN_HasClipboardText: //Number Function + rc_push_num(rc_hasClipboardText( )); + break; +case FN_ReadInput_Start: //Sub Procedure + rc_readInput_Start( ); + break; +case FN_ReadInput_Stop: //Sub Procedure + rc_readInput_Stop( ); + break; +case FN_ReadInput_Text$: //String Function + rc_push_str(rc_readInput_Text( )); + break; +case FN_ReadInput_SetText: //Sub Procedure + rc_readInput_SetText( READINPUT_SETTEXT_TXT$ ); + break; +case FN_ReadInput_ToggleBackspace: //Sub Procedure + rc_readInput_ToggleBackspace( READINPUT_TOGGLEBACKSPACE_FLAG ); + break; +case FN_CreateSprite: //Number Function + rc_push_num(rc_createSprite( CREATESPRITE_IMG )); + break; +case FN_DeleteSprite: //Sub Procedure + rc_deleteSprite( DELETESPRITE_SPRITE ); + break; +case FN_SetSpritePosition: //Sub Procedure + rc_setSpritePosition( SETSPRITEPOSITION_SPRITE, SETSPRITEPOSITION_X, SETSPRITEPOSITION_Y ); + break; +case FN_LoadMesh: //Number Function + rc_push_num(rc_loadMesh( LOADMESH_MESH_FILE$ )); + break; +case FN_DeleteMesh: //Sub Procedure + rc_deleteMesh( DELETEMESH_MESH ); + break; +case FN_CreateMesh: //Number Function + rc_push_num(rc_createMesh( )); + break; +case FN_AddMeshBuffer: //Sub Procedure + rc_addMeshBuffer( ADDMESHBUFFER_MESH, ADDMESHBUFFER_VERTEX_COUNT, &ADDMESHBUFFER_VERTEX_DATA, &ADDMESHBUFFER_NORMAL_DATA, &ADDMESHBUFFER_UV_DATA, ADDMESHBUFFER_INDEX_COUNT, &ADDMESHBUFFER_INDEX_DATA ); + break; +case FN_LoadMeshFromArchive: //Number Function + rc_push_num(rc_loadMeshFromArchive( LOADMESHFROMARCHIVE_ARCHIVE$, LOADMESHFROMARCHIVE_MESH_FILE$ )); + break; +case FN_CreateMeshActor: //Number Function + rc_push_num(rc_createMeshActor( CREATEMESHACTOR_MESH )); + break; +case FN_CreateMeshOctreeActor: //Number Function + rc_push_num(rc_createMeshOctreeActor( CREATEMESHOCTREEACTOR_MESH )); + break; +case FN_CreateCubeActor: //Number Function + rc_push_num(rc_createCubeActor( CREATECUBEACTOR_CUBE_SIZE )); + break; +case FN_CreateSphereActor: //Number Function + rc_push_num(rc_createSphereActor( CREATESPHEREACTOR_RADIUS )); + break; +case FN_CreateWaterPlaneActor: //Number Function + rc_push_num(rc_createWaterPlaneActor( CREATEWATERPLANEACTOR_W, CREATEWATERPLANEACTOR_H )); + break; +case FN_CreateLightActor: //Number Function + rc_push_num(rc_createLightActor( )); + break; +case FN_CreateBillboardActor: //Number Function + rc_push_num(rc_createBillboardActor( )); + break; +case FN_CreateTerrainActor: //Number Function + rc_push_num(rc_createTerrainActor( CREATETERRAINACTOR_HMAP_FILE$ )); + break; +case FN_DeleteActor: //Sub Procedure + rc_deleteActor( DELETEACTOR_ACTOR ); + break; +case FN_GetActorTransform: //Sub Procedure + rc_getActorTransform( GETACTORTRANSFORM_ACTOR, GETACTORTRANSFORM_MATRIX ); + break; +case FN_SetActorPosition: //Sub Procedure + rc_setActorPosition( SETACTORPOSITION_ACTOR, SETACTORPOSITION_X, SETACTORPOSITION_Y, SETACTORPOSITION_Z ); + break; +case FN_TranslateActor: //Sub Procedure + rc_translateActor( TRANSLATEACTOR_ACTOR, TRANSLATEACTOR_X, TRANSLATEACTOR_Y, TRANSLATEACTOR_Z ); + break; +case FN_TranslateActorWorld: //Sub Procedure + rc_translateActorWorld( TRANSLATEACTORWORLD_ACTOR, TRANSLATEACTORWORLD_X, TRANSLATEACTORWORLD_Y, TRANSLATEACTORWORLD_Z ); + break; +case FN_GetActorPosition: //Sub Procedure + rc_getActorPosition( GETACTORPOSITION_ACTOR, &GETACTORPOSITION_X, &GETACTORPOSITION_Y, &GETACTORPOSITION_Z ); + break; +case FN_SetActorScale: //Sub Procedure + rc_setActorScale( SETACTORSCALE_ACTOR, SETACTORSCALE_X, SETACTORSCALE_Y, SETACTORSCALE_Z ); + break; +case FN_ScaleActor: //Sub Procedure + rc_scaleActor( SCALEACTOR_ACTOR, SCALEACTOR_X, SCALEACTOR_Y, SCALEACTOR_Z ); + break; +case FN_GetActorScale: //Sub Procedure + rc_getActorScale( GETACTORSCALE_ACTOR, &GETACTORSCALE_X, &GETACTORSCALE_Y, &GETACTORSCALE_Z ); + break; +case FN_SetActorRotation: //Sub Procedure + rc_setActorRotation( SETACTORROTATION_ACTOR, SETACTORROTATION_X, SETACTORROTATION_Y, SETACTORROTATION_Z ); + break; +case FN_RotateActor: //Sub Procedure + rc_rotateActor( ROTATEACTOR_ACTOR, ROTATEACTOR_X, ROTATEACTOR_Y, ROTATEACTOR_Z ); + break; +case FN_GetActorRotation: //Sub Procedure + rc_getActorRotation( GETACTORROTATION_ACTOR, &GETACTORROTATION_X, &GETACTORROTATION_Y, &GETACTORROTATION_Z ); + break; +case FN_SetActorVisible: //Sub Procedure + rc_setActorVisible( SETACTORVISIBLE_ACTOR, SETACTORVISIBLE_FLAG ); + break; +case FN_ActorIsVisible: //Number Function + rc_push_num(rc_actorIsVisible( ACTORISVISIBLE_ACTOR )); + break; +case FN_SetActorAutoCulling: //Sub Procedure + rc_setActorAutoCulling( SETACTORAUTOCULLING_ACTOR, SETACTORAUTOCULLING_CULL_TYPE ); + break; +case FN_GetActorAutoCulling: //Number Function + rc_push_num(rc_getActorAutoCulling( GETACTORAUTOCULLING_ACTOR )); + break; +case FN_AddActorShadow: //Sub Procedure + rc_addActorShadow( ADDACTORSHADOW_ACTOR ); + break; +case FN_RemoveActorShadow: //Sub Procedure + rc_removeActorShadow( REMOVEACTORSHADOW_ACTOR ); + break; +case FN_SetGravity3D: //Sub Procedure + rc_setGravity3D( SETGRAVITY3D_X, SETGRAVITY3D_Y, SETGRAVITY3D_Z ); + break; +case FN_GetGravity3D: //Sub Procedure + rc_getGravity3D( &GETGRAVITY3D_X, &GETGRAVITY3D_Y, &GETGRAVITY3D_Z ); + break; +case FN_SetActorCollisionShape: //Sub Procedure + rc_setActorCollisionShape( SETACTORCOLLISIONSHAPE_ACTOR, SETACTORCOLLISIONSHAPE_SHAPE_TYPE, SETACTORCOLLISIONSHAPE_MASS ); + break; +case FN_GetActorCollisionShape: //Number Function + rc_push_num(rc_getActorCollisionShape( GETACTORCOLLISIONSHAPE_ACTOR )); + break; +case FN_SetActorSolid: //Sub Procedure + rc_setActorSolid( SETACTORSOLID_ACTOR, SETACTORSOLID_FLAG ); + break; +case FN_ActorIsSolid: //Number Function + rc_push_num(rc_actorIsSolid( ACTORISSOLID_ACTOR )); + break; +case FN_GetActorCollision: //Number Function + rc_push_num(rc_getActorCollision( GETACTORCOLLISION_ACTOR1, GETACTORCOLLISION_ACTOR2 )); + break; +case FN_SetActorGravity: //Sub Procedure + rc_setActorGravity( SETACTORGRAVITY_ACTOR, SETACTORGRAVITY_X, SETACTORGRAVITY_Y, SETACTORGRAVITY_Z ); + break; +case FN_GetActorGravity: //Sub Procedure + rc_getActorGravity( GETACTORGRAVITY_ACTOR, &GETACTORGRAVITY_X, &GETACTORGRAVITY_Y, &GETACTORGRAVITY_Z ); + break; +case FN_setActorDamping: //Sub Procedure + rc_setActorDamping( SETACTORDAMPING_ACTOR, SETACTORDAMPING_LIN_DAMPING, SETACTORDAMPING_ANG_DAMPING ); + break; +case FN_getActorLinearDamping: //Number Function + rc_push_num(rc_ getActorLinearDamping( GETACTORLINEARDAMPING_ACTOR )); + break; +case FN_getActorAngularDamping: //Number Function + rc_push_num(rc_ getActorAngularDamping( GETACTORANGULARDAMPING_ACTOR )); + break; +case FN_getActorLinearSleepThreshold: //Number Function + rc_push_num(rc_ getActorLinearSleepThreshold( GETACTORLINEARSLEEPTHRESHOLD_ACTOR )); + break; +case FN_getActorAngularSleepThreshold: //Number Function + rc_push_num(rc_ getActorAngularSleepThreshold( GETACTORANGULARSLEEPTHRESHOLD_ACTOR )); + break; +case FN_applyActorDamping: //Sub Procedure + rc_applyActorDamping( APPLYACTORDAMPING_ACTOR, APPLYACTORDAMPING_TIMESTEP ); + break; +case FN_setActorMassProperties: //Sub Procedure + rc_setActorMassProperties( SETACTORMASSPROPERTIES_ACTOR, SETACTORMASSPROPERTIES_MASS, SETACTORMASSPROPERTIES_INERTIA_X, SETACTORMASSPROPERTIES_INERTIA_Y, SETACTORMASSPROPERTIES_INERTIA_Z ); + break; +case FN_getActorLinearFactor: //Sub Procedure + rc_getActorLinearFactor( GETACTORLINEARFACTOR_ACTOR, &GETACTORLINEARFACTOR_X, &GETACTORLINEARFACTOR_Y, &GETACTORLINEARFACTOR_Z ); + break; +case FN_setActorLinearFactor: //Sub Procedure + rc_setActorLinearFactor( SETACTORLINEARFACTOR_ACTOR, SETACTORLINEARFACTOR_X, SETACTORLINEARFACTOR_Y, SETACTORLINEARFACTOR_Z ); + break; +case FN_getActorInverseMass: //Number Function + rc_push_num(rc_ getActorInverseMass( GETACTORINVERSEMASS_ACTOR )); + break; +case FN_integrateActorVelocities: //Sub Procedure + rc_integrateActorVelocities( INTEGRATEACTORVELOCITIES_ACTOR, INTEGRATEACTORVELOCITIES_STEP ); + break; +case FN_applyActorCentralForceLocal: //Sub Procedure + rc_applyActorCentralForceLocal( APPLYACTORCENTRALFORCELOCAL_ACTOR, APPLYACTORCENTRALFORCELOCAL_X, APPLYACTORCENTRALFORCELOCAL_Y, APPLYACTORCENTRALFORCELOCAL_Z ); + break; +case FN_applyActorCentralForceWorld: //Sub Procedure + rc_applyActorCentralForceWorld( APPLYACTORCENTRALFORCEWORLD_ACTOR, APPLYACTORCENTRALFORCEWORLD_X, APPLYACTORCENTRALFORCEWORLD_Y, APPLYACTORCENTRALFORCEWORLD_Z ); + break; +case FN_getActorTotalForce: //Sub Procedure + rc_getActorTotalForce( GETACTORTOTALFORCE_ACTOR, &GETACTORTOTALFORCE_X, &GETACTORTOTALFORCE_Y, &GETACTORTOTALFORCE_Z ); + break; +case FN_getActorTotalTorque: //Sub Procedure + rc_getActorTotalTorque( GETACTORTOTALTORQUE_ACTOR, &GETACTORTOTALTORQUE_X, &GETACTORTOTALTORQUE_Y, &GETACTORTOTALTORQUE_Z ); + break; +case FN_getActorInverseInertiaDiagLocal: //Sub Procedure + rc_getActorInverseInertiaDiagLocal( GETACTORINVERSEINERTIADIAGLOCAL_ACTOR, &GETACTORINVERSEINERTIADIAGLOCAL_X, &GETACTORINVERSEINERTIADIAGLOCAL_Y, &GETACTORINVERSEINERTIADIAGLOCAL_Z ); + break; +case FN_setActorInverseInertiaDiagLocal: //Sub Procedure + rc_setActorInverseInertiaDiagLocal( SETACTORINVERSEINERTIADIAGLOCAL_ACTOR, SETACTORINVERSEINERTIADIAGLOCAL_X, SETACTORINVERSEINERTIADIAGLOCAL_Y, SETACTORINVERSEINERTIADIAGLOCAL_Z ); + break; +case FN_setActorSleepThresholds: //Sub Procedure + rc_setActorSleepThresholds( SETACTORSLEEPTHRESHOLDS_ACTOR, SETACTORSLEEPTHRESHOLDS_LINEAR, SETACTORSLEEPTHRESHOLDS_ANGULAR ); + break; +case FN_applyActorTorqueLocal: //Sub Procedure + rc_applyActorTorqueLocal( APPLYACTORTORQUELOCAL_ACTOR, APPLYACTORTORQUELOCAL_X, APPLYACTORTORQUELOCAL_Y, APPLYACTORTORQUELOCAL_Z ); + break; +case FN_applyActorTorqueWorld: //Sub Procedure + rc_applyActorTorqueWorld( APPLYACTORTORQUEWORLD_ACTOR, APPLYACTORTORQUEWORLD_X, APPLYACTORTORQUEWORLD_Y, APPLYACTORTORQUEWORLD_Z ); + break; +case FN_applyActorForceLocal: //Sub Procedure + rc_applyActorForceLocal( APPLYACTORFORCELOCAL_ACTOR, APPLYACTORFORCELOCAL_X, APPLYACTORFORCELOCAL_Y, APPLYACTORFORCELOCAL_Z, APPLYACTORFORCELOCAL_REL_X, APPLYACTORFORCELOCAL_REL_Y, APPLYACTORFORCELOCAL_REL_Z ); + break; +case FN_applyActorForceWorld: //Sub Procedure + rc_applyActorForceWorld( APPLYACTORFORCEWORLD_ACTOR, APPLYACTORFORCEWORLD_X, APPLYACTORFORCEWORLD_Y, APPLYACTORFORCEWORLD_Z, APPLYACTORFORCEWORLD_REL_X, APPLYACTORFORCEWORLD_REL_Y, APPLYACTORFORCEWORLD_REL_Z ); + break; +case FN_applyActorCentralImpulseLocal: //Sub Procedure + rc_applyActorCentralImpulseLocal( APPLYACTORCENTRALIMPULSELOCAL_ACTOR, APPLYACTORCENTRALIMPULSELOCAL_X, APPLYACTORCENTRALIMPULSELOCAL_Y, APPLYACTORCENTRALIMPULSELOCAL_Z ); + break; +case FN_applyActorCentralImpulseWorld: //Sub Procedure + rc_applyActorCentralImpulseWorld( APPLYACTORCENTRALIMPULSEWORLD_ACTOR, APPLYACTORCENTRALIMPULSEWORLD_X, APPLYACTORCENTRALIMPULSEWORLD_Y, APPLYACTORCENTRALIMPULSEWORLD_Z ); + break; +case FN_applyActorTorqueImpulseLocal: //Sub Procedure + rc_applyActorTorqueImpulseLocal( APPLYACTORTORQUEIMPULSELOCAL_ACTOR, APPLYACTORTORQUEIMPULSELOCAL_X, APPLYACTORTORQUEIMPULSELOCAL_Y, APPLYACTORTORQUEIMPULSELOCAL_Z ); + break; +case FN_applyActorTorqueImpulseWorld: //Sub Procedure + rc_applyActorTorqueImpulseWorld( APPLYACTORTORQUEIMPULSEWORLD_ACTOR, APPLYACTORTORQUEIMPULSEWORLD_X, APPLYACTORTORQUEIMPULSEWORLD_Y, APPLYACTORTORQUEIMPULSEWORLD_Z ); + break; +case FN_applyActorImpulseLocal: //Sub Procedure + rc_applyActorImpulseLocal( APPLYACTORIMPULSELOCAL_ACTOR, APPLYACTORIMPULSELOCAL_X, APPLYACTORIMPULSELOCAL_Y, APPLYACTORIMPULSELOCAL_Z, APPLYACTORIMPULSELOCAL_REL_X, APPLYACTORIMPULSELOCAL_REL_Y, APPLYACTORIMPULSELOCAL_REL_Z ); + break; +case FN_applyActorImpulseWorld: //Sub Procedure + rc_applyActorImpulseWorld( APPLYACTORIMPULSEWORLD_ACTOR, APPLYACTORIMPULSEWORLD_X, APPLYACTORIMPULSEWORLD_Y, APPLYACTORIMPULSEWORLD_Z, APPLYACTORIMPULSEWORLD_REL_X, APPLYACTORIMPULSEWORLD_REL_Y, APPLYACTORIMPULSEWORLD_REL_Z ); + break; +case FN_clearActorForces: //Sub Procedure + rc_clearActorForces( CLEARACTORFORCES_ACTOR ); + break; +case FN_updateActorInertiaTensor: //Sub Procedure + rc_updateActorInertiaTensor( UPDATEACTORINERTIATENSOR_ACTOR ); + break; +case FN_getActorCOMPosition: //Sub Procedure + rc_getActorCOMPosition( GETACTORCOMPOSITION_ACTOR, &GETACTORCOMPOSITION_X, &GETACTORCOMPOSITION_Y, &GETACTORCOMPOSITION_Z ); + break; +case FN_getActorRotationQ: //Sub Procedure + rc_getActorRotationQ( GETACTORROTATIONQ_ACTOR, &GETACTORROTATIONQ_X, &GETACTORROTATIONQ_Y, &GETACTORROTATIONQ_Z, &GETACTORROTATIONQ_W ); + break; +case FN_getActorLinearVelocity: //Sub Procedure + rc_getActorLinearVelocity( GETACTORLINEARVELOCITY_ACTOR, &GETACTORLINEARVELOCITY_X, &GETACTORLINEARVELOCITY_Y, &GETACTORLINEARVELOCITY_Z ); + break; +case FN_getActorAngularVelocity: //Sub Procedure + rc_getActorAngularVelocity( GETACTORANGULARVELOCITY_ACTOR, &GETACTORANGULARVELOCITY_X, &GETACTORANGULARVELOCITY_Y, &GETACTORANGULARVELOCITY_Z ); + break; +case FN_setActorLinearVelocityLocal: //Sub Procedure + rc_setActorLinearVelocityLocal( SETACTORLINEARVELOCITYLOCAL_ACTOR, SETACTORLINEARVELOCITYLOCAL_X, SETACTORLINEARVELOCITYLOCAL_Y, SETACTORLINEARVELOCITYLOCAL_Z ); + break; +case FN_setActorLinearVelocityWorld: //Sub Procedure + rc_setActorLinearVelocityWorld( SETACTORLINEARVELOCITYWORLD_ACTOR, SETACTORLINEARVELOCITYWORLD_X, SETACTORLINEARVELOCITYWORLD_Y, SETACTORLINEARVELOCITYWORLD_Z ); + break; +case FN_setActorAngularVelocityLocal: //Sub Procedure + rc_setActorAngularVelocityLocal( SETACTORANGULARVELOCITYLOCAL_ACTOR, SETACTORANGULARVELOCITYLOCAL_X, SETACTORANGULARVELOCITYLOCAL_Y, SETACTORANGULARVELOCITYLOCAL_Z ); + break; +case FN_setActorAngularVelocityWorld: //Sub Procedure + rc_setActorAngularVelocityWorld( SETACTORANGULARVELOCITYWORLD_ACTOR, SETACTORANGULARVELOCITYWORLD_X, SETACTORANGULARVELOCITYWORLD_Y, SETACTORANGULARVELOCITYWORLD_Z ); + break; +case FN_getActorLocalPointVelocity: //Sub Procedure + rc_getActorLocalPointVelocity( GETACTORLOCALPOINTVELOCITY_ACTOR, GETACTORLOCALPOINTVELOCITY_REL_X, GETACTORLOCALPOINTVELOCITY_REL_Y, GETACTORLOCALPOINTVELOCITY_REL_Z, &GETACTORLOCALPOINTVELOCITY_X, &GETACTORLOCALPOINTVELOCITY_Y, &GETACTORLOCALPOINTVELOCITY_Z ); + break; +case FN_getActorLinearVelocityLocal: //Sub Procedure + rc_getActorLinearVelocityLocal( GETACTORLINEARVELOCITYLOCAL_ACTOR, &GETACTORLINEARVELOCITYLOCAL_X, &GETACTORLINEARVELOCITYLOCAL_Y, &GETACTORLINEARVELOCITYLOCAL_Z ); + break; +case FN_getActorAngularVelocityLocal: //Sub Procedure + rc_getActorAngularVelocityLocal( GETACTORANGULARVELOCITYLOCAL_ACTOR, &GETACTORANGULARVELOCITYLOCAL_X, &GETACTORANGULARVELOCITYLOCAL_Y, &GETACTORANGULARVELOCITYLOCAL_Z ); + break; +case FN_getActorAABB: //Sub Procedure + rc_getActorAABB( GETACTORAABB_ACTOR, &GETACTORAABB_MIN_X, &GETACTORAABB_MIN_Y, &GETACTORAABB_MIN_Z, &GETACTORAABB_MAX_X, &GETACTORAABB_MAX_Y, &GETACTORAABB_MAX_Z ); + break; +case FN_computeActorImpulseDenominator: //Number Function + rc_push_num(rc_ computeActorImpulseDenominator( COMPUTEACTORIMPULSEDENOMINATOR_ACTOR, COMPUTEACTORIMPULSEDENOMINATOR_POS_X, COMPUTEACTORIMPULSEDENOMINATOR_POS_Y, COMPUTEACTORIMPULSEDENOMINATOR_POS_Z, COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_X, COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_Y, COMPUTEACTORIMPULSEDENOMINATOR_NORMAL_Z )); + break; +case FN_computeActorAngularImpulseDenominator: //Number Function + rc_push_num(rc_ computeActorAngularImpulseDenominator( COMPUTEACTORANGULARIMPULSEDENOMINATOR_ACTOR, COMPUTEACTORANGULARIMPULSEDENOMINATOR_X, COMPUTEACTORANGULARIMPULSEDENOMINATOR_Y, COMPUTEACTORANGULARIMPULSEDENOMINATOR_Z )); + break; +case FN_setActorAngularFactor: //Sub Procedure + rc_setActorAngularFactor( SETACTORANGULARFACTOR_ACTOR, SETACTORANGULARFACTOR_X, SETACTORANGULARFACTOR_Y, SETACTORANGULARFACTOR_Z ); + break; +case FN_getActorAngularFactor: //Sub Procedure + rc_getActorAngularFactor( GETACTORANGULARFACTOR_ACTOR, &GETACTORANGULARFACTOR_X, &GETACTORANGULARFACTOR_Y, &GETACTORANGULARFACTOR_Z ); + break; +case FN_computeActorGyroImpulseLocal: //Sub Procedure + rc_computeActorGyroImpulseLocal( COMPUTEACTORGYROIMPULSELOCAL_ACTOR, COMPUTEACTORGYROIMPULSELOCAL_DT, &COMPUTEACTORGYROIMPULSELOCAL_X, &COMPUTEACTORGYROIMPULSELOCAL_Y, &COMPUTEACTORGYROIMPULSELOCAL_Z ); + break; +case FN_computeActorGyroImpulseWorld: //Sub Procedure + rc_computeActorGyroImpulseWorld( COMPUTEACTORGYROIMPULSEWORLD_ACTOR, COMPUTEACTORGYROIMPULSEWORLD_DT, &COMPUTEACTORGYROIMPULSEWORLD_X, &COMPUTEACTORGYROIMPULSEWORLD_Y, &COMPUTEACTORGYROIMPULSEWORLD_Z ); + break; +case FN_getActorLocalInertia: //Sub Procedure + rc_getActorLocalInertia( GETACTORLOCALINERTIA_ACTOR, &GETACTORLOCALINERTIA_X, &GETACTORLOCALINERTIA_Y, &GETACTORLOCALINERTIA_Z ); + break; +case FN_createPointConstraint: //Number Function + rc_push_num(rc_ createPointConstraint( CREATEPOINTCONSTRAINT_ACTORA, CREATEPOINTCONSTRAINT_PXA, CREATEPOINTCONSTRAINT_PYA, CREATEPOINTCONSTRAINT_PZA )); + break; +case FN_createPointConstraintEx: //Number Function + rc_push_num(rc_ createPointConstraintEx( CREATEPOINTCONSTRAINTEX_ACTORA, CREATEPOINTCONSTRAINTEX_ACTORB, CREATEPOINTCONSTRAINTEX_PXA, CREATEPOINTCONSTRAINTEX_PYA, CREATEPOINTCONSTRAINTEX_PZA, CREATEPOINTCONSTRAINTEX_PXB, CREATEPOINTCONSTRAINTEX_PYB, CREATEPOINTCONSTRAINTEX_PZB )); + break; +case FN_setConstraintPivotA: //Sub Procedure + rc_ setConstraintPivotA( SETCONSTRAINTPIVOTA_CONSTRAINT_ID, SETCONSTRAINTPIVOTA_X, SETCONSTRAINTPIVOTA_Y, SETCONSTRAINTPIVOTA_Z ); + break; +case FN_setConstraintPivotB: //Sub Procedure + rc_ setConstraintPivotB( SETCONSTRAINTPIVOTB_CONSTRAINT_ID, SETCONSTRAINTPIVOTB_X, SETCONSTRAINTPIVOTB_Y, SETCONSTRAINTPIVOTB_Z ); + break; +case FN_createHingeConstraint: //Number Function + rc_push_num(rc_ createHingeConstraint( CREATEHINGECONSTRAINT_ACTORA, CREATEHINGECONSTRAINT_PXA, CREATEHINGECONSTRAINT_PYA, CREATEHINGECONSTRAINT_PZA, CREATEHINGECONSTRAINT_AXA, CREATEHINGECONSTRAINT_AYA, CREATEHINGECONSTRAINT_AZA )); + break; +case FN_createHingeConstraintEx: //Number Function + rc_push_num(rc_ createHingeConstraintEx( CREATEHINGECONSTRAINTEX_ACTORA, CREATEHINGECONSTRAINTEX_ACTORB, CREATEHINGECONSTRAINTEX_PXA, CREATEHINGECONSTRAINTEX_PYA, CREATEHINGECONSTRAINTEX_PZA, CREATEHINGECONSTRAINTEX_PXB, CREATEHINGECONSTRAINTEX_PYB, CREATEHINGECONSTRAINTEX_PZB, CREATEHINGECONSTRAINTEX_AXA, CREATEHINGECONSTRAINTEX_AYA, CREATEHINGECONSTRAINTEX_AZA, CREATEHINGECONSTRAINTEX_AXB, CREATEHINGECONSTRAINTEX_AYB, CREATEHINGECONSTRAINTEX_AZB )); + break; +case FN_createSlideConstraint: //Number Function + rc_push_num(rc_ createSlideConstraint( CREATESLIDECONSTRAINT_ACTORA, CREATESLIDECONSTRAINT_FRAMEINB_MATRIX, CREATESLIDECONSTRAINT_USELINEARREFERENCEFRAMEA )); + break; +case FN_createSlideConstraintEx: //Number Function + rc_push_num(rc_ createSlideConstraintEx( CREATESLIDECONSTRAINTEX_ACTORA, CREATESLIDECONSTRAINTEX_ACTORB, CREATESLIDECONSTRAINTEX_FRAMEINA_MATRIX, CREATESLIDECONSTRAINTEX_FRAMEINB_MATRIX, CREATESLIDECONSTRAINTEX_USELINEARREFERENCEFRAMEA )); + break; +case FN_createConeConstraint: //Number Function + rc_push_num(rc_ createConeConstraint( CREATECONECONSTRAINT_ACTORA, CREATECONECONSTRAINT_RBAFRAME_MATRIX )); + break; +case FN_createConeConstraintEx: //Number Function + rc_push_num(rc_ createConeConstraintEx( CREATECONECONSTRAINTEX_ACTORA, CREATECONECONSTRAINTEX_ACTORB, CREATECONECONSTRAINTEX_RBAFRAME_MATRIX, CREATECONECONSTRAINTEX_RBBFRAME_MATRIX )); + break; +case FN_deleteConstraint: //Sub Procedure + rc_ deleteConstraint( DELETECONSTRAINT_CONSTRAINT_ID ); + break; +case FN_getConstraintFrameOffsetA: //Sub Procedure + rc_ getConstraintFrameOffsetA( GETCONSTRAINTFRAMEOFFSETA_CONSTRAINT_ID, & GETCONSTRAINTFRAMEOFFSETA_X, & GETCONSTRAINTFRAMEOFFSETA_Y, & GETCONSTRAINTFRAMEOFFSETA_Z, & GETCONSTRAINTFRAMEOFFSETA_RX, & GETCONSTRAINTFRAMEOFFSETA_RY, & GETCONSTRAINTFRAMEOFFSETA_RZ ); + break; +case FN_getConstraintFrameOffsetB: //Sub Procedure + rc_ getConstraintFrameOffsetB( GETCONSTRAINTFRAMEOFFSETB_CONSTRAINT_ID, & GETCONSTRAINTFRAMEOFFSETB_X, & GETCONSTRAINTFRAMEOFFSETB_Y, & GETCONSTRAINTFRAMEOFFSETB_Z, & GETCONSTRAINTFRAMEOFFSETB_RX, & GETCONSTRAINTFRAMEOFFSETB_RY, & GETCONSTRAINTFRAMEOFFSETB_RZ ); + break; +case FN_useConstraintFrameOffset: //Sub Procedure + rc_ useConstraintFrameOffset( USECONSTRAINTFRAMEOFFSET_CONSTRAINT_ID, USECONSTRAINTFRAMEOFFSET_FLAG ); + break; +case FN_getHingeAngle: //Number Function + rc_push_num(rc_ getHingeAngle( GETHINGEANGLE_CONSTRAINT_ID )); + break; +case FN_getHingeAngleEx: //Number Function + rc_push_num(rc_ getHingeAngleEx( GETHINGEANGLEEX_CONSTRAINT_ID, GETHINGEANGLEEX_T_MATRIXA, GETHINGEANGLEEX_T_MATRIXB )); + break; +case FN_getConstraintBreakingImpulseThreshold: //Number Function + rc_push_num(rc_ getConstraintBreakingImpulseThreshold( GETCONSTRAINTBREAKINGIMPULSETHRESHOLD_CONSTRAINT_ID )); + break; +case FN_getConstraintAFrame: //Number Function + rc_push_num(rc_ getConstraintAFrame( GETCONSTRAINTAFRAME_CONSTRAINT_ID, GETCONSTRAINTAFRAME_MA )); + break; +case FN_getConstraintBFrame: //Number Function + rc_push_num(rc_ getConstraintBFrame( GETCONSTRAINTBFRAME_CONSTRAINT_ID, GETCONSTRAINTBFRAME_MA )); + break; +case FN_setConstraintAxis: //Sub Procedure + rc_ setConstraintAxis( SETCONSTRAINTAXIS_CONSTRAINT_ID, SETCONSTRAINTAXIS_X, SETCONSTRAINTAXIS_Y, SETCONSTRAINTAXIS_Z ); + break; +case FN_setConstraintBreakingImpulseThreshold: //Sub Procedure + rc_ setConstraintBreakingImpulseThreshold( SETCONSTRAINTBREAKINGIMPULSETHRESHOLD_CONSTRAINT_ID, SETCONSTRAINTBREAKINGIMPULSETHRESHOLD_THRESHOLD ); + break; +case FN_setConstraintFrames: //Sub Procedure + rc_ setConstraintFrames( SETCONSTRAINTFRAMES_CONSTRAINT_ID, SETCONSTRAINTFRAMES_FRAMEA_MATRIX, SETCONSTRAINTFRAMES_FRAMEB_MATRIX ); + break; +case FN_setHingeLimit: //Sub Procedure + rc_ setHingeLimit( SETHINGELIMIT_CONSTRAINT_ID, SETHINGELIMIT_LOW, SETHINGELIMIT_HIGH, SETHINGELIMIT_SOFTNESS, SETHINGELIMIT_BIAS_FACTOR, SETHINGELIMIT_RELAXATION_FACTOR ); + break; +case FN_setConeLimit: //Sub Procedure + rc_ setConeLimit( SETCONELIMIT_CONSTRAINT_ID, SETCONELIMIT_SWINGSPAN1, SETCONELIMIT_SWINGSPAN2, SETCONELIMIT_TWISTSPAN, SETCONELIMIT_SOFTNESS, SETCONELIMIT_BIAS_FACTOR, SETCONELIMIT_RELAXATION_FACTOR ); + break; +case FN_getConstraintLimitBiasFactor: //Number Function + rc_push_num(rc_ getConstraintLimitBiasFactor( GETCONSTRAINTLIMITBIASFACTOR_CONSTRAINT_ID )); + break; +case FN_getLimitRelaxationFactor: //Number Function + rc_push_num(rc_ getLimitRelaxationFactor( GETLIMITRELAXATIONFACTOR_CONSTRAINT_ID )); + break; +case FN_getConstraintLimitSign: //Number Function + rc_push_num(rc_ getConstraintLimitSign( GETCONSTRAINTLIMITSIGN_CONSTRAINT_ID )); + break; +case FN_getHingeSolveLimit: //Number Function + rc_push_num(rc_ getHingeSolveLimit( GETHINGESOLVELIMIT_CONSTRAINT_ID )); + break; +case FN_useHingeReferenceFrameA: //Sub Procedure + rc_ useHingeReferenceFrameA( USEHINGEREFERENCEFRAMEA_CONSTRAINT_ID, USEHINGEREFERENCEFRAMEA_FLAG ); + break; +case FN_getConstraintAppliedImpulse: //Number Function + rc_push_num(rc_ getConstraintAppliedImpulse( GETCONSTRAINTAPPLIEDIMPULSE_CONSTRAINT_ID )); + break; +case FN_getConstraintFixedActor: //Number Function + rc_push_num(rc_ getConstraintFixedActor( GETCONSTRAINTFIXEDACTOR_CONSTRAINT_ID )); + break; +case FN_getConstraintPivotA: //Sub Procedure + rc_ getConstraintPivotA( GETCONSTRAINTPIVOTA_CONSTRAINT_ID, & GETCONSTRAINTPIVOTA_X, & GETCONSTRAINTPIVOTA_Y, & GETCONSTRAINTPIVOTA_Z ); + break; +case FN_getConstraintPivotB: //Sub Procedure + rc_ getConstraintPivotB( GETCONSTRAINTPIVOTB_CONSTRAINT_ID, & GETCONSTRAINTPIVOTB_X, & GETCONSTRAINTPIVOTB_Y, & GETCONSTRAINTPIVOTB_Z ); + break; +case FN_getConstraintActorA: //Number Function + rc_push_num(rc_ getConstraintActorA( GETCONSTRAINTACTORA_CONSTRAINT_ID )); + break; +case FN_getConstraintActorB: //Number Function + rc_push_num(rc_ getConstraintActorB( GETCONSTRAINTACTORB_CONSTRAINT_ID )); + break; +case FN_setConstraintSolverIterations: //Sub Procedure + rc_ setConstraintSolverIterations( SETCONSTRAINTSOLVERITERATIONS_CONSTRAINT_ID, SETCONSTRAINTSOLVERITERATIONS_NUM ); + break; +case FN_getConstraintBiasFactor: //Number Function + rc_push_num(rc_ getConstraintBiasFactor( GETCONSTRAINTBIASFACTOR_CONSTRAINT_ID )); + break; +case FN_getConstraintDamping: //Number Function + rc_push_num(rc_ getConstraintDamping( GETCONSTRAINTDAMPING_CONSTRAINT_ID )); + break; +case FN_getConstraintFixThresh: //Number Function + rc_push_num(rc_ getConstraintFixThresh( GETCONSTRAINTFIXTHRESH_CONSTRAINT_ID )); + break; +case FN_getConstraintLimit: //Number Function + rc_push_num(rc_ getConstraintLimit( GETCONSTRAINTLIMIT_CONSTRAINT_ID, GETCONSTRAINTLIMIT_LIMIT_INDEX )); + break; +case FN_getConstraintLimitSoftness: //Number Function + rc_push_num(rc_ getConstraintLimitSoftness( GETCONSTRAINTLIMITSOFTNESS_CONSTRAINT_ID )); + break; +case FN_getConstraintSolverIterations: //Number Function + rc_push_num(rc_ getConstraintSolverIterations( GETCONSTRAINTSOLVERITERATIONS_CONSTRAINT_ID )); + break; +case FN_getConstraintAnglePoint: //Sub Procedure + rc_ getConstraintAnglePoint( GETCONSTRAINTANGLEPOINT_CONSTRAINT_ID, GETCONSTRAINTANGLEPOINT_ANGLE, GETCONSTRAINTANGLEPOINT_C_LEN, & GETCONSTRAINTANGLEPOINT_X, & GETCONSTRAINTANGLEPOINT_Y, & GETCONSTRAINTANGLEPOINT_Z ); + break; +case FN_getConstraintAngularOnly: //Number Function + rc_push_num(rc_ getConstraintAngularOnly( GETCONSTRAINTANGULARONLY_CONSTRAINT_ID )); + break; +case FN_getConstraintSolveSwingLimit: //Number Function + rc_push_num(rc_ getConstraintSolveSwingLimit( GETCONSTRAINTSOLVESWINGLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintSolveTwistLimit: //Number Function + rc_push_num(rc_ getConstraintSolveTwistLimit( GETCONSTRAINTSOLVETWISTLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintSolveLimit: //Number Function + rc_push_num(rc_ getConstraintSolveLimit( GETCONSTRAINTSOLVELIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintSwingSpan1: //Number Function + rc_push_num(rc_ getConstraintSwingSpan1( GETCONSTRAINTSWINGSPAN1_CONSTRAINT_ID )); + break; +case FN_getConstraintSwingSpan2: //Number Function + rc_push_num(rc_ getConstraintSwingSpan2( GETCONSTRAINTSWINGSPAN2_CONSTRAINT_ID )); + break; +case FN_getConstraintTwistAngle: //Number Function + rc_push_num(rc_ getConstraintTwistAngle( GETCONSTRAINTTWISTANGLE_CONSTRAINT_ID )); + break; +case FN_getConstraintTwistLimitSign: //Number Function + rc_push_num(rc_ getConstraintTwistLimitSign( GETCONSTRAINTTWISTLIMITSIGN_CONSTRAINT_ID )); + break; +case FN_getConstraintTwistSpan: //Number Function + rc_push_num(rc_ getConstraintTwistSpan( GETCONSTRAINTTWISTSPAN_CONSTRAINT_ID )); + break; +case FN_setConstraintAngularOnly: //Sub Procedure + rc_ setConstraintAngularOnly( SETCONSTRAINTANGULARONLY_CONSTRAINT_ID, SETCONSTRAINTANGULARONLY_FLAG ); + break; +case FN_setConstraintDamping: //Sub Procedure + rc_ setConstraintDamping( SETCONSTRAINTDAMPING_CONSTRAINT_ID, SETCONSTRAINTDAMPING_DAMPING ); + break; +case FN_setConstraintFixThresh: //Sub Procedure + rc_ setConstraintFixThresh( SETCONSTRAINTFIXTHRESH_CONSTRAINT_ID, SETCONSTRAINTFIXTHRESH_FIXTHRESH ); + break; +case FN_getConstraintAnchorA: //Sub Procedure + rc_ getConstraintAnchorA( GETCONSTRAINTANCHORA_CONSTRAINT_ID, & GETCONSTRAINTANCHORA_X, & GETCONSTRAINTANCHORA_Y, & GETCONSTRAINTANCHORA_Z ); + break; +case FN_getConstraintAnchorB: //Sub Procedure + rc_ getConstraintAnchorB( GETCONSTRAINTANCHORB_CONSTRAINT_ID, & GETCONSTRAINTANCHORB_X, & GETCONSTRAINTANCHORB_Y, & GETCONSTRAINTANCHORB_Z ); + break; +case FN_getConstraintAngDepth: //Number Function + rc_push_num(rc_ getConstraintAngDepth( GETCONSTRAINTANGDEPTH_CONSTRAINT_ID )); + break; +case FN_getConstraintAngularPos: //Number Function + rc_push_num(rc_ getConstraintAngularPos( GETCONSTRAINTANGULARPOS_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingDirAng: //Number Function + rc_push_num(rc_ getConstraintDampingDirAng( GETCONSTRAINTDAMPINGDIRANG_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingDirLin: //Number Function + rc_push_num(rc_ getConstraintDampingDirLin( GETCONSTRAINTDAMPINGDIRLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingLimAng: //Number Function + rc_push_num(rc_ getConstraintDampingLimAng( GETCONSTRAINTDAMPINGLIMANG_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingLimLin: //Number Function + rc_push_num(rc_ getConstraintDampingLimLin( GETCONSTRAINTDAMPINGLIMLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingOrthoAng: //Number Function + rc_push_num(rc_ getConstraintDampingOrthoAng( GETCONSTRAINTDAMPINGORTHOANG_CONSTRAINT_ID )); + break; +case FN_getConstraintDampingOrthoLin: //Number Function + rc_push_num(rc_ getConstraintDampingOrthoLin( GETCONSTRAINTDAMPINGORTHOLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintLinearPos: //Number Function + rc_push_num(rc_ getConstraintLinearPos( GETCONSTRAINTLINEARPOS_CONSTRAINT_ID )); + break; +case FN_getConstraintLinDepth: //Number Function + rc_push_num(rc_ getConstraintLinDepth( GETCONSTRAINTLINDEPTH_CONSTRAINT_ID )); + break; +case FN_getConstraintLowerAngLimit: //Number Function + rc_push_num(rc_ getConstraintLowerAngLimit( GETCONSTRAINTLOWERANGLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintLowerLinLimit: //Number Function + rc_push_num(rc_ getConstraintLowerLinLimit( GETCONSTRAINTLOWERLINLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionDirAng: //Number Function + rc_push_num(rc_ getConstraintRestitutionDirAng( GETCONSTRAINTRESTITUTIONDIRANG_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionDirLin: //Number Function + rc_push_num(rc_ getConstraintRestitutionDirLin( GETCONSTRAINTRESTITUTIONDIRLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionLimAng: //Number Function + rc_push_num(rc_ getConstraintRestitutionLimAng( GETCONSTRAINTRESTITUTIONLIMANG_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionLimLin: //Number Function + rc_push_num(rc_ getConstraintRestitutionLimLin( GETCONSTRAINTRESTITUTIONLIMLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionOrthoAng: //Number Function + rc_push_num(rc_ getConstraintRestitutionOrthoAng( GETCONSTRAINTRESTITUTIONORTHOANG_CONSTRAINT_ID )); + break; +case FN_getConstraintRestitutionOrthoLin: //Number Function + rc_push_num(rc_ getConstraintRestitutionOrthoLin( GETCONSTRAINTRESTITUTIONORTHOLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessDirAng: //Number Function + rc_push_num(rc_ getConstraintSoftnessDirAng( GETCONSTRAINTSOFTNESSDIRANG_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessDirLin: //Number Function + rc_push_num(rc_ getConstraintSoftnessDirLin( GETCONSTRAINTSOFTNESSDIRLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessLimAng: //Number Function + rc_push_num(rc_ getConstraintSoftnessLimAng( GETCONSTRAINTSOFTNESSLIMANG_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessLimLin: //Number Function + rc_push_num(rc_ getConstraintSoftnessLimLin( GETCONSTRAINTSOFTNESSLIMLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessOrthoAng: //Number Function + rc_push_num(rc_ getConstraintSoftnessOrthoAng( GETCONSTRAINTSOFTNESSORTHOANG_CONSTRAINT_ID )); + break; +case FN_getConstraintSoftnessOrthoLin: //Number Function + rc_push_num(rc_ getConstraintSoftnessOrthoLin( GETCONSTRAINTSOFTNESSORTHOLIN_CONSTRAINT_ID )); + break; +case FN_getConstraintSolveAngLimit: //Number Function + rc_push_num(rc_ getConstraintSolveAngLimit( GETCONSTRAINTSOLVEANGLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintSolveLinLimit: //Number Function + rc_push_num(rc_ getConstraintSolveLinLimit( GETCONSTRAINTSOLVELINLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintUpperAngLimit: //Number Function + rc_push_num(rc_ getConstraintUpperAngLimit( GETCONSTRAINTUPPERANGLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintUpperLinLimit: //Number Function + rc_push_num(rc_ getConstraintUpperLinLimit( GETCONSTRAINTUPPERLINLIMIT_CONSTRAINT_ID )); + break; +case FN_getConstraintUseFrameOffset: //Number Function + rc_push_num(rc_ getConstraintUseFrameOffset( GETCONSTRAINTUSEFRAMEOFFSET_CONSTRAINT_ID )); + break; +case FN_setConstraintDampingDirAng: //Sub Procedure + rc_ setConstraintDampingDirAng( SETCONSTRAINTDAMPINGDIRANG_CONSTRAINT_ID, SETCONSTRAINTDAMPINGDIRANG_N ); + break; +case FN_setConstraintDampingDirLin: //Sub Procedure + rc_ setConstraintDampingDirLin( SETCONSTRAINTDAMPINGDIRLIN_CONSTRAINT_ID, SETCONSTRAINTDAMPINGDIRLIN_N ); + break; +case FN_setConstraintDampingLimAng: //Sub Procedure + rc_ setConstraintDampingLimAng( SETCONSTRAINTDAMPINGLIMANG_CONSTRAINT_ID, SETCONSTRAINTDAMPINGLIMANG_N ); + break; +case FN_setConstraintDampingLimLin: //Sub Procedure + rc_ setConstraintDampingLimLin( SETCONSTRAINTDAMPINGLIMLIN_CONSTRAINT_ID, SETCONSTRAINTDAMPINGLIMLIN_N ); + break; +case FN_setConstraintDampingOrthoAng: //Sub Procedure + rc_ setConstraintDampingOrthoAng( SETCONSTRAINTDAMPINGORTHOANG_CONSTRAINT_ID, SETCONSTRAINTDAMPINGORTHOANG_N ); + break; +case FN_setConstraintDampingOrthoLin: //Sub Procedure + rc_ setConstraintDampingOrthoLin( SETCONSTRAINTDAMPINGORTHOLIN_CONSTRAINT_ID, SETCONSTRAINTDAMPINGORTHOLIN_N ); + break; +case FN_setConstraintLowerAngLimit: //Sub Procedure + rc_ setConstraintLowerAngLimit( SETCONSTRAINTLOWERANGLIMIT_CONSTRAINT_ID, SETCONSTRAINTLOWERANGLIMIT_N ); + break; +case FN_setConstraintLowerLinLimit: //Sub Procedure + rc_ setConstraintLowerLinLimit( SETCONSTRAINTLOWERLINLIMIT_CONSTRAINT_ID, SETCONSTRAINTLOWERLINLIMIT_N ); + break; +case FN_setConstraintRestitutionDirAng: //Sub Procedure + rc_ setConstraintRestitutionDirAng( SETCONSTRAINTRESTITUTIONDIRANG_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONDIRANG_N ); + break; +case FN_setConstraintRestitutionDirLin: //Sub Procedure + rc_ setConstraintRestitutionDirLin( SETCONSTRAINTRESTITUTIONDIRLIN_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONDIRLIN_N ); + break; +case FN_setConstraintRestitutionLimAng: //Sub Procedure + rc_ setConstraintRestitutionLimAng( SETCONSTRAINTRESTITUTIONLIMANG_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONLIMANG_N ); + break; +case FN_setConstraintRestitutionLimLin: //Sub Procedure + rc_ setConstraintRestitutionLimLin( SETCONSTRAINTRESTITUTIONLIMLIN_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONLIMLIN_N ); + break; +case FN_setConstraintRestitutionOrthoAng: //Sub Procedure + rc_ setConstraintRestitutionOrthoAng( SETCONSTRAINTRESTITUTIONORTHOANG_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONORTHOANG_N ); + break; +case FN_setConstraintRestitutionOrthoLin: //Sub Procedure + rc_ setConstraintRestitutionOrthoLin( SETCONSTRAINTRESTITUTIONORTHOLIN_CONSTRAINT_ID, SETCONSTRAINTRESTITUTIONORTHOLIN_N ); + break; +case FN_setConstraintSoftnessDirAng: //Sub Procedure + rc_ setConstraintSoftnessDirAng( SETCONSTRAINTSOFTNESSDIRANG_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSDIRANG_N ); + break; +case FN_setConstraintSoftnessDirLin: //Sub Procedure + rc_ setConstraintSoftnessDirLin( SETCONSTRAINTSOFTNESSDIRLIN_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSDIRLIN_N ); + break; +case FN_setConstraintSoftnessLimAng: //Sub Procedure + rc_ setConstraintSoftnessLimAng( SETCONSTRAINTSOFTNESSLIMANG_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSLIMANG_N ); + break; +case FN_setConstraintSoftnessLimLin: //Sub Procedure + rc_ setConstraintSoftnessLimLin( SETCONSTRAINTSOFTNESSLIMLIN_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSLIMLIN_N ); + break; +case FN_setConstraintSoftnessOrthoAng: //Sub Procedure + rc_ setConstraintSoftnessOrthoAng( SETCONSTRAINTSOFTNESSORTHOANG_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSORTHOANG_N ); + break; +case FN_setConstraintSoftnessOrthoLin: //Sub Procedure + rc_ setConstraintSoftnessOrthoLin( SETCONSTRAINTSOFTNESSORTHOLIN_CONSTRAINT_ID, SETCONSTRAINTSOFTNESSORTHOLIN_N ); + break; +case FN_setConstraintUpperAngLimit: //Sub Procedure + rc_ setConstraintUpperAngLimit( SETCONSTRAINTUPPERANGLIMIT_CONSTRAINT_ID, SETCONSTRAINTUPPERANGLIMIT_N ); + break; +case FN_setConstraintUpperLinLimit: //Sub Procedure + rc_ setConstraintUpperLinLimit( SETCONSTRAINTUPPERLINLIMIT_CONSTRAINT_ID, SETCONSTRAINTUPPERLINLIMIT_N ); + break; +case FN_SetCameraPosition: //Sub Procedure + rc_setCameraPosition( SETCAMERAPOSITION_X, SETCAMERAPOSITION_Y, SETCAMERAPOSITION_Z ); + break; +case FN_GetCameraPosition: //Sub Procedure + rc_getCameraPosition( &GETCAMERAPOSITION_X, &GETCAMERAPOSITION_Y, &GETCAMERAPOSITION_Z ); + break; +case FN_TranslateCamera: //Sub Procedure + rc_translateCamera( TRANSLATECAMERA_X, TRANSLATECAMERA_Y, TRANSLATECAMERA_Z ); + break; +case FN_SetCameraRotation: //Sub Procedure + rc_setCameraRotation( SETCAMERAROTATION_X, SETCAMERAROTATION_Y, SETCAMERAROTATION_Z ); + break; +case FN_GetCameraRotation: //Sub Procedure + rc_getCameraRotation( &GETCAMERAROTATION_X, &GETCAMERAROTATION_Y, &GETCAMERAROTATION_Z ); + break; +case FN_RotateCamera: //Sub Procedure + rc_rotateCamera( ROTATECAMERA_X, ROTATECAMERA_Y, ROTATECAMERA_Z ); + break; +case FN_SetCameraFOV: //Sub Procedure + rc_setCameraFOV( SETCAMERAFOV_FOV ); + break; +case FN_GetCameraFOV: //Number Function + rc_push_num(rc_getCameraFOV( )); + break; +case FN_SetCameraAspectRatio: //Sub Procedure + rc_setCameraAspectRatio( SETCAMERAASPECTRATIO_ASPECT ); + break; +case FN_GetCameraAspectRatio: //Number Function + rc_push_num(rc_getCameraAspectRatio( )); + break; +case FN_SetCameraFarValue: //Sub Procedure + rc_setCameraFarValue( SETCAMERAFARVALUE_ZF ); + break; +case FN_GetCameraFarValue: //Number Function + rc_push_num(rc_getCameraFarValue( )); + break; +case FN_SetCameraNearValue: //Sub Procedure + rc_setCameraNearValue( SETCAMERANEARVALUE_ZN ); + break; +case FN_GetCameraNearValue: //Number Function + rc_push_num(rc_getCameraNearValue( )); + break; +case FN_AddSceneSkyBox: //Sub Procedure + rc_addSceneSkyBox( ADDSCENESKYBOX_IMG_TOP, ADDSCENESKYBOX_IMG_BOTTOM, ADDSCENESKYBOX_IMG_LEFT, ADDSCENESKYBOX_IMG_RIGHT, ADDSCENESKYBOX_IMG_FRONT, ADDSCENESKYBOX_IMG_BACK ); + break; +case FN_AddSceneSkyDome: //Sub Procedure + rc_addSceneSkyDome( ADDSCENESKYDOME_IMG ); + break; +case FN_AddSceneSkyDomeEx: //Sub Procedure + rc_addSceneSkyDomeEx( ADDSCENESKYDOMEEX_IMG, ADDSCENESKYDOMEEX_HORIRES, ADDSCENESKYDOMEEX_VERTRES, ADDSCENESKYDOMEEX_TXPERCENTAGE, ADDSCENESKYDOMEEX_SPHEREPERCENTAGE, ADDSCENESKYDOMEEX_RADIUS ); + break; +case FN_RemoveSceneSky: //Sub Procedure + rc_removeSceneSky( ); + break; +case FN_SetWorld3DDeltaTime: //Sub Procedure + rc_setWorld3DDeltaTime( SETWORLD3DDELTATIME_DT ); + break; +case FN_SetWorld3DMaxSubSteps: //Sub Procedure + rc_setWorld3DMaxSubSteps( SETWORLD3DMAXSUBSTEPS_STEPS ); + break; +case FN_SetWorld3DTimeStep: //Sub Procedure + rc_setWorld3DTimeStep( SETWORLD3DTIMESTEP_TS ); + break; +case FN_startParticleEmitter: //Sub Procedure + rc_ startParticleEmitter( STARTPARTICLEEMITTER_ACTOR ); + break; +case FN_stopParticleEmitter: //Sub Procedure + rc_ stopParticleEmitter( STOPPARTICLEEMITTER_ACTOR ); + break; +case FN_setParticleDirection: //Sub Procedure + rc_ setParticleDirection( SETPARTICLEDIRECTION_ACTOR, SETPARTICLEDIRECTION_X, SETPARTICLEDIRECTION_Y, SETPARTICLEDIRECTION_Z ); + break; +case FN_getParticleDirection: //Sub Procedure + rc_ getParticleDirection( GETPARTICLEDIRECTION_ACTOR, & GETPARTICLEDIRECTION_X, & GETPARTICLEDIRECTION_Y, & GETPARTICLEDIRECTION_Z ); + break; +case FN_useParticleEveryMeshVertex: //Sub Procedure + rc_ useParticleEveryMeshVertex( USEPARTICLEEVERYMESHVERTEX_ACTOR, USEPARTICLEEVERYMESHVERTEX_FLAG ); + break; +case FN_particleIsUsingEveryMeshVertex: //Number Function + rc_push_num(rc_ particleIsUsingEveryMeshVertex( PARTICLEISUSINGEVERYMESHVERTEX_ACTOR )); + break; +case FN_setParticleNormalDirectionMod: //Sub Procedure + rc_ setParticleNormalDirectionMod( SETPARTICLENORMALDIRECTIONMOD_ACTOR, SETPARTICLENORMALDIRECTIONMOD_MOD ); + break; +case FN_getParticleNormalDirectionMod: //Number Function + rc_push_num(rc_ getParticleNormalDirectionMod( GETPARTICLENORMALDIRECTIONMOD_ACTOR )); + break; +case FN_useParticleNormalDirection: //Sub Procedure + rc_ useParticleNormalDirection( USEPARTICLENORMALDIRECTION_ACTOR, USEPARTICLENORMALDIRECTION_FLAG ); + break; +case FN_particleIsUsingNormalDirection: //Number Function + rc_push_num(rc_ particleIsUsingNormalDirection( PARTICLEISUSINGNORMALDIRECTION_ACTOR )); + break; +case FN_setParticleMesh: //Sub Procedure + rc_ setParticleMesh( SETPARTICLEMESH_ACTOR, SETPARTICLEMESH_MESH ); + break; +case FN_setParticleMinParticlesPerSecond: //Sub Procedure + rc_ setParticleMinParticlesPerSecond( SETPARTICLEMINPARTICLESPERSECOND_ACTOR, SETPARTICLEMINPARTICLESPERSECOND_MINPARTICLESPERSECOND ); + break; +case FN_getParticleMinParticlesPerSecond: //Number Function + rc_push_num(rc_ getParticleMinParticlesPerSecond( GETPARTICLEMINPARTICLESPERSECOND_ACTOR )); + break; +case FN_setParticleMaxParticlesPerSecond: //Sub Procedure + rc_ setParticleMaxParticlesPerSecond( SETPARTICLEMAXPARTICLESPERSECOND_ACTOR, SETPARTICLEMAXPARTICLESPERSECOND_MAXPARTICLESPERSECOND ); + break; +case FN_getParticleMaxParticlesPerSecond: //Number Function + rc_push_num(rc_ getParticleMaxParticlesPerSecond( GETPARTICLEMAXPARTICLESPERSECOND_ACTOR )); + break; +case FN_setParticleMinStartColor: //Sub Procedure + rc_ setParticleMinStartColor( SETPARTICLEMINSTARTCOLOR_ACTOR, SETPARTICLEMINSTARTCOLOR_COLOR ); + break; +case FN_getParticleMinStartColor: //Number Function + rc_push_num(rc_ getParticleMinStartColor( GETPARTICLEMINSTARTCOLOR_ACTOR )); + break; +case FN_setParticleMaxStartColor: //Sub Procedure + rc_ setParticleMaxStartColor( SETPARTICLEMAXSTARTCOLOR_ACTOR, SETPARTICLEMAXSTARTCOLOR_COLOR ); + break; +case FN_getParticleMaxStartColor: //Number Function + rc_push_num(rc_ getParticleMaxStartColor( GETPARTICLEMAXSTARTCOLOR_ACTOR )); + break; +case FN_setParticleMinLife: //Sub Procedure + rc_ setParticleMinLife( SETPARTICLEMINLIFE_ACTOR, SETPARTICLEMINLIFE_MINLIFE ); + break; +case FN_getParticleMinLife: //Number Function + rc_push_num(rc_ getParticleMinLife( GETPARTICLEMINLIFE_ACTOR )); + break; +case FN_setParticleMaxLife: //Sub Procedure + rc_ setParticleMaxLife( SETPARTICLEMAXLIFE_ACTOR, SETPARTICLEMAXLIFE_MAXLIFE ); + break; +case FN_getParticleMaxLife: //Number Function + rc_push_num(rc_ getParticleMaxLife( GETPARTICLEMAXLIFE_ACTOR )); + break; +case FN_setParticleMaxAngle: //Sub Procedure + rc_ setParticleMaxAngle( SETPARTICLEMAXANGLE_ACTOR, SETPARTICLEMAXANGLE_MAXANGLE ); + break; +case FN_getParticleMaxAngle: //Number Function + rc_push_num(rc_ getParticleMaxAngle( GETPARTICLEMAXANGLE_ACTOR )); + break; +case FN_setParticleMinStartSize: //Sub Procedure + rc_ setParticleMinStartSize( SETPARTICLEMINSTARTSIZE_ACTOR, SETPARTICLEMINSTARTSIZE_W, SETPARTICLEMINSTARTSIZE_H ); + break; +case FN_getParticleMinStartSize: //Sub Procedure + rc_ getParticleMinStartSize( GETPARTICLEMINSTARTSIZE_ACTOR, & GETPARTICLEMINSTARTSIZE_W, & GETPARTICLEMINSTARTSIZE_H ); + break; +case FN_setParticleMaxStartSize: //Sub Procedure + rc_ setParticleMaxStartSize( SETPARTICLEMAXSTARTSIZE_ACTOR, SETPARTICLEMAXSTARTSIZE_W, SETPARTICLEMAXSTARTSIZE_H ); + break; +case FN_getParticleMaxStartSize: //Sub Procedure + rc_ getParticleMaxStartSize( GETPARTICLEMAXSTARTSIZE_ACTOR, & GETPARTICLEMAXSTARTSIZE_W, & GETPARTICLEMAXSTARTSIZE_H ); + break; +case FN_setParticleCenter: //Sub Procedure + rc_ setParticleCenter( SETPARTICLECENTER_ACTOR, SETPARTICLECENTER_X, SETPARTICLECENTER_Y, SETPARTICLECENTER_Z ); + break; +case FN_getParticleCenter: //Sub Procedure + rc_ getParticleCenter( GETPARTICLECENTER_ACTOR, & GETPARTICLECENTER_X, & GETPARTICLECENTER_Y, & GETPARTICLECENTER_Z ); + break; +case FN_setParticleRadius: //Sub Procedure + rc_ setParticleRadius( SETPARTICLERADIUS_ACTOR, SETPARTICLERADIUS_RADIUS ); + break; +case FN_getParticleRadius: //Number Function + rc_push_num(rc_ getParticleRadius( GETPARTICLERADIUS_ACTOR )); + break; +case FN_setParticleRingThickness: //Sub Procedure + rc_ setParticleRingThickness( SETPARTICLERINGTHICKNESS_ACTOR, SETPARTICLERINGTHICKNESS_RINGTHICKNESS ); + break; +case FN_getParticleRingThickness: //Number Function + rc_push_num(rc_ getParticleRingThickness( GETPARTICLERINGTHICKNESS_ACTOR )); + break; +case FN_setParticleBox: //Sub Procedure + rc_ setParticleBox( SETPARTICLEBOX_ACTOR, SETPARTICLEBOX_MIN_X, SETPARTICLEBOX_MIN_Y, SETPARTICLEBOX_MIN_Z, SETPARTICLEBOX_MAX_X, SETPARTICLEBOX_MAX_Y, SETPARTICLEBOX_MAX_Z ); + break; +case FN_getParticleBox: //Sub Procedure + rc_ getParticleBox( GETPARTICLEBOX_ACTOR, & GETPARTICLEBOX_MIN_X, & GETPARTICLEBOX_MIN_Y, & GETPARTICLEBOX_MIN_Z, & GETPARTICLEBOX_MAX_X, & GETPARTICLEBOX_MAX_Y, & GETPARTICLEBOX_MAX_Z ); + break; +case FN_setParticleNormal: //Sub Procedure + rc_ setParticleNormal( SETPARTICLENORMAL_ACTOR, SETPARTICLENORMAL_X, SETPARTICLENORMAL_Y, SETPARTICLENORMAL_Z ); + break; +case FN_getParticleNormal: //Sub Procedure + rc_ getParticleNormal( GETPARTICLENORMAL_ACTOR, & GETPARTICLENORMAL_X, & GETPARTICLENORMAL_Y, & GETPARTICLENORMAL_Z ); + break; +case FN_setParticleLength: //Sub Procedure + rc_ setParticleLength( SETPARTICLELENGTH_ACTOR, SETPARTICLELENGTH_P_LEN ); + break; +case FN_getParticleLength: //Number Function + rc_push_num(rc_ getParticleLength( GETPARTICLELENGTH_ACTOR )); + break; +case FN_useParticleOutlineOnly: //Sub Procedure + rc_ useParticleOutlineOnly( USEPARTICLEOUTLINEONLY_ACTOR, USEPARTICLEOUTLINEONLY_FLAG ); + break; +case FN_particleIsUsingOutlineOnly: //Number Function + rc_push_num(rc_ particleIsUsingOutlineOnly( PARTICLEISUSINGOUTLINEONLY_ACTOR )); + break; +case FN_lightIsCastingShadow: //Number Function + rc_push_num(rc_lightIsCastingShadow( LIGHTISCASTINGSHADOW_ACTOR )); + break; +case FN_getLightType: //Number Function + rc_push_num(rc_getLightType( GETLIGHTTYPE_ACTOR )); + break; +case FN_getLightRadius: //Number Function + rc_push_num(rc_getLightRadius( GETLIGHTRADIUS_ACTOR )); + break; +case FN_setLightType: //Sub Procedure + rc_setLightType( SETLIGHTTYPE_ACTOR, SETLIGHTTYPE_LIGHT_TYPE ); + break; +case FN_setLightRadius: //Sub Procedure + rc_setLightRadius( SETLIGHTRADIUS_ACTOR, SETLIGHTRADIUS_RADIUS ); + break; +case FN_setLightShadowCast: //Sub Procedure + rc_setLightShadowCast( SETLIGHTSHADOWCAST_ACTOR, SETLIGHTSHADOWCAST_FLAG ); + break; +case FN_SetLightAmbientColor: //Sub Procedure + rc_setLightAmbientColor( SETLIGHTAMBIENTCOLOR_ACTOR, SETLIGHTAMBIENTCOLOR_COLOR ); + break; +case FN_GetLightAmbientColor: //Number Function + rc_push_num(rc_getLightAmbientColor( GETLIGHTAMBIENTCOLOR_ACTOR )); + break; +case FN_SetLightAttenuation: //Sub Procedure + rc_setLightAttenuation( SETLIGHTATTENUATION_ACTOR, SETLIGHTATTENUATION_L_CONSTANT, SETLIGHTATTENUATION_L_LINEAR, SETLIGHTATTENUATION_L_QUADRATIC ); + break; +case FN_GetLightAttenuation: //Sub Procedure + rc_getLightAttenuation( GETLIGHTATTENUATION_ACTOR, &GETLIGHTATTENUATION_CONSTANT, &GETLIGHTATTENUATION_LINEAR, &GETLIGHTATTENUATION_QUADRATIC ); + break; +case FN_SetLightDiffuseColor: //Sub Procedure + rc_setLightDiffuseColor( SETLIGHTDIFFUSECOLOR_ACTOR, SETLIGHTDIFFUSECOLOR_COLOR ); + break; +case FN_GetLightDiffuseColor: //Number Function + rc_push_num(rc_getLightDiffuseColor( GETLIGHTDIFFUSECOLOR_ACTOR )); + break; +case FN_SetLightFalloff: //Sub Procedure + rc_setLightFalloff( SETLIGHTFALLOFF_ACTOR, SETLIGHTFALLOFF_FALLOFF ); + break; +case FN_GetLightFalloff: //Number Function + rc_push_num(rc_getLightFalloff( GETLIGHTFALLOFF_ACTOR )); + break; +case FN_SetLightInnerCone: //Sub Procedure + rc_setLightInnerCone( SETLIGHTINNERCONE_ACTOR, SETLIGHTINNERCONE_ANGLE ); + break; +case FN_GetLightInnerCone: //Number Function + rc_push_num(rc_getLightInnerCone( GETLIGHTINNERCONE_ACTOR )); + break; +case FN_SetLightOuterCone: //Sub Procedure + rc_setLightOuterCone( SETLIGHTOUTERCONE_ACTOR, SETLIGHTOUTERCONE_ANGLE ); + break; +case FN_GetLightOuterCone: //Number Function + rc_push_num(rc_getLightOuterCone( GETLIGHTOUTERCONE_ACTOR )); + break; +case FN_SetLightSpecularColor: //Sub Procedure + rc_setLightSpecularColor( SETLIGHTSPECULARCOLOR_ACTOR, SETLIGHTSPECULARCOLOR_COLOR ); + break; +case FN_GetLightSpecularColor: //Number Function + rc_push_num(rc_getLightSpecularColor( GETLIGHTSPECULARCOLOR_ACTOR )); + break; +case FN_GetTerrainPatchAABB: //Sub Procedure + rc_getTerrainPatchAABB( GETTERRAINPATCHAABB_ACTOR, GETTERRAINPATCHAABB_PATCHX, GETTERRAINPATCHAABB_PATCHZ, &GETTERRAINPATCHAABB_MINX, &GETTERRAINPATCHAABB_MINY, &GETTERRAINPATCHAABB_MINZ, &GETTERRAINPATCHAABB_MAXX, &GETTERRAINPATCHAABB_MAXY, &GETTERRAINPATCHAABB_MAXZ ); + break; +case FN_GetTerrainPatchLOD: //Number Function + rc_push_num(rc_getTerrainPatchLOD( GETTERRAINPATCHLOD_ACTOR, GETTERRAINPATCHLOD_PATCHX, GETTERRAINPATCHLOD_PATCHZ )); + break; +case FN_GetTerrainHeight: //Number Function + rc_push_num(rc_getTerrainHeight( GETTERRAINHEIGHT_ACTOR, GETTERRAINHEIGHT_PATCHX, GETTERRAINHEIGHT_PATCHZ )); + break; +case FN_GetTerrainCenter: //Sub Procedure + rc_getTerrainCenter( GETTERRAINCENTER_ACTOR, &GETTERRAINCENTER_X, &GETTERRAINCENTER_Y, &GETTERRAINCENTER_Z ); + break; +case FN_SetTerrainLODDistance: //Sub Procedure + rc_setTerrainLODDistance( SETTERRAINLODDISTANCE_ACTOR, SETTERRAINLODDISTANCE_LOD, SETTERRAINLODDISTANCE_DISTANCE ); + break; +case FN_ScaleTerrainTexture: //Sub Procedure + rc_scaleTerrainTexture( SCALETERRAINTEXTURE_ACTOR, SCALETERRAINTEXTURE_SCALE, SCALETERRAINTEXTURE_SCALE2 ); + break; +case FN_SetTerrainCameraMovementDelta: //Sub Procedure + rc_setTerrainCameraMovementDelta( SETTERRAINCAMERAMOVEMENTDELTA_ACTOR, SETTERRAINCAMERAMOVEMENTDELTA_DELTA ); + break; +case FN_SetTerrainCameraRotationDelta: //Sub Procedure + rc_setTerrainCameraRotationDelta( SETTERRAINCAMERAROTATIONDELTA_ACTOR, SETTERRAINCAMERAROTATIONDELTA_DELTA ); + break; +case FN_SetTerrainPatchLOD: //Sub Procedure + rc_setTerrainPatchLOD( SETTERRAINPATCHLOD_ACTOR, SETTERRAINPATCHLOD_PATCHX, SETTERRAINPATCHLOD_PATCHZ, SETTERRAINPATCHLOD_LOD ); + break; +case FN_setWaterWindForce: //Sub Procedure + rc_setWaterWindForce( SETWATERWINDFORCE_ACTOR, SETWATERWINDFORCE_F ); + break; +case FN_getWaterWindForce: //Number Function + rc_push_num(rc_ getWaterWindForce( GETWATERWINDFORCE_ACTOR )); + break; +case FN_setWaterWaveHeight: //Sub Procedure + rc_setWaterWaveHeight( SETWATERWAVEHEIGHT_ACTOR, SETWATERWAVEHEIGHT_H ); + break; +case FN_getWaterWaveHeight: //Number Function + rc_push_num(rc_ getWaterWaveHeight( GETWATERWAVEHEIGHT_ACTOR )); + break; +case FN_setWaterWindDirection: //Sub Procedure + rc_setWaterWindDirection( SETWATERWINDDIRECTION_ACTOR, SETWATERWINDDIRECTION_X, SETWATERWINDDIRECTION_Z ); + break; +case FN_getWaterWindDirection: //Sub Procedure + rc_getWaterWindDirection( GETWATERWINDDIRECTION_ACTOR, &GETWATERWINDDIRECTION_X, &GETWATERWINDDIRECTION_Z ); + break; +case FN_setWaterColor: //Sub Procedure + rc_setWaterColor( SETWATERCOLOR_ACTOR, SETWATERCOLOR_C ); + break; +case FN_getWaterColor: //Number Function + rc_push_num(rc_getWaterColor( GETWATERCOLOR_ACTOR )); + break; +case FN_setWaterColorBlendFactor: //Sub Procedure + rc_setWaterColorBlendFactor( SETWATERCOLORBLENDFACTOR_ACTOR, SETWATERCOLORBLENDFACTOR_CBFACTOR ); + break; +case FN_getWaterColorBlendFactor: //Number Function + rc_push_num(rc_ getWaterColorBlendFactor( GETWATERCOLORBLENDFACTOR_ACTOR )); + break; +case FN_SetActorAnimation: //Sub Procedure + rc_setActorAnimation( SETACTORANIMATION_ACTOR, SETACTORANIMATION_START_FRAME, SETACTORANIMATION_END_FRAME ); + break; +case FN_SetActorAnimationSpeed: //Sub Procedure + rc_setActorAnimationSpeed( SETACTORANIMATIONSPEED_ACTOR, SETACTORANIMATIONSPEED_SPEED ); + break; +case FN_SetActorFrame: //Sub Procedure + rc_setActorFrame( SETACTORFRAME_ACTOR, SETACTORFRAME_FRAME ); + break; +case FN_SetActorMD2Animation: //Number Function + rc_push_num(rc_setActorMD2Animation( SETACTORMD2ANIMATION_ACTOR, SETACTORMD2ANIMATION_ANIM )); + break; +case FN_SetActorMD2AnimationByName: //Number Function + rc_push_num(rc_setActorMD2AnimationByName( SETACTORMD2ANIMATIONBYNAME_ACTOR, SETACTORMD2ANIMATIONBYNAME_ANIM_NAME$ )); + break; +case FN_GetActorAnimationSpeed: //Number Function + rc_push_num(rc_getActorAnimationSpeed( GETACTORANIMATIONSPEED_ACTOR )); + break; +case FN_GetActorEndFrame: //Number Function + rc_push_num(rc_getActorEndFrame( GETACTORENDFRAME_ACTOR )); + break; +case FN_GetActorCurrentFrame: //Number Function + rc_push_num(rc_getActorCurrentFrame( GETACTORCURRENTFRAME_ACTOR )); + break; +case FN_GetActorStartFrame: //Number Function + rc_push_num(rc_getActorStartFrame( GETACTORSTARTFRAME_ACTOR )); + break; +case FN_StartActorTransition: //Sub Procedure + rc_startActorTransition( STARTACTORTRANSITION_ACTOR, STARTACTORTRANSITION_FRAME, STARTACTORTRANSITION_TRANSITION_TIME ); + break; +case FN_StopActorTransition: //Sub Procedure + rc_stopActorTransition( STOPACTORTRANSITION_ACTOR ); + break; +case FN_ActorIsInTransition: //Number Function + rc_push_num(rc_actorIsInTransition( ACTORISINTRANSITION_ACTOR )); + break; +case FN_GetActorTransitionTime: //Number Function + rc_push_num(rc_getActorTransitionTime( GETACTORTRANSITIONTIME_ACTOR )); + break; +case FN_actorAnimationIsLooped: //Number Function + rc_push_num(rc_actorAnimationIsLooped( ACTORANIMATIONISLOOPED_ACTOR )); + break; +case FN_loopActorAnimation: //Sub Procedure + rc_loopActorAnimation( LOOPACTORANIMATION_ACTOR, LOOPACTORANIMATION_FLAG ); + break; +case FN_createMaterial: //Number Function + rc_push_num(rc_ createMaterial( )); + break; +case FN_deleteMaterial: //Sub Procedure + rc_ deleteMaterial( DELETEMATERIAL_MATERIAL_ID ); + break; +case FN_setActorMaterial: //Sub Procedure + rc_ setActorMaterial( SETACTORMATERIAL_ACTOR, SETACTORMATERIAL_MATERIAL_NUM, SETACTORMATERIAL_MATERIAL_ID ); + break; +case FN_getActorMaterial: //Number Function + rc_push_num(rc_ getActorMaterial( GETACTORMATERIAL_ACTOR, GETACTORMATERIAL_MATERIAL_NUM )); + break; +case FN_copyActorMaterial: //Number Function + rc_push_num(rc_ copyActorMaterial( COPYACTORMATERIAL_ACTOR, COPYACTORMATERIAL_MATERIAL_NUM )); + break; +case FN_copyMaterial: //Number Function + rc_push_num(rc_ copyMaterial( COPYMATERIAL_SMATERIAL_ID )); + break; +case FN_setMaterialTextureCanvas: //Sub Procedure + rc_ setMaterialTextureCanvas( SETMATERIALTEXTURECANVAS_MATERIAL_ID, SETMATERIALTEXTURECANVAS_LEVEL, SETMATERIALTEXTURECANVAS_CANVAS_ID ); + break; +case FN_setMaterialAmbientColor: //Sub Procedure + rc_ setMaterialAmbientColor( SETMATERIALAMBIENTCOLOR_MATERIAL_ID, SETMATERIALAMBIENTCOLOR_COLOR ); + break; +case FN_getMaterialAmbientColor: //Number Function + rc_push_num(rc_ getMaterialAmbientColor( GETMATERIALAMBIENTCOLOR_MATERIAL_ID )); + break; +case FN_setMaterialAntiAliasing: //Sub Procedure + rc_ setMaterialAntiAliasing( SETMATERIALANTIALIASING_MATERIAL_ID, SETMATERIALANTIALIASING_AA ); + break; +case FN_getMaterialAntiAliasing: //Number Function + rc_push_num(rc_ getMaterialAntiAliasing( GETMATERIALANTIALIASING_MATERIAL_ID )); + break; +case FN_setMaterialBackfaceCulling: //Sub Procedure + rc_ setMaterialBackfaceCulling( SETMATERIALBACKFACECULLING_MATERIAL_ID, SETMATERIALBACKFACECULLING_FLAG ); + break; +case FN_getMaterialBackfaceCulling: //Number Function + rc_push_num(rc_ getMaterialBackfaceCulling( GETMATERIALBACKFACECULLING_MATERIAL_ID )); + break; +case FN_setMaterialBlendFactor: //Sub Procedure + rc_ setMaterialBlendFactor( SETMATERIALBLENDFACTOR_MATERIAL_ID, SETMATERIALBLENDFACTOR_BF ); + break; +case FN_getMaterialBlendFactor: //Number Function + rc_push_num(rc_ getMaterialBlendFactor( GETMATERIALBLENDFACTOR_MATERIAL_ID )); + break; +case FN_setMaterialBlendMode: //Sub Procedure + rc_ setMaterialBlendMode( SETMATERIALBLENDMODE_MATERIAL_ID, SETMATERIALBLENDMODE_BLEND_MODE ); + break; +case FN_getMaterialBlendMode: //Number Function + rc_push_num(rc_ getMaterialBlendMode( GETMATERIALBLENDMODE_MATERIAL_ID )); + break; +case FN_setMaterialColorMask: //Sub Procedure + rc_ setMaterialColorMask( SETMATERIALCOLORMASK_MATERIAL_ID, SETMATERIALCOLORMASK_COLOR_MASK ); + break; +case FN_getMaterialColorMask: //Number Function + rc_push_num(rc_ getMaterialColorMask( GETMATERIALCOLORMASK_MATERIAL_ID )); + break; +case FN_setMaterialColorMode: //Sub Procedure + rc_ setMaterialColorMode( SETMATERIALCOLORMODE_MATERIAL_ID, SETMATERIALCOLORMODE_COLOR_MODE ); + break; +case FN_getMaterialColorMode: //Number Function + rc_push_num(rc_ getMaterialColorMode( GETMATERIALCOLORMODE_MATERIAL_ID )); + break; +case FN_setMaterialDiffuseColor: //Sub Procedure + rc_ setMaterialDiffuseColor( SETMATERIALDIFFUSECOLOR_MATERIAL_ID, SETMATERIALDIFFUSECOLOR_COLOR ); + break; +case FN_getMaterialDiffuseColor: //Number Function + rc_push_num(rc_ getMaterialDiffuseColor( GETMATERIALDIFFUSECOLOR_MATERIAL_ID )); + break; +case FN_setMaterialEmissiveColor: //Sub Procedure + rc_ setMaterialEmissiveColor( SETMATERIALEMISSIVECOLOR_MATERIAL_ID, SETMATERIALEMISSIVECOLOR_COLOR ); + break; +case FN_getMaterialEmissiveColor: //Number Function + rc_push_num(rc_ getMaterialEmissiveColor( GETMATERIALEMISSIVECOLOR_MATERIAL_ID )); + break; +case FN_setMaterialFog: //Sub Procedure + rc_ setMaterialFog( SETMATERIALFOG_MATERIAL_ID, SETMATERIALFOG_FLAG ); + break; +case FN_getMaterialFog: //Number Function + rc_push_num(rc_ getMaterialFog( GETMATERIALFOG_MATERIAL_ID )); + break; +case FN_setMaterialFrontfaceCulling: //Sub Procedure + rc_ setMaterialFrontfaceCulling( SETMATERIALFRONTFACECULLING_MATERIAL_ID, SETMATERIALFRONTFACECULLING_FLAG ); + break; +case FN_getMaterialFrontfaceCulling: //Number Function + rc_push_num(rc_ getMaterialFrontfaceCulling( GETMATERIALFRONTFACECULLING_MATERIAL_ID )); + break; +case FN_setMaterialGouraudShading: //Sub Procedure + rc_ setMaterialGouraudShading( SETMATERIALGOURAUDSHADING_MATERIAL_ID, SETMATERIALGOURAUDSHADING_FLAG ); + break; +case FN_materialGouraudShading: //Number Function + rc_push_num(rc_ materialGouraudShading( MATERIALGOURAUDSHADING_MATERIAL_ID )); + break; +case FN_materialIsAplhaBlend: //Number Function + rc_push_num(rc_ materialIsAplhaBlend( MATERIALISAPLHABLEND_MATERIAL_ID )); + break; +case FN_materialIsTransparent: //Number Function + rc_push_num(rc_ materialIsTransparent( MATERIALISTRANSPARENT_MATERIAL_ID )); + break; +case FN_setMaterialLighting: //Sub Procedure + rc_ setMaterialLighting( SETMATERIALLIGHTING_MATERIAL_ID, SETMATERIALLIGHTING_FLAG ); + break; +case FN_materialIsLit: //Number Function + rc_push_num(rc_ materialIsLit( MATERIALISLIT_MATERIAL_ID )); + break; +case FN_setMaterialType: //Sub Procedure + rc_ setMaterialType( SETMATERIALTYPE_MATERIAL_ID, SETMATERIALTYPE_MAT_TYPE ); + break; +case FN_getMaterialType: //Number Function + rc_push_num(rc_ getMaterialType( GETMATERIALTYPE_MATERIAL_ID )); + break; +case FN_setMaterialNormalize: //Sub Procedure + rc_ setMaterialNormalize( SETMATERIALNORMALIZE_MATERIAL_ID, SETMATERIALNORMALIZE_FLAG ); + break; +case FN_materialIsNormalized: //Number Function + rc_push_num(rc_ materialIsNormalized( MATERIALISNORMALIZED_MATERIAL_ID )); + break; +case FN_setMaterialPointCloud: //Sub Procedure + rc_ setMaterialPointCloud( SETMATERIALPOINTCLOUD_MATERIAL_ID, SETMATERIALPOINTCLOUD_FLAG ); + break; +case FN_materialIsPointCloud: //Number Function + rc_push_num(rc_ materialIsPointCloud( MATERIALISPOINTCLOUD_MATERIAL_ID )); + break; +case FN_setMaterialFlag: //Sub Procedure + rc_ setMaterialFlag( SETMATERIALFLAG_MATERIAL_ID, SETMATERIALFLAG_MATERIAL_FLAG, SETMATERIALFLAG_F_VALUE ); + break; +case FN_getMaterialFlag: //Number Function + rc_push_num(rc_ getMaterialFlag( GETMATERIALFLAG_MATERIAL_ID, GETMATERIALFLAG_MATERIAL_FLAG )); + break; +case FN_setMaterialTexture: //Sub Procedure + rc_ setMaterialTexture( SETMATERIALTEXTURE_MATERIAL_ID, SETMATERIALTEXTURE_LEVEL, SETMATERIALTEXTURE_IMG_ID ); + break; +case FN_setMaterialShininess: //Sub Procedure + rc_ setMaterialShininess( SETMATERIALSHININESS_MATERIAL_ID, SETMATERIALSHININESS_SHININESS ); + break; +case FN_getMaterialShininess: //Number Function + rc_push_num(rc_ getMaterialShininess( GETMATERIALSHININESS_MATERIAL_ID )); + break; +case FN_setMaterialSpecularColor: //Sub Procedure + rc_ setMaterialSpecularColor( SETMATERIALSPECULARCOLOR_MATERIAL_ID, SETMATERIALSPECULARCOLOR_COLOR ); + break; +case FN_getMaterialSpecularColor: //Number Function + rc_push_num(rc_ getMaterialSpecularColor( GETMATERIALSPECULARCOLOR_MATERIAL_ID )); + break; +case FN_setMaterialThickness: //Sub Procedure + rc_ setMaterialThickness( SETMATERIALTHICKNESS_MATERIAL_ID, SETMATERIALTHICKNESS_THICKNESS ); + break; +case FN_getMaterialThickness: //Number Function + rc_push_num(rc_ getMaterialThickness( GETMATERIALTHICKNESS_MATERIAL_ID )); + break; +case FN_setMaterialWireframe: //Sub Procedure + rc_ setMaterialWireframe( SETMATERIALWIREFRAME_MATERIAL_ID, SETMATERIALWIREFRAME_FLAG ); + break; +case FN_materialIsWireframe: //Number Function + rc_push_num(rc_ materialIsWireframe( MATERIALISWIREFRAME_MATERIAL_ID )); + break; +case FN_setActorTexture: //Sub Procedure + rc_ setActorTexture( SETACTORTEXTURE_ACTOR, SETACTORTEXTURE_LAYER, SETACTORTEXTURE_IMAGE_ID ); + break; +case FN_getActorMaterialCount: //Number Function + rc_push_num(rc_ getActorMaterialCount( GETACTORMATERIALCOUNT_ACTOR )); + break; +case FN_setActorMaterialFlag: //Sub Procedure + rc_ setActorMaterialFlag( SETACTORMATERIALFLAG_ACTOR, SETACTORMATERIALFLAG_FLAG, SETACTORMATERIALFLAG_FLAG_VALUE ); + break; +case FN_getActorMaterialFlag: //Number Function + rc_push_num(rc_ getActorMaterialFlag( GETACTORMATERIALFLAG_ACTOR, GETACTORMATERIALFLAG_MATERIAL, GETACTORMATERIALFLAG_FLAG )); + break; +case FN_setActorMaterialType: //Sub Procedure + rc_ setActorMaterialType( SETACTORMATERIALTYPE_ACTOR, SETACTORMATERIALTYPE_MATERIAL_TYPE ); + break; +case FN_getActorMaterialType: //Number Function + rc_push_num(rc_ getActorMaterialType( GETACTORMATERIALTYPE_ACTOR, GETACTORMATERIALTYPE_MATERIAL )); + break; + diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h new file mode 100644 index 0000000..c0c4df2 --- /dev/null +++ b/rcbasic_runtime/rc_gfx.h @@ -0,0 +1,3739 @@ +#ifndef RC_GFX_INCLUDED +#define RC_GFX_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "rc_gfx_core.h" +#include "gui_freetype_font.h" +#include "rc_utf8.h" +#include +#include "rc_sprite2D.h" +#include +#include + +using namespace irr; + +using namespace core; +using namespace video; +using namespace scene; + + +void rc_setTouchFingerEvent(SDL_FingerID fingerID, double x, double y, double pressure) +{ + for(int i = 0; i < MAX_FINGERS; i++) + { + if(rc_finger[i].id == -1 || rc_finger[i].id == fingerID) + { + rc_finger[i].id = fingerID; + rc_finger[i].x = x; + rc_finger[i].y = y; + rc_finger[i].pressure = pressure; + if(rc_finger[i].pressure > 0) + { + rc_fingers_pressed.insert(i); + } + return; + } + } +} + +int mobile_event_filter(void* userdata, SDL_Event* evt) +{ + SDL_Event event = evt[0]; + + int rc_win_width = 0; + int rc_win_height = 0; + + if(rc_window) + SDL_GetWindowSize(rc_window, &rc_win_width, &rc_win_height); + + switch(evt->type) + { + case SDL_APP_WILLENTERBACKGROUND: + mobile_active_window_flag = false; + break; + case SDL_APP_DIDENTERFOREGROUND: + if(!mobile_active_window_flag) + { + //rc_win_renderer[0] = SDL_GetRenderer(rc_win[0]); + } + mobile_active_window_flag = true; + break; + + case SDL_FINGERDOWN: + rc_touch = 1; + rc_touchX = event.tfinger.x * rc_win_width; + rc_touchY = event.tfinger.y * rc_win_height; +#ifdef RC_IOS + rc_pressure = 1; //FIXME: On IOS pressure is always getting reported as 0 on finger down so I am just setting it to 1 until I figure this out +#else + rc_pressure = event.tfinger.pressure; +#endif + rc_setTouchFingerEvent(event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure); + break; + case SDL_FINGERUP: + rc_touch = 0; + rc_mt_status = 0; + rc_touchX = event.tfinger.x * rc_win_width; + rc_touchY = event.tfinger.y * rc_win_height; + rc_pressure = event.tfinger.pressure; + rc_setTouchFingerEvent(event.tfinger.fingerId, -1, -1, 0); + break; + case SDL_FINGERMOTION: + rc_touch = 1; + rc_touchX = event.tfinger.x * rc_win_width; + rc_touchY = event.tfinger.y * rc_win_height; + rc_motionX = event.tfinger.dx * rc_win_width; + rc_motionY = event.tfinger.dy * rc_win_height; +#ifdef RC_IOS + rc_pressure = 1; +#else + rc_pressure = event.tfinger.pressure; +#endif + rc_setTouchFingerEvent(event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure); + break; + case SDL_MULTIGESTURE: + rc_touch = 2; + rc_mt_status = 1; + rc_mt_x = event.mgesture.x; + rc_mt_y = event.mgesture.y; + rc_mt_numFingers = event.mgesture.numFingers; + rc_mt_dist = event.mgesture.dDist; + rc_mt_theta = event.mgesture.dTheta; +#ifdef RC_IOS + rc_pressure = 1; +#else + rc_pressure = event.tfinger.pressure; +#endif + break; + + } + return 0; +} + + +bool rcbasic_init() +{ + if(SDL_Init(SDL_INIT_EVENTS | SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_SENSOR | SDL_INIT_NOPARACHUTE) < 0) //Audio causes init to fail on Fedora40 so I am leaving it out for now + { + bool rc_init_events = true; + bool rc_init_timer = true; + bool rc_init_video = true; + bool rc_init_joystick = true; + bool rc_init_haptic = true; + bool rc_init_sensor = true; + bool rc_init_noparachute = true; + //os::Printer::log("SDL_Init Error: ", SDL_GetError()); + std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; + return false; + } + + if(SDL_Init(SDL_INIT_AUDIO) < 0) + { + std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; + rc_init_audio = false; + } + + #ifdef RC_MOBILE + SDL_SetEventFilter(mobile_event_filter, NULL); + #endif // RC_MOBILE + + device = NULL; + VideoDriver = NULL; + rc_window = NULL; + + keyState = SDL_GetKeyboardState(NULL); + createKeyMap(); + + + for(int i = 0; i < MAX_FINGERS; i++) + { + rc_finger[i].id = -1; + rc_finger[i].x = -1; + rc_finger[i].y = -1; + rc_finger[i].pressure = 0; + } + + for(int i = 0; i < SDL_NumSensors(); i++) + { + rc_accel[num_accels] = NULL; + rc_gyro[num_gyros] = NULL; + switch(SDL_SensorGetDeviceType(i)) + { + case SDL_SENSOR_ACCEL: + rc_accel[num_accels] = SDL_SensorOpen(i); + num_accels++; + break; + case SDL_SENSOR_GYRO: + rc_gyro[num_gyros] = SDL_SensorOpen(i); + num_gyros++; + break; + } + } + + for(int i = 0; i < MAX_JOYSTICKS; i++) + { + if(i < SDL_NumJoysticks()) + { + rc_joystick[i] = SDL_JoystickOpen(i); + if(rc_joystick[i]==NULL) + { + cout << "Joystick " << i << " could not be opened: " << SDL_GetError() << endl; + } + rc_joyID[i] = SDL_JoystickInstanceID(rc_joystick[i]); + #ifdef RC_WEB + rc_haptic[i] = NULL; + #else + rc_haptic[i] = SDL_HapticOpenFromJoystick(rc_joystick[i]); + SDL_HapticRumbleInit(rc_haptic[i]); + #endif + //if(rc_haptic[i] == NULL){ cout << "HAP NULL: " << SDL_GetError() << endl; } + rc_numJoysticks++; + } + else + { + rc_joystick[i] = NULL; + rc_haptic[i] = NULL; + rc_joyID[i] = -1; + } + } + SDL_SetHint("SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", "1"); + + return true; + +} + +bool rc_windowOpenEx(std::string title, int x, int y, int w, int h, uint32_t window_flags, irr::u8 AntiAlias, bool stencil_buffer, bool vsync) +{ + if(rc_window) + { + return false; + } + + bool fullscreen = (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) || (window_flags & SDL_WINDOW_FULLSCREEN); + bool high_dpi = window_flags & SDL_WINDOW_ALLOW_HIGHDPI; + bool borderless = window_flags & SDL_WINDOW_BORDERLESS; + bool resizable = window_flags & SDL_WINDOW_RESIZABLE; + bool visible = window_flags & SDL_WINDOW_SHOWN; + + uint32_t flags = SDL_WINDOW_OPENGL; + flags |= (fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + flags |= (high_dpi ? SDL_WINDOW_ALLOW_HIGHDPI : 0); + flags |= (borderless ? SDL_WINDOW_BORDERLESS : 0); + flags |= (resizable ? SDL_WINDOW_RESIZABLE : 0); + flags |= (visible ? SDL_WINDOW_SHOWN : SDL_WINDOW_HIDDEN); + + //This size is used for virtual resolution + rc_window_size.Width = w; + rc_window_size.Height = h; + + rc_window = SDL_CreateWindow(title.c_str(), x, y, w, h, flags); + + //Get the actual size of the window to set the dimensions of the device + if(rc_window) + SDL_GetWindowSize(rc_window, &w, &h); + + SIrrlichtCreationParameters irr_creation_params; + irr_creation_params.DeviceType = EIDT_SDL; + irr_creation_params.DriverType = video::EDT_OPENGL; + irr_creation_params.WindowId = rc_window; + irr_creation_params.WindowSize = dimension2d((u32)w, (u32)h); + irr_creation_params.Bits = 16; + irr_creation_params.Fullscreen = fullscreen; + irr_creation_params.Stencilbuffer = stencil_buffer; + irr_creation_params.Vsync = vsync; + irr_creation_params.EventReceiver = 0; + irr_creation_params.WindowPosition = position2d(x, y); + irr_creation_params.AntiAlias = AntiAlias; + + device = createDeviceEx(irr_creation_params); + + + if (!device) + { + std::cout << "WindowOpen Error: Failed to Create Renderer" << std::endl; + return false; + } + + VideoDriver = device->getVideoDriver(); + SceneManager = device->getSceneManager(); + + irrtheora::init_irrTheora(device); + + rc_canvas.clear(); + rc_canvas_zOrder.clear(); + rc_font.clear(); + + rc_canvas_obj back_buffer; + back_buffer.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)w, (irr::u32)h), "rt", ECF_A8R8G8B8); + back_buffer.dimension.Width = w; + back_buffer.dimension.Height = h; + back_buffer.viewport.position.set(0,0); + back_buffer.viewport.dimension.set(w,h); + VideoDriver->setRenderTarget(back_buffer.texture, true, true); + rc_canvas.push_back(back_buffer); + + rc_physics3D.world = createIrrBulletWorld(device, true, false); + rc_physics3D.TimeStamp = device->getTimer()->getTime(); + + rc_physics3D.maxSubSteps = 1; + rc_physics3D.fixedTimeStep = irr::f32(1.) / irr::f64(60.); + + rc_physics3D.world->setInternalTickCallback((btInternalTickCallback)myTickCallback2); + + return true; +} + +bool rc_windowOpen(std::string title, int w, int h, bool fullscreen, bool vsync) +{ + uint32_t flags = SDL_WINDOW_SHOWN | (fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + if(!rc_windowOpenEx(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, flags, 0, false, vsync)) + { + return false; + } + + return true; +} + +void rc_closeWindow_hw() +{ + if(rc_window!=NULL) + SDL_DestroyWindow(rc_window); + rc_window = NULL; + + rc_canvas.clear(); + rc_canvas_zOrder.clear(); + rc_font.clear(); + + device->drop(); +} + +void rc_cls() +{ + if(rc_canvas.size()>0) + { + if(rc_canvas[0].texture) + { + VideoDriver->setRenderTarget(rc_canvas[0].texture); + VideoDriver->clearBuffers(true, true, true, rc_clear_color); + + if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size()) + if(rc_canvas[rc_active_canvas].texture) + VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false); + } + } +} + +Uint32 rc_windowMode(int visible_flag, int fullscreen_flag, int resizable_flag, int borderless_flag, int highDPI_flag) +{ + Uint32 window_mode = ( visible_flag == 0 ? SDL_WINDOW_HIDDEN : SDL_WINDOW_SHOWN ) | + ( fullscreen_flag == 0 ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP ) | + ( resizable_flag == 0 ? 0 : SDL_WINDOW_RESIZABLE ) | + ( borderless_flag == 0 ? 0 : SDL_WINDOW_BORDERLESS ) | + ( highDPI_flag == 0 ? 0 : SDL_WINDOW_ALLOW_HIGHDPI ); + return window_mode; +} + +Uint32 rc_getWindowMode() +{ + if(rc_window == NULL) + { + return 0; + } + return SDL_GetWindowFlags(rc_window); +} + +void rc_raiseWindow() +{ + if(rc_window==NULL) + { + return; + } + SDL_RaiseWindow(rc_window); +} + +void rc_showWindow() +{ + if(rc_window==NULL) + { + return; + } + SDL_ShowWindow(rc_window); +} + +void rc_hideWindow() +{ + if(rc_window==NULL) + { + return; + } + SDL_HideWindow(rc_window); +} + +void rc_getDesktopDisplayMode(int index, double * w, double * h, double * freq) +{ + SDL_DisplayMode dm; + SDL_GetDesktopDisplayMode(index, &dm); + *w = (double)dm.w; + *h = (double)dm.h; + *freq = (double)dm.refresh_rate; +} + +void rc_setWindowTitle(std::string title) +{ + if(rc_window) + { + SDL_SetWindowTitle(rc_window, title.c_str()); + } +} + +std::string rc_getWindowTitle() +{ + if(rc_window) + { + return SDL_GetWindowTitle(rc_window); + } + return ""; +} + +void rc_setWindowPosition(int x, int y) +{ + if(rc_window) + SDL_SetWindowPosition(rc_window, x, y); +} + +void rc_getWindowPosition(double * x, double * y) +{ + int x_data=0, y_data=0; + if(rc_window) + SDL_GetWindowPosition(rc_window,&x_data,&y_data); + *x = x_data; + *y = y_data; +} + +void rc_setWindowSize(int w, int h) +{ + if(rc_window) + { + SDL_SetWindowSize(rc_window, w, h); + + irr::core::dimension2d win_size; + int w, h; + SDL_GetWindowSize(rc_window, &w, &h); + win_size.Width = w; + win_size.Height = h; + + device->setWindowSize(win_size); + + rc_window_size.Width = w; + rc_window_size.Height = h; + + } +} + +void rc_getWindowSize(double * w, double * h) +{ + int w_data = -1, h_data = -1; + if(rc_window) + SDL_GetWindowSize(rc_window, &w_data, &h_data); + *w = w_data; + *h = h_data; +} + +void rc_setWindowMinSize(int w, int h) +{ + if(rc_window) + SDL_SetWindowMinimumSize(rc_window, w, h); +} + +void rc_getWindowMinSize(double * w, double * h) +{ + int w_data=0, h_data=0; + if(rc_window) + SDL_GetWindowMinimumSize(rc_window, &w_data, &h_data); + *w = w_data; + *h = h_data; +} + +void rc_setWindowMaxSize(int w, int h) +{ + if(rc_window) + SDL_SetWindowMaximumSize(rc_window, w, h); +} + +void rc_getWindowMaxSize(double * w, double * h) +{ + int w_data=0, h_data=0; + if(rc_window) + SDL_GetWindowMaximumSize(rc_window, &w_data, &h_data); + *w = w_data; + *h = h_data; +} + +bool rc_windowIsFullscreen() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + Uint32 wflags_cmp1 = wflags & SDL_WINDOW_FULLSCREEN; + Uint32 wflags_cmp2 = wflags & SDL_WINDOW_FULLSCREEN_DESKTOP; + + if(wflags_cmp1 || wflags_cmp2) + return true; + else + return false; + } + + return false; + +} + +bool rc_windowIsVisible() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_SHOWN) + return true; + else + return false; + } + + return false; +} + +bool rc_windowHasMouseFocus() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_MOUSE_FOCUS) + return true; + else + return false; + } + + return false; +} + +bool rc_windowHasInputFocus() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_INPUT_FOCUS) + return true; + else + return false; + } + + return false; +} + +bool rc_windowIsBordered() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_BORDERLESS) + return false; + else + return true; + } + + return false; +} + +bool rc_windowIsResizable() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_RESIZABLE) + return true; + else + return false; + } + + return false; +} + +bool rc_windowIsMinimized() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_MINIMIZED) + return true; + else + return false; + } + + return false; +} + +bool rc_windowIsMaximized() +{ + if(rc_window) + { + Uint32 wflags = SDL_GetWindowFlags(rc_window); + if(wflags & SDL_WINDOW_MAXIMIZED) + return true; + else + return false; + } + + return false; +} + +bool rc_setWindowFullscreen(int flag) +{ + if(rc_window) + { + switch(flag) + { + case 0: + flag = 0; + break; + default: + flag = SDL_WINDOW_FULLSCREEN_DESKTOP; + break; + } + + Uint32 wflags_preOp = SDL_GetWindowFlags(rc_window); + if( flag != 0 && ( (wflags_preOp & SDL_WINDOW_FULLSCREEN_DESKTOP) || (wflags_preOp & SDL_WINDOW_FULLSCREEN) ) ) + return true; + else if( flag == 0 && !((wflags_preOp & SDL_WINDOW_FULLSCREEN_DESKTOP) || (wflags_preOp & SDL_WINDOW_FULLSCREEN))) + return true; + + if(SDL_SetWindowFullscreen(rc_window, flag) < 0) + { + return false; + } + + + int w, h; + SDL_GetWindowSize(rc_window, &w, &h); + + irr::core::dimension2d win_size(w, h); + device->setWindowSize(win_size); + + if(!(w==rc_window_size.Width && h==rc_window_size.Height)) + { + //TODO: change mouse scale adjust + } + + SDL_PumpEvents(); + SDL_FlushEvents(SDL_FIRSTEVENT, SDL_LASTEVENT); + + return true; + } + + return false; +} + +bool rc_maximizeWindow() +{ + if(rc_window) + { + SDL_MaximizeWindow(rc_window); + + SDL_DisplayMode mode; + SDL_GetWindowDisplayMode(rc_window, &mode); + + irr::core::dimension2d win_size(mode.w, mode.h); + device->setWindowSize(win_size); + + return true; + } + + return false; +} + +bool rc_minimizeWindow() +{ + if(rc_window) + { + SDL_MinimizeWindow(rc_window); + + SDL_DisplayMode mode; + SDL_GetWindowDisplayMode(rc_window, &mode); + + irr::core::dimension2d win_size(mode.w, mode.h); + device->setWindowSize(win_size); + + return true; + } + + return false; +} + +void rc_setWindowBordered(bool b) +{ + SDL_bool bswitch = SDL_FALSE; + if(b) + bswitch = SDL_TRUE; + if(rc_window) + SDL_SetWindowBordered(rc_window, bswitch); +} + +void rc_setWindowResizable(bool b) +{ + SDL_bool bswitch = SDL_FALSE; + if(b) + bswitch = SDL_TRUE; + if(rc_window) + { + SDL_SetWindowResizable(rc_window, bswitch); + device->setResizable(true); + } +} + +bool rc_windowExists() +{ + return (rc_window!=NULL); +} + +bool rc_restoreWindow() +{ + if(rc_window) + { + SDL_RestoreWindow(rc_window); + + SDL_DisplayMode mode; + SDL_GetWindowDisplayMode(rc_window, &mode); + + irr::core::dimension2d win_size(mode.w, mode.h); + device->setWindowSize(win_size); + + return true; + } + + return false; +} + +void rc_setWindowIcon(int slot) +{ + SDL_Rect img_rect; + img_rect.x = 0; + img_rect.y = 0; + //img_rect.w = rc_image_width[slot]; + //img_rect.h = rc_image_height[slot]; + /* + if(rc_himage[slot][win_num] != NULL) + { + //SDL_RendererFlip rf = (SDL_RendererFlip)(SDL_FLIP_VERTICAL); + + SDL_Surface * tmp_surf = SDL_CreateRGBSurface(0, rc_image_width[slot], rc_image_height[slot], 32, 0, 0, 0, 0); + SDL_Texture * tmp_tex = SDL_CreateTexture(rc_win_renderer[rc_active_window], rc_pformat->format, SDL_TEXTUREACCESS_TARGET, rc_image_width[slot], rc_image_height[slot]); + SDL_SetRenderTarget(rc_win_renderer[rc_active_window],NULL); + SDL_RenderCopy(rc_win_renderer[rc_active_window],rc_himage[slot][rc_active_window],NULL,&img_rect); + //SDL_RenderCopyEx(rc_win_renderer[rc_active_window],rc_himage[slot][rc_active_window],NULL,NULL,0,NULL,rf); + + SDL_RenderReadPixels(rc_win_renderer[rc_active_window], &img_rect, rc_pformat->format,tmp_surf->pixels,tmp_surf->pitch); + + SDL_SetColorKey(tmp_surf,SDL_TRUE,rc_image_colorKey[slot]); + + SDL_SetWindowIcon(rc_win[rc_active_window], tmp_surf); + + + if(rc_active_screen >= 0) + SDL_SetRenderTarget(rc_win_renderer[rc_active_window], rc_hscreen[rc_active_window][rc_active_screen]); + + SDL_DestroyTexture(tmp_tex); + SDL_FreeSurface(tmp_surf); + } + */ +} + + +bool rc_windowEvent_Close( ) +{ + if(rc_win_event==RC_WIN_EVENT_CLOSE) + { + return true; + } + + return false; +} + +bool rc_windowEvent_Minimize( ) +{ + if(rc_win_event==RC_WIN_EVENT_MINIMIZE) + return true; + + return false; +} + +bool rc_windowEvent_Maximize( ) +{ + if(rc_win_event==RC_WIN_EVENT_MAXIMIZE) + return true; + + return false; +} + +bool rc_windowEvent_Resize( ) +{ + if(rc_win_event==RC_WIN_EVENT_RESIZE) + return true; + + return false; +} + +void rc_setWindowAutoClose(bool exitOnClose) +{ + rc_win_exitOnClose = exitOnClose; +} + + + +std::string rc_getClipboardText() +{ + return (std::string) SDL_GetClipboardText(); +} + +void rc_setClipboardText(std::string txt) +{ + SDL_SetClipboardText(txt.c_str()); +} + +int rc_hasClipboardText() +{ + return (int)SDL_HasClipboardText(); +} + + +//The greater Z is, the further back the canvas is +void sortCanvasZ() +{ + for(int i = 0; i < rc_canvas_zOrder.size(); i++) + { + for(int j = i+1; j < rc_canvas_zOrder.size(); j++) + { + int ca = rc_canvas_zOrder[i]; + int cb = rc_canvas_zOrder[j]; + if(rc_canvas[cb].z >= rc_canvas[ca].z) + { + rc_canvas_zOrder.erase(j); + rc_canvas_zOrder.insert(cb, i); + } + } + } + + //for(int i = 0; i < rc_canvas_zOrder.size(); i++) + //{ + // std::cout << "Canvas[" << i << "] Z = " << rc_canvas_zOrder[i] << ( (i+1)==rc_canvas_zOrder.size() ? "" : ", " ); + //} + //std::cout << std::endl; +} + +Uint32 rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode) +{ + if(!VideoDriver) + return -1; + + rc_canvas_obj canvas; + canvas.texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(w,h), "rt", ECF_A8R8G8B8); + canvas.sprite_layer = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(w,h), "rt", ECF_A8R8G8B8); + + if(!canvas.texture) + return -1; + + + if(SceneManager) + { + canvas.camera.init(SceneManager, 0, 0, 0); + //canvas.camera = SceneManager->addCameraSceneNode(0, vector3df(0,0,0), vector3df(0,0,0)); + //canvas.camera->setPosition(irr::core::vector3df(0,0,0)); + //canvas.camera->setTarget(irr::core::vector3df(0,0,100)); + //canvas.camera->bindTargetAndRotation(true); + } + + //std::cout << "texture format = " << canvas.texture->getColorFormat() << std::endl; + + canvas.dimension.Width = w; + canvas.dimension.Height = h; + + canvas.viewport.position.X = vx; + canvas.viewport.position.Y = vy; + canvas.viewport.dimension.Width = vw; + canvas.viewport.dimension.Height = vh; + + canvas.offset.X = 0; + canvas.offset.Y = 0; + + canvas.mode = mode; + + canvas.color_mod = irr::video::SColor(255,255,255,255).color; + + //2D Physics World + b2Vec2 gravity(0, -9.8); + canvas.physics2D.world = new b2World(gravity); + canvas.physics2D.timeStep = 1/20.0; //the length of time passed to simulate (seconds) + canvas.physics2D.velocityIterations = 8; //how strongly to correct velocity + canvas.physics2D.positionIterations = 3; //how strongly to correct position + + + switch(mode) + { + case 0: + break; + case 1: + VideoDriver->makeColorKeyTexture(canvas.texture, irr::video::SColor(0,0,0,0)); + break; + } + + int canvas_id = -1; + + for(int i = 0; i < rc_canvas.size(); i++) + { + if(!rc_canvas[i].texture) + { + canvas_id = i; + break; + } + } + + if(canvas_id < 0) + { + canvas_id = rc_canvas.size(); + rc_canvas.push_back(canvas); + } + + if(rc_active_canvas < 0) + rc_active_canvas = canvas_id; + + for(int i = 0; i < rc_canvas_zOrder.size(); i++) + { + if(rc_canvas_zOrder[i] == canvas_id) + { + rc_canvas_zOrder.erase(i); + i--; + } + } + + rc_canvas_zOrder.push_back(canvas_id); + + sortCanvasZ(); + + + return canvas_id; +} + + +void rc_canvasClose(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture != NULL) + VideoDriver->removeTexture(rc_canvas[canvas_id].texture); + + rc_canvas[canvas_id].texture = NULL; + + if(rc_active_canvas == canvas_id) + rc_active_canvas = -1; + + for(int i = 0; i < rc_canvas_zOrder.size(); i++) + { + if(rc_canvas_zOrder[i] == canvas_id) + { + rc_canvas_zOrder.erase(i); + break; + } + } +} + +void rc_setCanvas3D(int canvas_id, bool flag) +{ + if(canvas_id > 0 && canvas_id < rc_canvas.size()) + rc_canvas[canvas_id].show3D = flag; +} + +void rc_setActiveCanvas(int canvas_id) +{ + rc_active_canvas = canvas_id; + + if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size()) + { + if(rc_canvas[rc_active_canvas].texture) + VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false); + } +} + +int rc_getActiveCanvas() +{ + return rc_active_canvas; +} + +void rc_clearCanvas() +{ + if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size()) + { + if(rc_canvas[rc_active_canvas].texture) + VideoDriver->clearBuffers(true, true, true, rc_clear_color); + } +} + +void rc_setCanvasVisible(int canvas_id, bool flag) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + rc_canvas[canvas_id].visible = flag; +} + +bool rc_canvasIsVisible(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return false; + + if(rc_canvas[canvas_id].texture) + return rc_canvas[canvas_id].visible; + + return false; +} + +void rc_setCanvasViewport(int canvas_id, int x, int y, int w, int h) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + rc_canvas[canvas_id].viewport.position = irr::core::vector2d(x, y); + rc_canvas[canvas_id].viewport.dimension = irr::core::dimension2d(w, h); + } +} + +void rc_getCanvasViewport(int canvas_id, double* x, double* y, double* w, double* h) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + *x = (double)rc_canvas[canvas_id].viewport.position.X; + *y = (double)rc_canvas[canvas_id].viewport.position.Y; + *w = rc_canvas[canvas_id].viewport.dimension.Width; + *h = rc_canvas[canvas_id].viewport.dimension.Height; + } +} + +void rc_setCanvasOffset(int canvas_id, int x, int y) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + rc_canvas[canvas_id].offset = irr::core::vector2d(x, y); + } +} + +void rc_getCanvasOffset(int canvas_id, double* x, double* y) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + *x = (double)rc_canvas[canvas_id].offset.X; + *y = (double)rc_canvas[canvas_id].offset.Y; + } +} + +void rc_getCanvasSize(int canvas_id, double* w, double* h) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + *w = (double)rc_canvas[canvas_id].dimension.Width; + *h = (double)rc_canvas[canvas_id].dimension.Height; + } +} + +void rc_setCanvasColorMod(int canvas_id, Uint32 color_mod) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + rc_canvas[canvas_id].color_mod = color_mod; + } +} + +Uint32 rc_canvasColorMod(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return 0; + + if(rc_canvas[canvas_id].texture) + { + return rc_canvas[canvas_id].color_mod; + } + + return 0; +} + +void rc_setCanvasAlpha(int canvas_id, Uint32 alpha) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + if(rc_canvas[canvas_id].texture) + { + irr::video::SColor color(rc_canvas[canvas_id].color_mod); + color.setAlpha(alpha); + rc_canvas[canvas_id].color_mod = color.color; + } +} + +Uint32 rc_canvasAlpha(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return 0; + + if(rc_canvas[canvas_id].texture) + { + irr::video::SColor color(rc_canvas[canvas_id].color_mod); + Uint32 alpha = color.getAlpha(); + return alpha; + } + return 0; +} + +void rc_setCanvasZ(int canvas_id, int z) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return; + + rc_canvas[canvas_id].z = z; + sortCanvasZ(); +} + +int rc_canvasZ(int canvas_id) +{ + if(canvas_id <= 0 || canvas_id >= rc_canvas.size()) //canvas 0 is being excluded because its the back buffer + return 0; + + if(rc_canvas[canvas_id].texture) + { + return rc_canvas[canvas_id].z; + } + + return 0; +} + +int rc_cloneCanvas(int origin_canvas_id, int mode) +{ + if(!VideoDriver) + return -1; + + if(origin_canvas_id < 0 || origin_canvas_id >= rc_canvas.size()) + return -1; + + if(!rc_canvas[origin_canvas_id].texture) + return -1; + + rc_canvas_obj canvas; + canvas.texture = rc_canvas[origin_canvas_id].texture; + canvas.sprite_layer = rc_canvas[origin_canvas_id].sprite_layer; + + if(!canvas.texture) + return -1; + + + if(SceneManager) + { + canvas.camera.init(SceneManager, 0, 0, 0); + //canvas.camera = SceneManager->addCameraSceneNode(0, vector3df(0,0,0), vector3df(0,0,0)); + //canvas.camera->setPosition(irr::core::vector3df(0,0,0)); + //canvas.camera->setTarget(irr::core::vector3df(0,0,100)); + //canvas.camera->bindTargetAndRotation(true); + } + + //std::cout << "texture format = " << canvas.texture->getColorFormat() << std::endl; + + canvas.dimension.Width = rc_canvas[origin_canvas_id].dimension.Width; + canvas.dimension.Height = rc_canvas[origin_canvas_id].dimension.Height; + + canvas.viewport.position.X = rc_canvas[origin_canvas_id].viewport.position.X; + canvas.viewport.position.Y = rc_canvas[origin_canvas_id].viewport.position.Y; + canvas.viewport.dimension.Width = rc_canvas[origin_canvas_id].viewport.dimension.Width; + canvas.viewport.dimension.Height = rc_canvas[origin_canvas_id].viewport.dimension.Height; + + canvas.offset.X = 0; + canvas.offset.Y = 0; + + canvas.mode = mode; + + canvas.color_mod = irr::video::SColor(255,255,255,255).color; + + //2D Physics World + b2Vec2 gravity(0, -9.8); + canvas.physics2D.world = new b2World(gravity); + canvas.physics2D.timeStep = 1/20.0; //the length of time passed to simulate (seconds) + canvas.physics2D.velocityIterations = 8; //how strongly to correct velocity + canvas.physics2D.positionIterations = 3; //how strongly to correct position + + + switch(mode) + { + case 0: + break; + case 1: + VideoDriver->makeColorKeyTexture(canvas.texture, irr::video::SColor(0,0,0,0)); + break; + } + + int canvas_id = -1; + + for(int i = 0; i < rc_canvas.size(); i++) + { + if(!rc_canvas[i].texture) + { + canvas_id = i; + break; + } + } + + if(canvas_id < 0) + { + canvas_id = rc_canvas.size(); + rc_canvas.push_back(canvas); + } + + if(rc_active_canvas < 0) + rc_active_canvas = canvas_id; + + for(int i = 0; i < rc_canvas_zOrder.size(); i++) + { + if(rc_canvas_zOrder[i] == canvas_id) + { + rc_canvas_zOrder.erase(i); + i--; + } + } + + rc_canvas_zOrder.push_back(canvas_id); + + sortCanvasZ(); + + + return canvas_id; +} + +void rc_setClearColor(Uint32 color) +{ + rc_clear_color.set(color); +} + + + +Uint32 rc_rgba(Uint32 r, Uint32 g, Uint32 b, Uint32 a) +{ + irr::video::SColor color(a, r, g, b); + return color.color; +} + +Uint32 rc_rgb(Uint32 r, Uint32 g, Uint32 b) +{ + irr::video::SColor color(255, r, g, b); + return color.color; +} + + +void rc_setColor(Uint32 color) +{ + rc_active_color.set(color); +} + +Uint32 rc_getPixel(int x, int y) +{ + if(!rc_canvas[0].texture) + { + return 0; + } + + if(x < 0 || x >= rc_window_size.Width) + x = 0; + + if(y < 0 || y >= rc_window_size.Height) + y = 0; + + + irr::video::ITexture* texture = rc_canvas[0].texture; + + video::ECOLOR_FORMAT format = texture->getColorFormat(); //std::cout << "format = " << (int) format << std::endl; + + Uint32 color = 0; + + //this if statement is unnessesary since right now ECF_A8R8G8B8 is the only color format supported. + //I am leaving it here since I may want to support more color formats in the future + if(video::ECF_A8R8G8B8 == format) + { + u8 * texels = (u8 *)texture->lock(irr::video::ETLM_READ_ONLY); + + u32 pitch = texture->getPitch(); + + irr::video::SColor * texel = (SColor *)(texels + ((y * pitch) + (x * sizeof(SColor)))); + + irr::video::SColor c = texel[0]; + + texture->unlock(); + + //std::cout << "color(" << x << ", " << y << ") = " << c.getRed() << ", " << c.getGreen() << ", " << c.getBlue() << std::endl; + } + + return color; + +} + +void rc_drawRect(int x, int y, int w, int h) +{ + irr::core::vector2d r_pos(x,y); + irr::core::dimension2d r_dim(w,h); + irr::core::rect r(r_pos, r_dim); + //std::cout << "drawRect: color=" << rc_active_color.color << " ( " << x << ", " << y << ", " << w << ", " << h << " ) " << std::endl; + VideoDriver->draw2DRectangleOutline(r, rc_active_color); +} + +void rc_drawRectFill(int x, int y, int w, int h) +{ + irr::core::vector2d r_pos(x,y); + irr::core::dimension2d r_dim(w,h); + irr::core::rect r(r_pos, r_dim); + //std::cout << "drawRect: color=" << rc_active_color.color << " ( " << x << ", " << y << ", " << w << ", " << h << " ) " << std::endl; + VideoDriver->draw2DRectangle(rc_active_color, r); +} + +void rc_drawCircle(int x, int y, double r) +{ + irr::core::vector2d r_pos(x,y); + + VideoDriver->draw2DPolygon(r_pos, r, rc_active_color, 30); +} + + + +//Filled Circle Code from CuteAlien on Irrlicht forum +struct CircleSettings +{ + vector2di center; // in screen coordinates + f32 radius; // in pixels + f32 radius2; + video::SColor color; + u32 numVertices = 21; // including center +}; + +void makeCircle(irr::core::array& vertices, irr::core::array& indices, const CircleSettings& settings) +{ + const f64 stepSize = 360.0 / (f64)(settings.numVertices-1); // degree angles between vertex points on circle + indices.set_used(settings.numVertices+1); // one more as first and last vertex in circle is identical + for ( u32 i=0; i r_pos(x,y); + + // create the circle + irr::core::array verticesCircle; + irr::core::array indicesCircle; + CircleSettings circle; + circle.center = r_pos; + circle.radius = r; + circle.color = rc_active_color; + makeCircle(verticesCircle, indicesCircle, circle); + + VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(), + indicesCircle.pointer(), indicesCircle.size()-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, + video::EIT_16BIT); +} + +void rc_drawLine(int x1, int y1, int x2, int y2) +{ + irr::core::vector2d r_pos_start(x1,y1); + irr::core::vector2d r_pos_end(x2,y2); + + VideoDriver->draw2DLine(r_pos_start, r_pos_end, rc_active_color); +} + +void rc_poly(Uint32 n, double* vx_d, double* vy_d) +{ + if(n <= 0) + return; + + for(int i = 1; i < n; i++) + { + rc_drawLine((int)vx_d[i-1], (int)vy_d[i-1], (int)vx_d[i], (int)vy_d[i]); + } + + rc_drawLine((int)vx_d[n-1], (int)vy_d[n-1], (int)vx_d[0], (int)vy_d[0]); +} + +void rc_drawPixel(int x, int y) +{ + VideoDriver->drawPixel(x, y, rc_active_color); +} + + +double radians(double degree) +{ + double pi = 3.14159265359; + return (degree * (pi / 180)); +} + +void makeEllipse(irr::core::array& vertices, irr::core::array& indices, const CircleSettings& settings) +{ + const f64 stepSize = 360.0 / (f64)(settings.numVertices-1); // degree angles between vertex points on circle + indices.set_used(settings.numVertices+1); // one more as first and last vertex in circle is identical + for ( u32 i=0; i r_pos(x,y); + + // create the circle + irr::core::array verticesCircle; + irr::core::array indicesCircle; + CircleSettings circle; + circle.center = r_pos; + circle.radius = ry; + circle.radius2 = rx; + circle.color = rc_active_color; + circle.numVertices = 21; + makeEllipse(verticesCircle, indicesCircle, circle); + + for(int i = 2; i < verticesCircle.size(); i++) + { + rc_drawLine(verticesCircle[i-1].Pos.X, verticesCircle[i-1].Pos.Y, verticesCircle[i].Pos.X, verticesCircle[i].Pos.Y); + } + + int n = verticesCircle.size()-1; + rc_drawLine(verticesCircle[n].Pos.X, verticesCircle[n].Pos.Y, verticesCircle[1].Pos.X, verticesCircle[1].Pos.Y); +} + +void rc_drawEllipseFill(int x, int y, int rx, int ry) +{ + irr::core::vector2d r_pos(x,y); + + // create the circle + irr::core::array verticesCircle; + irr::core::array indicesCircle; + CircleSettings circle; + circle.center = r_pos; + circle.radius = ry; + circle.radius2 = rx; + circle.color = rc_active_color; + circle.numVertices = 21; + makeEllipse(verticesCircle, indicesCircle, circle); + + VideoDriver->draw2DVertexPrimitiveList(verticesCircle.pointer(), verticesCircle.size(), + indicesCircle.pointer(), indicesCircle.size()-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN, + video::EIT_16BIT); +} + + + +int rc_loadFont(std::string fnt_file, int font_size) +{ + irr::io::path file_path = fnt_file.c_str(); + int font_id = -1; + for(int i = 0; i < rc_font.size(); i++) + { + if(rc_font[i]!=NULL) + { + font_id = i; + break; + } + } + + CGUITTFace* Face; + CGUIFreetypeFont* dfont; + + Face = new CGUITTFace(); + Face->load(file_path); + + dfont = new CGUIFreetypeFont(VideoDriver); + dfont->attach(Face, font_size); + + + if(font_id < 0) + { + font_id = rc_font.size(); + + rc_font_obj* f = new rc_font_obj(); + + f->face = Face; + f->font = dfont; + f->font_size = font_size; + + rc_font.push_back(f); + + rc_active_font = font_id; + } + else + { + rc_font[font_id]->face = Face; + rc_font[font_id]->font = dfont; + rc_font[font_id]->font_size = font_size; + } + + return font_id; +} + +bool rc_fontExists(int font_id) +{ + if(font_id >= 0 && font_id < rc_font.size()) + { + if(rc_font[font_id]->font != NULL) + return true; + } + return false; +} + +void rc_deleteFont(int font_id) +{ + if(rc_fontExists(font_id)) + { + delete rc_font[font_id]->font; + delete rc_font[font_id]->face; + rc_font[font_id]->font = NULL; + rc_font[font_id]->face = NULL; + rc_font[font_id]->font_size = 0; + } +} + +void rc_setFont(int font_id) +{ + if(rc_fontExists(font_id)) + rc_active_font = font_id; +} + +void rc_drawText(std::string txt, int x, int y) +{ + if(rc_fontExists(rc_active_font)) + { + std::wstring text = utf8_to_wstring(txt); + irr::core::dimension2d text_dim = rc_font[rc_active_font]->font->getDimension(text.c_str()); + irr::core::rect tpos(x, y, text_dim.Width, rc_font[rc_active_font]->font_size); + + //std::cout << "Start drawing text: " << tpos.getWidth() << ", " << tpos.getHeight() << std::endl; + rc_font[rc_active_font]->font->draw(text.c_str(), tpos, rc_active_color); + //std::cout << "------------------" << std::endl; + } +} + +Uint32 rc_getTextWidth(const std::string txt) +{ + if(rc_fontExists(rc_active_font)) + { + std::wstring text = utf8_to_wstring(txt); + irr::core::dimension2d text_dim = rc_font[rc_active_font]->font->getDimension(text.c_str()); + return text_dim.Width; + } + return 0; +} + +Uint32 rc_getTextHeight(const std::string txt) +{ + if(rc_fontExists(rc_active_font)) + { + std::wstring text = utf8_to_wstring(txt); + //std::wstring wide = converter.from_bytes(txt); + //irr::core::dimension2d text_dim = rc_font[rc_active_font]->getDimension(wide.c_str()); + return rc_font[rc_active_font]->font_size; + } + return 0; +} + +void rc_getTextSize(const std::string txt, double* w, double* h) +{ + if(rc_fontExists(rc_active_font)) + { + std::wstring text = utf8_to_wstring(txt); + irr::core::dimension2d text_dim = rc_font[rc_active_font]->font->getDimension(text.c_str()); + *w = text_dim.Width; + *h = rc_font[rc_active_font]->font_size; + } + else + { + *w = 0; + *h = 0; + } +} + + +#define RC_MOUSE_BUTTON_LEFT 0 +#define RC_MOUSE_BUTTON_MIDDLE 1 +#define RC_MOUSE_BUTTON_RIGHT 2 + +int rc_mwheelx = -1; +int rc_mwheely = -1; + +bool rc_cursor_visible = true; + + +bool rc_mouseButton(int b) +{ + int ix, iy; + int current_button_state = SDL_GetMouseState(&ix, &iy); + return (current_button_state & SDL_BUTTON(b)); +} + +int rc_mouseX() +{ + int x, y; + SDL_GetMouseState(&x, &y); + return x; +} + +int rc_mouseY() +{ + int x, y; + SDL_GetMouseState(&x, &y); + return y; +} + +void rc_getMouse(double* x, double* y, double* mb1, double* mb2, double* mb3) +{ + int ix, iy; + int current_button_state = SDL_GetMouseState(&ix, &iy); + + *mb1 = (current_button_state & SDL_BUTTON(SDL_BUTTON_LEFT))!=0; + *mb2 = (current_button_state & SDL_BUTTON(SDL_BUTTON_MIDDLE))!=0; + *mb3 = (current_button_state & SDL_BUTTON(SDL_BUTTON_RIGHT))!=0; + + *x = ix; + *y = iy; +} + +int rc_mouseWheelX() +{ + return rc_mwheelx; +} + +int rc_mouseWheelY() +{ + return rc_mwheely; +} + +int rc_globalMouseX() +{ + int x, y; + SDL_GetGlobalMouseState(&x,&y); + return x; +} + +int rc_globalMouseY() +{ + int x, y; + SDL_GetGlobalMouseState(&x,&y); + return y; +} + +void rc_getGlobalMouse(double * x, double* y, double* mb1, double* mb2, double* mb3) +{ + int ix, iy; + int current_button_state = SDL_GetGlobalMouseState(&ix,&iy); + + *mb1 = (current_button_state & SDL_BUTTON(SDL_BUTTON_LEFT))!=0; + *mb2 = (current_button_state & SDL_BUTTON(SDL_BUTTON_MIDDLE))!=0; + *mb3 = (current_button_state & SDL_BUTTON(SDL_BUTTON_RIGHT))!=0; + + *x = ix; + *y = iy; +} + +void rc_getMouseWheel(double* x, double* y) +{ + *x = rc_mwheelx; + *y = rc_mwheely; +} + +void rc_hideMouse() +{ + SDL_ShowCursor(0); + rc_cursor_visible = false; +} + +void rc_showMouse() +{ + SDL_ShowCursor(1); + rc_cursor_visible = true; +} + +bool rc_mouseIsVisible() +{ + return rc_cursor_visible; +} + + +int rc_inkey() +{ + return rc_inkey_val; +} + +int rc_key(int check_Key) +{ + return keyState[SDL_GetScancodeFromKey(check_Key)]; +} + +int rc_waitKey() +{ + bool wk_loop = true; + SDL_Event e; + while(wk_loop) + { + while(SDL_WaitEvent(&e)) + { + if(e.type == SDL_KEYDOWN) + return (int)e.key.keysym.sym; + } + } + return 0; +} + +void rc_wait(Uint32 ms) +{ + SDL_Delay(ms); +} + + + +void rc_grabInput(bool flag) +{ + SDL_SetWindowGrab(rc_window, flag ? SDL_TRUE : SDL_FALSE); +} + +int rc_windowIsGrabbed() +{ + return SDL_GetWindowGrab(rc_window); +} + +void rc_warpMouse(int x, int y) +{ + SDL_WarpMouseInWindow(rc_window, x, y); +} + +void rc_warpMouseGlobal(int x, int y) +{ + SDL_WarpMouseGlobal(x, y); +} + +void rc_setMouseZone(int x, int y, int w, int h) +{ + SDL_Rect r; + r.x = x; + r.y = y; + r.w = w; + r.h = h; + SDL_SetWindowMouseRect(rc_window, &r); +} + +void rc_clearMouseZone() +{ + SDL_SetWindowMouseRect(rc_window, NULL); +} + +void rc_setWindowAlwaysOnTop(bool flag) +{ + SDL_SetWindowAlwaysOnTop(rc_window, flag ? SDL_TRUE : SDL_FALSE); +} + +void rc_setMouseRelative(bool flag) +{ + SDL_SetRelativeMouseMode(flag ? SDL_TRUE : SDL_FALSE); +} + +void rc_setWindowVSync(bool flag) +{ + //TODO +} + +int rc_openURL(std::string url) +{ + return SDL_OpenURL(url.c_str()); +} + +std::string rc_SDLVersion() +{ + SDL_version version; + SDL_GetVersion(&version); + + std::stringstream ss; + ss << (uint32_t)version.major << "." << (uint32_t)version.minor << "." << (uint32_t)version.patch; + return ss.str(); + +} + +int rc_flashWindow(int flag) +{ + switch(flag) + { + case 0: + return SDL_FlashWindow(rc_window, SDL_FLASH_CANCEL); + case 1: + return SDL_FlashWindow(rc_window, SDL_FLASH_BRIEFLY); + case 2: + return SDL_FlashWindow(rc_window, SDL_FLASH_UNTIL_FOCUSED); + } + + return -1; +} + +int rc_messageBox(std::string title, std::string msg) +{ + return SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, title.c_str(), msg.c_str(), NULL); +} + +int rc_FPS() +{ + return VideoDriver->getFPS(); +} + + + + +int rc_getNumJoysticks() +{ + return SDL_NumJoysticks(); +} + +int rc_joyAxis(int joy_num, int axis) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickGetAxis(rc_joystick[joy_num], axis); + return 0; +} + +int rc_joyButton(int joy_num, int jbutton) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickGetButton(rc_joystick[joy_num], jbutton); + return 0; +} + +std::string rc_joystickName(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return (std::string)SDL_JoystickName(rc_joystick[joy_num]); + return ""; +} + +int rc_numJoyButtons(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickNumButtons(rc_joystick[joy_num]); + return 0; +} + +int rc_numJoyAxes(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickNumAxes(rc_joystick[joy_num]); + return 0; +} + +int rc_numJoyHats(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickNumHats(rc_joystick[joy_num]); + return 0; +} + +int rc_joyHat(int joy_num, int hat) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickGetHat(rc_joystick[joy_num], hat); + return 0; +} + +int rc_numJoyTrackBalls(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + return SDL_JoystickNumBalls(rc_joystick[joy_num]); + return 0; +} + +void rc_getJoyTrackBall(int joy_num, int ball, double * dx, double * dy) +{ + int x = 0; + int y = 0; + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + SDL_JoystickGetBall(rc_joystick[joy_num], ball, &x, &y); + *dx = x; + *dy = y; +} + +bool rc_joystickIsConnected( int joy_num ) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + { + if(rc_joystick[joy_num]) + return true; + return false; + } + return false; +} + +void rc_joyRumblePlay(int joy_num, double strength, double duration) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + { + SDL_HapticRumblePlay(rc_haptic[joy_num], strength, (Uint32)duration); + } +} + +void rc_joyRumbleStop(int joy_num) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + SDL_HapticRumbleStop(rc_haptic[joy_num]); +} + +int rc_joystickIsHaptic( int joy_num ) +{ + if(joy_num >= 0 && joy_num < MAX_JOYSTICKS) + { + if(rc_haptic[joy_num]) + return 1; + } + return 0; +} + + + + + +void rc_getTouchFinger(int finger, double * x, double * y, double * pressure) +{ + if(finger < MAX_FINGERS) + { + *x = rc_finger[finger].x; + *y = rc_finger[finger].y; + *pressure = rc_finger[finger].pressure; + } +} + +int rc_numFingers() +{ + return rc_fingers_pressed.size(); +} + +double rc_touchPressure() +{ + return rc_pressure; +} + +void rc_getTouch(double * status, double * x, double * y, double * distX, double * distY) +{ + *status = (double)rc_touch; + *x = (double)rc_touchX; + *y = (double)rc_touchY; + *distX = (double)rc_motionX; + *distY = (double)rc_motionY; + return; +} + +void rc_getMultiTouch(double * status, double * x, double * y, double * numFingers, double * dist, double * theta) +{ + *status = (double)rc_mt_status; + *x = (double)rc_mt_x; + *y = (double)rc_mt_y; + *numFingers = (double)rc_mt_numFingers; + *dist = rc_mt_dist; + *theta = rc_mt_theta; + return; +} + +void rc_getAccel(uint32_t accel_num, double * x, double * y, double * z) +{ + float sensor_data[4]; + if(accel_num < num_accels) + SDL_SensorGetData(rc_accel[accel_num], &sensor_data[0], 3); + *x = sensor_data[0]; + *y = sensor_data[1]; + *z = sensor_data[2]; +} + +std::string rc_accelName(uint32_t accel_num) +{ + if(accel_num < num_accels) + return (std::string)SDL_SensorGetName(rc_accel[accel_num]); + return ""; +} + +int rc_numAccels() +{ + return num_accels; +} + +void rc_getGyro(uint32_t gyro_num, double * x, double * y, double * z) +{ + float sensor_data[4]; + if(gyro_num < num_gyros) + SDL_SensorGetData(rc_gyro[gyro_num], &sensor_data[0], 3); + *x = sensor_data[0]; + *y = sensor_data[1]; + *z = sensor_data[2]; +} + +std::string rc_gyroName(uint32_t gyro_num) +{ + if(gyro_num < num_gyros) + return (std::string)SDL_SensorGetName(rc_gyro[gyro_num]); + return ""; +} + +int rc_numGyros() +{ + return num_gyros; +} + +void rc_readInput_Start() +{ + SDL_StartTextInput(); + rc_textinput_isActive = true; + rc_textinput_string = ""; + rc_textinput_timer = clock() / (double)(CLOCKS_PER_SEC / 1000); +} + +void rc_readInput_Stop() +{ + rc_textinput_isActive = false; + rc_textinput_timer = 0; + rc_textinput_string = ""; + SDL_StopTextInput(); +} + +std::string rc_readInput_Text() +{ + return rc_textinput_string; +} + +void rc_readInput_SetText(std::string txt) +{ + rc_textinput_string = txt; +} + +void rc_readInput_ToggleBackspace(bool flag) +{ + rc_toggleBackspace = flag; +} + + +struct rc_image_obj +{ + irr::video::ITexture* image; + Uint8 alpha = 255; + irr::video::SColor color_mod = irr::video::SColor(255,255,255,255); +}; +irr::core::array rc_image; + +irr::video::E_BLEND_OPERATION rc_blend_mode = irr::video::EBO_ADD; +bool rc_bilinear_filter = false; + + +int rc_loadImageEx(std::string img_file, Uint32 color_key = 0, bool use_color_key = true) +{ + rc_image_obj img; + img.image = VideoDriver->getTexture(img_file.c_str()); + + if(img.image == NULL) + return -1; + + if(use_color_key) + VideoDriver->makeColorKeyTexture(img.image, irr::video::SColor(color_key), false); + + int img_id = -1; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + +int rc_loadImage(std::string img_file) +{ + return rc_loadImageEx(img_file, 0, false); +} + +void rc_deleteImage(int img_id) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + rc_image[img_id].image->drop(); + rc_image[img_id].image = NULL; + rc_image[img_id].alpha = 255; + } +} + +int rc_createImageEx(int w, int h, double * pdata, Uint32 colorkey, bool use_color_key=true) +{ + if(w <= 0 || h <=0) + return -1; + + irr::video::IImage* image = VideoDriver->createImage(irr::video::ECF_A8R8G8B8, irr::core::dimension2d((irr::u32)w,(irr::u32)h)); + if(!image) + return -1; + + Uint32 * img_pixels = (Uint32*)image->getData(); + for(int i = 0; i < (w*h); i++) + { + img_pixels[i] = (Uint32)pdata[i]; + } + + irr::video::ITexture* texture = VideoDriver->addTexture("buffer_image", image); + image->drop(); + + if(!texture) + return -1; + + if(use_color_key) + VideoDriver->makeColorKeyTexture(texture, irr::video::SColor(colorkey)); + + int img_id = -1; + rc_image_obj img; + img.image = texture; + img.alpha = 255; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + +int rc_createImage(int w, int h, double* pdata) +{ + return rc_createImageEx(w, h, pdata, 0, false); +} + + +void rc_getImageBuffer(int img_id, double * pdata) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(!rc_image[img_id].image) + return; + + Uint32* img_pixels = (Uint32*)rc_image[img_id].image->lock(); + + int image_size = rc_image[img_id].image->getSize().Width * rc_image[img_id].image->getSize().Height; + + for(int i = 0; i < image_size; i++) + pdata[i] = (double)img_pixels[i]; + + rc_image[img_id].image->unlock(); +} + +void rc_setBilinearFilter(bool flag) +{ + rc_bilinear_filter = flag; +} + +bool rc_getBilinearFilter() +{ + return rc_bilinear_filter; +} + +void rc_setImageColorMod(int img_id, Uint32 color) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + rc_image[img_id].color_mod = irr::video::SColor(color); + } +} + +Uint32 rc_getImageColorMod(int img_id) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return 0; + + if(rc_image[img_id].image) + { + return rc_image[img_id].color_mod.color; + } + + return 0; +} + + +void rc_setBlendMode(int blend_mode) +{ + switch(blend_mode) + { + case 0: rc_blend_mode = EBO_NONE; break; + case 1: rc_blend_mode = EBO_ADD; break; + case 2: rc_blend_mode = EBO_SUBTRACT; break; + case 3: rc_blend_mode = EBO_REVSUBTRACT; break; + case 4: rc_blend_mode = EBO_MIN; break; + case 5: rc_blend_mode = EBO_MAX; break; + case 6: rc_blend_mode = EBO_MIN_FACTOR; break; + case 7: rc_blend_mode = EBO_MAX_FACTOR; break; + case 8: rc_blend_mode = EBO_MIN_ALPHA; break; + case 9: rc_blend_mode = EBO_MAX_ALPHA; break; + } +} + +int rc_getBlendMode() +{ + return (int)rc_blend_mode; +} + +void draw2DImage(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect sourceRect, irr::core::position2d position, irr::core::position2d rotationPoint, irr::f32 rotation, irr::core::vector2df scale, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d screenSize) +{ + if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size()) + return; + + // Store and clear the projection matrix + irr::core::matrix4 oldProjMat = driver->getTransform(irr::video::ETS_PROJECTION); + driver->setTransform(irr::video::ETS_PROJECTION,irr::core::matrix4()); + + // Store and clear the view matrix + irr::core::matrix4 oldViewMat = driver->getTransform(irr::video::ETS_VIEW); + driver->setTransform(irr::video::ETS_VIEW,irr::core::matrix4()); + + // Store and clear the world matrix + irr::core::matrix4 oldWorldMat = driver->getTransform(irr::video::ETS_WORLD); + driver->setTransform(irr::video::ETS_WORLD,irr::core::matrix4()); + + // Find horizontal and vertical axes after rotation + irr::f32 c = cos(-rotation*irr::core::DEGTORAD); + irr::f32 s = sin(-rotation*irr::core::DEGTORAD); + irr::core::vector2df horizontalAxis(c,s); + irr::core::vector2df verticalAxis(s,-c); + + // First, we'll find the offset of the center and then where the center would be after rotation + irr::core::vector2df centerOffset(position.X+sourceRect.getWidth()/2.0f*scale.X-rotationPoint.X,position.Y+sourceRect.getHeight()/2.0f*scale.Y-rotationPoint.Y); + irr::core::vector2df center = centerOffset.X*horizontalAxis - centerOffset.Y*verticalAxis; + center.X += rotationPoint.X; + center.Y += rotationPoint.Y; + + // Now find the corners based off the center + irr::core::vector2df cornerOffset(sourceRect.getWidth()*scale.X/2.0f,sourceRect.getHeight()*scale.Y/2.0f); + verticalAxis *= cornerOffset.Y; + horizontalAxis *= cornerOffset.X; + irr::core::vector2df corner[4]; + corner[0] = center + verticalAxis - horizontalAxis; + corner[1] = center + verticalAxis + horizontalAxis; + corner[2] = center - verticalAxis - horizontalAxis; + corner[3] = center - verticalAxis + horizontalAxis; + + // Find the uv coordinates of the sourceRect + irr::core::vector2df textureSize(texture->getSize().Width, texture->getSize().Height); + irr::core::vector2df uvCorner[4]; + uvCorner[0] = irr::core::vector2df(sourceRect.UpperLeftCorner.X,sourceRect.UpperLeftCorner.Y); + uvCorner[1] = irr::core::vector2df(sourceRect.LowerRightCorner.X,sourceRect.UpperLeftCorner.Y); + uvCorner[2] = irr::core::vector2df(sourceRect.UpperLeftCorner.X,sourceRect.LowerRightCorner.Y); + uvCorner[3] = irr::core::vector2df(sourceRect.LowerRightCorner.X,sourceRect.LowerRightCorner.Y); + for (irr::s32 i = 0; i < 4; i++) + uvCorner[i] /= textureSize; + + // Vertices for the image + irr::video::S3DVertex vertices[4]; + irr::u16 indices[6] = { 0, 1, 2, 3 ,2 ,1 }; + + // Convert pixels to world coordinates + //irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + for (irr::s32 i = 0; i < 4; i++) { + vertices[i].Pos = irr::core::vector3df(((corner[i].X/screenSize.X)-0.5f)*2.0f,((corner[i].Y/screenSize.Y)-0.5f)*-2.0f,1); + vertices[i].TCoords = uvCorner[i]; + vertices[i].Color = color; + } + + // Create the material + // IMPORTANT: For irrlicht 1.8 and above you MUST ADD THIS LINE: + // material.BlendOperation = irr::video::EBO_ADD; + irr::video::SMaterial material; + material.Lighting = false; + material.ZWriteEnable = irr::video::EZW_OFF; + material.ZBuffer = false; + material.BackfaceCulling = false; + material.TextureLayer[0].Texture = texture; + material.TextureLayer[0].BilinearFilter = rc_bilinear_filter; + material.MaterialTypeParam = irr::video::pack_textureBlendFunc(irr::video::EBF_SRC_ALPHA, irr::video::EBF_ONE_MINUS_SRC_ALPHA, irr::video::EMFN_MODULATE_1X, irr::video::EAS_TEXTURE | irr::video::EAS_VERTEX_COLOR); + material.BlendOperation = rc_blend_mode; + //material.BlendOperation = irr::video::EBO_ADD; + + if (useAlphaChannel) + material.MaterialType = irr::video::EMT_ONETEXTURE_BLEND; + else + material.MaterialType = irr::video::EMT_SOLID; + + driver->setMaterial(material); + driver->drawIndexedTriangleList(&vertices[0],4,&indices[0],2); + + // Restore projection, world, and view matrices + driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat); + driver->setTransform(irr::video::ETS_VIEW,oldViewMat); + driver->setTransform(irr::video::ETS_WORLD,oldWorldMat); +} + +void draw2DImage2(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect sourceRect, irr::core::rect destRect, irr::core::position2d rotationPoint, irr::f32 rotation, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d screenSize ) +{ + if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size()) + return; + + // Store and clear the projection matrix + irr::core::matrix4 oldProjMat = driver->getTransform(irr::video::ETS_PROJECTION); + driver->setTransform(irr::video::ETS_PROJECTION,irr::core::matrix4()); + + // Store and clear the view matrix + irr::core::matrix4 oldViewMat = driver->getTransform(irr::video::ETS_VIEW); + driver->setTransform(irr::video::ETS_VIEW,irr::core::matrix4()); + + // Store and clear the world matrix + irr::core::matrix4 oldWorldMat = driver->getTransform(irr::video::ETS_WORLD); + driver->setTransform(irr::video::ETS_WORLD,irr::core::matrix4()); + + // Find horizontal and vertical axes after rotation + irr::f32 c = cos(-rotation*irr::core::DEGTORAD); + irr::f32 s = sin(-rotation*irr::core::DEGTORAD); + irr::core::vector2df horizontalAxis(c,s); + irr::core::vector2df verticalAxis(s,-c); + + // First, we'll find the offset of the center and then where the center would be after rotation + irr::core::vector2df centerOffset(destRect.UpperLeftCorner.X+destRect.getWidth()/2.0f-rotationPoint.X,destRect.UpperLeftCorner.Y+destRect.getHeight()/2.0f-rotationPoint.Y); + irr::core::vector2df center = centerOffset.X*horizontalAxis - centerOffset.Y*verticalAxis; + center.X += rotationPoint.X; + center.Y += rotationPoint.Y; + + // Now find the corners based off the center + irr::core::vector2df cornerOffset(destRect.getWidth()/2.0f,destRect.getHeight()/2.0f); + verticalAxis *= cornerOffset.Y; + horizontalAxis *= cornerOffset.X; + irr::core::vector2df corner[4]; + corner[0] = center + verticalAxis - horizontalAxis; + corner[1] = center + verticalAxis + horizontalAxis; + corner[2] = center - verticalAxis - horizontalAxis; + corner[3] = center - verticalAxis + horizontalAxis; + + // Find the uv coordinates of the sourceRect + irr::core::vector2df textureSize(texture->getSize().Width, texture->getSize().Height); + irr::core::vector2df uvCorner[4]; + uvCorner[0] = irr::core::vector2df(sourceRect.UpperLeftCorner.X,sourceRect.UpperLeftCorner.Y); + uvCorner[1] = irr::core::vector2df(sourceRect.LowerRightCorner.X,sourceRect.UpperLeftCorner.Y); + uvCorner[2] = irr::core::vector2df(sourceRect.UpperLeftCorner.X,sourceRect.LowerRightCorner.Y); + uvCorner[3] = irr::core::vector2df(sourceRect.LowerRightCorner.X,sourceRect.LowerRightCorner.Y); + for (irr::s32 i = 0; i < 4; i++) + uvCorner[i] /= textureSize; + + // Vertices for the image + irr::video::S3DVertex vertices[4]; + irr::u16 indices[6] = { 0, 1, 2, 3 ,2 ,1 }; + + // Convert pixels to world coordinates + //irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + for (irr::s32 i = 0; i < 4; i++) { + vertices[i].Pos = irr::core::vector3df(((corner[i].X/screenSize.X)-0.5f)*2.0f,((corner[i].Y/screenSize.Y)-0.5f)*-2.0f,1); + vertices[i].TCoords = uvCorner[i]; + vertices[i].Color = color; + } + + // Create the material + // IMPORTANT: For irrlicht 1.8 and above you MUST ADD THIS LINE: + // material.BlendOperation = irr::video::EBO_ADD; + irr::video::SMaterial material; + material.Lighting = false; + material.ZWriteEnable = irr::video::EZW_OFF; + material.ZBuffer = false; + material.BackfaceCulling = false; + material.TextureLayer[0].Texture = texture; + material.TextureLayer[0].BilinearFilter = rc_bilinear_filter; //TODO: Add option to switch this on/off + material.BlendOperation = rc_blend_mode; + material.MaterialTypeParam = irr::video::pack_textureBlendFunc(irr::video::EBF_SRC_ALPHA, irr::video::EBF_ONE_MINUS_SRC_ALPHA, irr::video::EMFN_MODULATE_1X, irr::video::EAS_TEXTURE | irr::video::EAS_VERTEX_COLOR); + //material.AntiAliasing = irr::video::EAAM_OFF; + + if (useAlphaChannel) + material.MaterialType = irr::video::EMT_ONETEXTURE_BLEND; + else + material.MaterialType = irr::video::EMT_SOLID; + + driver->setMaterial(material); + driver->drawIndexedTriangleList(&vertices[0],4,&indices[0],2); + + // Restore projection, world, and view matrices + driver->setTransform(irr::video::ETS_PROJECTION,oldProjMat); + driver->setTransform(irr::video::ETS_VIEW,oldViewMat); + driver->setTransform(irr::video::ETS_WORLD,oldWorldMat); +} + + +void rc_drawImage(int img_id, int x, int y) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(0, 0), src_size); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(0, 0); //since we are not rotating it doesn't matter + + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + //irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(src_w, src_h));; + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +int rc_copyImage(int src_id) +{ + if(src_id < 0 || src_id >= rc_image.size()) + return -1; + + if(!rc_image[src_id].image) + return -1; + + irr::video::ITexture* texture = VideoDriver->addRenderTargetTexture(rc_image[src_id].image->getSize(), "img_copy", irr::video::ECF_A8R8G8B8); + + if(!texture) + return -1; + + VideoDriver->setRenderTarget(texture, true, false, irr::video::SColor(0)); + + + irr::core::dimension2d src_size = rc_image[src_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(0, 0), src_size); + irr::core::position2d position(0, 0); + irr::core::position2d rotationPoint(0, 0); //since we are not rotating it doesn't matter + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[src_id].alpha, + rc_image[src_id].color_mod.getRed(), + rc_image[src_id].color_mod.getGreen(), + rc_image[src_id].color_mod.getBlue()); + irr::core::vector2df screenSize(src_size.Width, src_size.Height); + + draw2DImage(VideoDriver, rc_image[src_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + + rc_setActiveCanvas(rc_active_canvas); + + int img_id = -1; + rc_image_obj img; + img.image = texture; + img.alpha = 255; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + + +void rc_drawImage_Rotate(int img_id, int x, int y, double angle) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect(0, 0, src_size.Width, src_size.Height); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(x + (src_size.Width/2), y + (src_size.Height/2)); + + irr::f32 rotation = -1*angle; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_Zoom(int img_id, int x, int y, double zx, double zy) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect(0, 0, src_size.Width, src_size.Height); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(x + (src_size.Width/2), y + (src_size.Height/2)); + + irr::f32 rotation = 0; + irr::core::vector2df scale((irr::f32)zx, (irr::f32)zy); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_ZoomEx(int img_id, int x, int y, int src_x, int src_y, int src_w, int src_h, double zx, double zy) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(x + (src_w/2), y + (src_h/2)); + + irr::f32 rotation = 0; + irr::core::vector2df scale((irr::f32)zx, (irr::f32)zy); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_Rotozoom(int img_id, int x, int y, double angle, double zx, double zy) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect(0, 0, src_size.Width, src_size.Height); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(x + (src_size.Width/2)*zx, y + (src_size.Height/2)*zy); + + irr::f32 rotation = -1*angle; + irr::core::vector2df scale((irr::f32)zx, (irr::f32)zy); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_RotozoomEx(int img_id, int x, int y, int src_x, int src_y, int src_w, int src_h, double angle, double zx, double zy) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(x + (src_w/2)*zx, y + (src_h/2)*zy); + + irr::f32 rotation = -1*angle; + irr::core::vector2df scale((irr::f32)zx, (irr::f32)zy); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + + +void rc_drawImage_Flip(int img_id, int x, int y, bool h, bool v) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect(0, 0, src_size.Width, src_size.Height); + + irr::core::position2d rotationPoint(x + (src_size.Width/2), y + (src_size.Height/2)); + + irr::f32 rotation = 0; + irr::core::vector2df scale((irr::f32)(h ? -1 : 1), (irr::f32) (v ? -1 : 1)); + + irr::core::position2d position( (h ? x+src_size.Width : x), (v ? y+src_size.Height : y)); + + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_FlipEx(int img_id, int x, int y, int src_x, int src_y, int src_w, int src_h, bool h, bool v) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + irr::core::position2d rotationPoint(x + (src_w/2), y + (src_h/2)); + + irr::f32 rotation = 0; + irr::core::vector2df scale((irr::f32)(h ? -1 : 1), (irr::f32) (v ? -1 : 1)); + + irr::core::position2d position( (h ? x+src_w : x), (v ? y+src_h : y)); + + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + + +void rc_drawImage_Blit(int img_id, int x, int y, int src_x, int src_y, int src_w, int src_h) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(0, 0); //since we are not rotating it doesn't matter + + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(src_w, src_h)); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + + +void rc_drawImage_RotateEx(int img_id, int x, int y, int src_x, int src_y, int src_w, int src_h, int angle) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + //irr::core::position2d position(x, y); + + irr::core::vector2d rotationPoint(x + (src_w/2), y + (src_h/2)); + + irr::f32 rotation = -1*angle; + //irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(src_w, src_h)); + + draw2DImage2(VideoDriver, rc_image[img_id].image, sourceRect, dest, rotationPoint, rotation, useAlphaChannel, color, screenSize); + } +} + +void rc_drawImage_BlitEx(int img_id, int x, int y, int w, int h, int src_x, int src_y, int src_w, int src_h) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + //irr::core::dimension2d src_size = rc_image[img_id].image->getSize(); + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + //irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(0, 0); //since we are not rotating it doesn't matter + + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(rc_image[img_id].alpha, + rc_image[img_id].color_mod.getRed(), + rc_image[img_id].color_mod.getGreen(), + rc_image[img_id].color_mod.getBlue()); + + irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(w, h)); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + draw2DImage2(VideoDriver, rc_image[img_id].image, sourceRect, dest, rotationPoint, rotation, useAlphaChannel, color, screenSize ); + } +} + +void rc_setImageAlpha(int img_id, Uint8 alpha) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + rc_image[img_id].alpha = alpha; + } +} + +Uint32 rc_getImageAlpha(int img_id) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return 0; + + if(rc_image[img_id].image) + { + return rc_image[img_id].alpha; + } + + return 0; +} + +bool rc_imageExists(int img_id) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return false; + + if(rc_image[img_id].image) + return true; + + return false; +} + +void rc_getImageSize(int img_id, double* w, double* h) +{ + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(rc_image[img_id].image) + { + *w = (double)rc_image[img_id].image->getSize().Width; + *h = (double)rc_image[img_id].image->getSize().Height; + } +} + +void rc_setColorKey(int img_id, Uint32 colorkey) +{ + if(!rc_imageExists(img_id)) + return; + + VideoDriver->makeColorKeyTexture(rc_image[img_id].image, irr::video::SColor(colorkey)); +} + + + +//FloodFill is technically a primitive but it uses the draw2Dimage function since the pixels returned by lock are flipped vertically +void floodFill(int x, int y, Uint32* img_pixels, Uint32 prev_color) +{ + if(x < 0 || x >= rc_canvas[rc_active_canvas].texture->getSize().Width) + return; + + if(y < 0 || y >= rc_canvas[rc_active_canvas].texture->getSize().Height) + return; + + if(img_pixels[y*rc_canvas[rc_active_canvas].texture->getSize().Width+x] != prev_color) + return; + + img_pixels[y*rc_canvas[rc_active_canvas].texture->getSize().Width+x] = rc_active_color.color; + + floodFill(x-1, y, img_pixels, prev_color); + floodFill(x, y-1, img_pixels, prev_color); + floodFill(x+1, y, img_pixels, prev_color); + floodFill(x, y+1, img_pixels, prev_color); +} + +void rc_floodFill(int x, int y) +{ + if(!rc_canvas[rc_active_canvas].texture) + return; + + if(x < 0 || x >= rc_canvas[rc_active_canvas].dimension.Width) + return; + + if(y < 0 || y >= rc_canvas[rc_active_canvas].dimension.Height) + return; + + Uint32* img_pixels = (Uint32*)rc_canvas[rc_active_canvas].texture->lock(); + + Uint32 flood_size = rc_canvas[rc_active_canvas].texture->getSize().Width*rc_canvas[rc_active_canvas].texture->getSize().Height; + Uint32* flood_buffer = new Uint32[flood_size]; + + for(int i = 0; i < flood_size; i++) + { + flood_buffer[i] = img_pixels[i]; + } + + floodFill(x, y,flood_buffer, flood_buffer[y*rc_canvas[rc_active_canvas].texture->getSize().Width+x]); + + for(int i = 0; i < flood_size; i++) + { + img_pixels[i] = flood_buffer[i]; + } + + rc_canvas[rc_active_canvas].texture->unlock(); + + Uint32 nw = rc_canvas[rc_active_canvas].dimension.Width; + Uint32 nh = rc_canvas[rc_active_canvas].dimension.Height; + irr::video::ITexture* new_canvas = VideoDriver->addRenderTargetTexture(irr::core::dimension2d(nw,nh), "rt", ECF_A8R8G8B8); + irr::video::ITexture* old_canvas = rc_canvas[rc_active_canvas].texture; + rc_canvas[rc_active_canvas].texture = new_canvas; + + irr::core::dimension2d src_size = new_canvas->getSize(); + irr::core::rect sourceRect(0, 0, src_size.Width, src_size.Height); + + irr::core::position2d rotationPoint((src_size.Width/2), (src_size.Height/2)); + + irr::f32 rotation = 0; + irr::core::vector2df scale((irr::f32)1, (irr::f32)-1); + + irr::core::position2d position(0, src_size.Height); + + bool useAlphaChannel = true; + irr::video::SColor color(rc_canvas[rc_active_canvas].color_mod); + + irr::core::vector2df screenSize(rc_canvas[rc_active_canvas].dimension.Width, rc_canvas[rc_active_canvas].dimension.Height); + + rc_setActiveCanvas(rc_active_canvas); + draw2DImage(VideoDriver, old_canvas, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + + VideoDriver->removeTexture(old_canvas); +} + + + + +void drawCanvasImage(irr::video::ITexture* texture, int x, int y, int src_x, int src_y, int src_w, int src_h, int tgt_width, int tgt_height) +{ + if(texture) + { + irr::core::rect sourceRect( irr::core::vector2d(src_x, src_y), irr::core::dimension2d(src_w, src_h)); + + irr::core::position2d position(x, y); + + irr::core::position2d rotationPoint(0, 0); //since we are not rotating it doesn't matter + + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color(255,255,255,255); + + irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(src_w, src_h)); + + irr::core::vector2df screenSize(tgt_width, tgt_height); + + draw2DImage(VideoDriver, texture, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } +} + + +int rc_windowClip(int x, int y, int w, int h) +{ + if(w <= 0 || h <=0) + return -1; + + if(rc_canvas.size()>0) + { + if(!rc_canvas[0].texture) + return -1; + } + else + return -1; + + irr::video::ITexture* texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)w, (irr::u32)h), "win_clip_image", irr::video::ECF_A8R8G8B8); + + if(!texture) + return -1; + + VideoDriver->setRenderTarget(texture); + + drawCanvasImage(rc_canvas[0].texture, 0, 0, x, y, w, h, w, h); + + VideoDriver->setRenderTarget(rc_canvas[0].texture); + + if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size()) + if(rc_canvas[rc_active_canvas].texture) + VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false); + + + int img_id = -1; + rc_image_obj img; + img.image = texture; + img.alpha = 255; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + + +int rc_canvasClip(int x, int y, int w, int h) +{ + if(w <= 0 || h <=0) + return -1; + + if(rc_active_canvas >= 0 && rc_active_canvas < rc_canvas.size()) + { + if(!rc_canvas[rc_active_canvas].texture) + return -1; + } + else + return -1; + + irr::video::ITexture* texture = VideoDriver->addRenderTargetTexture(irr::core::dimension2d((irr::u32)w, (irr::u32)h), "canvas_clip_image", irr::video::ECF_A8R8G8B8); + + if(!texture) + return -1; + + VideoDriver->setRenderTarget(texture); + + drawCanvasImage(rc_canvas[rc_active_canvas].texture, 0, 0, x, y, w, h, w, h); + + VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, false, false); + + int img_id = -1; + rc_image_obj img; + img.image = texture; + img.alpha = 255; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + + + +//------------------------------SPRITES------------------------------------------------------- +int rc_createSprite(int img_id) +{ + if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size()) + return -1; + + if(rc_canvas[rc_active_canvas].show3D) + return -1; + + std::cout << "debug 1" << std::endl; + + int spr_id = -1; + for(int i = 0; i < rc_sprite.size(); i++) + { + if(!rc_sprite[i].active) + { + spr_id = i; + break; + } + } + + if(spr_id < 0) + { + spr_id = rc_sprite.size(); + rc_sprite2D_obj sprite; + rc_sprite.push_back(sprite); + } + + rc_sprite[spr_id].active = true; + rc_sprite[spr_id].image_id = img_id; + + b2BodyDef sprBodyDef; + sprBodyDef.type = b2_staticBody; + sprBodyDef.position.Set(0, 0); + sprBodyDef.angle = 0; + rc_sprite[spr_id].physics.body = rc_canvas[rc_active_canvas].physics2D.world->CreateBody(&sprBodyDef); + rc_sprite[spr_id].physics_enabled = false; + rc_sprite[spr_id].visible = true; + rc_sprite[spr_id].scale.set(1.0, 1.0); + rc_sprite[spr_id].position.set(0, 0); + rc_sprite[spr_id].alpha = 255; + rc_sprite[spr_id].rotation = 0; + rc_sprite[spr_id].z = 0; + rc_sprite[spr_id].color_mod.set(255,255,255,255); + rc_sprite[spr_id].parent_canvas = rc_active_canvas; + + rc_canvas[rc_active_canvas].sprite.push_back(&rc_sprite[spr_id]); + + return spr_id; +} + +void rc_deleteSprite(int spr_id) +{ + if(spr_id < 0 || spr_id >= rc_sprite.size()) + return; + + if(rc_sprite[spr_id].physics.body) + { + if(rc_sprite[spr_id].parent_canvas >= 0 && rc_sprite[spr_id].parent_canvas < rc_canvas.size()) + { + if(rc_canvas[rc_sprite[spr_id].parent_canvas].physics2D.world) + rc_canvas[rc_sprite[spr_id].parent_canvas].physics2D.world->DestroyBody(rc_sprite[spr_id].physics.body); + } + rc_sprite[spr_id].physics.body = NULL; + } + + rc_sprite[spr_id].active = false; + + for(int i = 0; i < rc_canvas[rc_active_canvas].sprite.size(); i++) + { + rc_sprite2D_obj* canvas_sprite = rc_canvas[rc_active_canvas].sprite[i]; + rc_sprite2D_obj* global_sprite = &rc_sprite[spr_id]; + if(canvas_sprite == global_sprite) + { + rc_canvas[rc_active_canvas].sprite.erase(i); + break; + } + } +} + +void rc_setSpriteBodyType(int spr_id, int body_type) +{ + if(spr_id < 0 || spr_id >= rc_sprite.size()) + return; + + if(!rc_sprite[spr_id].active) + return; + + rc_sprite[spr_id].physics.body->SetType((b2BodyType) body_type); +} + +void rc_setSpritePosition(int spr_id, double x, double y) +{ + if(spr_id < 0 || spr_id >= rc_sprite.size()) + return; + + if(!rc_sprite[spr_id].active) + return; + + float current_angle = rc_sprite[spr_id].physics.body->GetAngle(); + rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(x, y), current_angle); +} + +//This function is called on each canvas on update +void drawSprites(int canvas_id) +{ + if(rc_canvas[canvas_id].show3D) + return; + + float step = rc_canvas[canvas_id].physics2D.timeStep; + int32 velocityIterations = rc_canvas[canvas_id].physics2D.velocityIterations; + int32 positionIterations = rc_canvas[canvas_id].physics2D.positionIterations; + + rc_canvas[canvas_id].physics2D.world->Step(step, velocityIterations, positionIterations); + //Setting the render target to the current canvas. NOTE: I might change this target to a separate sprite layer later. + VideoDriver->setRenderTarget(rc_canvas[canvas_id].texture, false, false); + + + irr::core::dimension2d src_size; + irr::core::rect sourceRect; + + irr::core::position2d position; + + irr::core::position2d rotationPoint; + + irr::f32 rotation = 0; + irr::core::vector2df scale(1.0, 1.0); + bool useAlphaChannel = true; + irr::video::SColor color; + + //irr::core::rect dest( irr::core::vector2d(x, y), irr::core::dimension2d(src_w, src_h));; + + irr::core::vector2df screenSize(rc_canvas[canvas_id].dimension.Width, rc_canvas[canvas_id].dimension.Height); + + int x = 0; + int y = 0; + + b2Vec2 physics_pos; + + for(int spr_index = 0; spr_index < rc_canvas[canvas_id].sprite.size(); spr_index++) + { + rc_sprite2D_obj* sprite = rc_canvas[canvas_id].sprite[spr_index]; + if(!sprite->visible) + continue; + + int img_id = sprite->image_id; + if(img_id < 0 || img_id >= rc_image.size()) + continue; + + src_size = rc_image[img_id].image->getSize(); + sourceRect = irr::core::rect( irr::core::vector2d(0, 0), src_size); + + physics_pos = sprite->physics.body->GetPosition(); + x = (int)physics_pos.x; + y = (int)physics_pos.y; + position.set(x, y); + + + rotationPoint.set(x + (src_size.Width/2), y + (src_size.Height/2)); + rotation = -1 * (sprite->physics.body->GetAngle() * (180.0/3.141592653589793238463)); //convert Box2D radians to degrees + + scale.set(sprite->scale.X, sprite->scale.Y); + + color.set(sprite->alpha, + sprite->color_mod.getRed(), + sprite->color_mod.getGreen(), + sprite->color_mod.getBlue()); + + draw2DImage(VideoDriver, rc_image[img_id].image, sourceRect, position, rotationPoint, rotation, scale, useAlphaChannel, color, screenSize); + } + //Must set back to canvas 0 (the backbuffer) before returning + + VideoDriver->setRenderTarget(rc_canvas[0].texture, false, false); +} + +//NOTE TO TBIRD +// 1. Each sprite has a Box2D body. You can look in "rc_sprite2D.h" to see how a sprite is structured. +// 2. A box2D world is setup for each canvas. So a sprite will be attached to the canvas thats active when its created. When that canvas is destroyed, so is the sprite. +// 3. By default, I have the sprite.physics_enabled attribute set to false. I feel like it makes sense to have a user intentionally enable physics since a user may not want physics for every sprite. +// 4. The sprite.visible attribute only determines whether to draw the sprite. The physics simulation will still happen each frame unless physics are disabled. +// 5. Don't change the value of sprite.active. Its used to check whether a sprite exists or not. I have an array of sprites in rc_sprite2D.h and if the active attribute is set to false, I reuse that slot to create a new sprite. If there is no inactive sprites in the array then I add a new sprite index to the array. +// 6. The time step, velocity Iterations, and position iterations are part of the canvas.physics2D attribute. You will need to make functions to allow the user to change those. +// 7. If you want to modify how sprites are rendered then you can just change the drawSprites() function above these notes. + +//-----------------------------END OF SPRITE STUFF------------------------------------------------------------------------------ + + + + +bool rc_update() +{ + if(!device->run()) + return false; + + int win_w = 0, win_h = 0; + int w_scale = 1, h_scale = 1; + + if(rc_window) + { + SDL_GetWindowSize(rc_window, &win_w, &win_h); + //std::cout << "size = " << win_w << ", " << win_h << std::endl; + } + + SEvent irrevent; + SDL_Event SDL_event; + bool Close = false; + + while ( !Close && SDL_PollEvent( &SDL_event ) ) + { + // os::Printer::log("event: ", core::stringc((int)SDL_event.type).c_str(), ELL_INFORMATION); // just for debugging + + switch ( SDL_event.type ) + { + case SDL_QUIT: + SDL_PumpEvents(); + Close = true; + break; + case SDL_MOUSEMOTION: + irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT; + irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED; + MouseX = irrevent.MouseInput.X = SDL_event.motion.x; + MouseY = irrevent.MouseInput.Y = SDL_event.motion.y; + MouseXRel = SDL_event.motion.xrel; + MouseYRel = SDL_event.motion.yrel; + irrevent.MouseInput.ButtonStates = MouseButtonStates; + + device->postEventFromUser(irrevent); + break; + + case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONUP: + + irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT; + irrevent.MouseInput.X = SDL_event.button.x; + irrevent.MouseInput.Y = SDL_event.button.y; + + irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED; + + switch(SDL_event.button.button) + { + case SDL_BUTTON_LEFT: + if (SDL_event.type == SDL_MOUSEBUTTONDOWN) + { + irrevent.MouseInput.Event = irr::EMIE_LMOUSE_PRESSED_DOWN; + MouseButtonStates |= irr::EMBSM_LEFT; + } + else + { + irrevent.MouseInput.Event = irr::EMIE_LMOUSE_LEFT_UP; + MouseButtonStates &= !irr::EMBSM_LEFT; + } + + //std::cout << "Position = " << SDL_event.button.x << ", " << SDL_event.button.y << std::endl; + //rc_canvas[0].offset.X++; + break; + + case SDL_BUTTON_RIGHT: + if (SDL_event.type == SDL_MOUSEBUTTONDOWN) + { + irrevent.MouseInput.Event = irr::EMIE_RMOUSE_PRESSED_DOWN; + MouseButtonStates |= irr::EMBSM_RIGHT; + } + else + { + irrevent.MouseInput.Event = irr::EMIE_RMOUSE_LEFT_UP; + MouseButtonStates &= !irr::EMBSM_RIGHT; + } + + //rc_setWindowFullscreen(1); + //rc_canvas[0].offset.X--; + break; + + case SDL_BUTTON_MIDDLE: + if (SDL_event.type == SDL_MOUSEBUTTONDOWN) + { + irrevent.MouseInput.Event = irr::EMIE_MMOUSE_PRESSED_DOWN; + MouseButtonStates |= irr::EMBSM_MIDDLE; + } + else + { + irrevent.MouseInput.Event = irr::EMIE_MMOUSE_LEFT_UP; + MouseButtonStates &= !irr::EMBSM_MIDDLE; + } + break; + + } + + irrevent.MouseInput.ButtonStates = MouseButtonStates; + + if (irrevent.MouseInput.Event != irr::EMIE_MOUSE_MOVED) + { + device->postEventFromUser(irrevent); + + if ( irrevent.MouseInput.Event >= EMIE_LMOUSE_PRESSED_DOWN && irrevent.MouseInput.Event <= EMIE_MMOUSE_PRESSED_DOWN ) + { + u32 clicks = device->checkSuccessiveClicks(irrevent.MouseInput.X, irrevent.MouseInput.Y, irrevent.MouseInput.Event); + if ( clicks == 2 ) + { + irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_DOUBLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN); + device->postEventFromUser(irrevent); + } + else if ( clicks == 3 ) + { + irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_TRIPLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN); + device->postEventFromUser(irrevent); + } + } + } + break; + + case SDL_MOUSEWHEEL: + irrevent.MouseInput.Event = irr::EMIE_MOUSE_WHEEL; + irrevent.MouseInput.Wheel = SDL_event.wheel.y; + rc_mwheelx = SDL_event.wheel.x; + rc_mwheely = SDL_event.wheel.y; + break; + + case SDL_TEXTINPUT: + if(rc_textinput_flag == true) + { + rc_textinput_string += SDL_event.text.text; + } + break; + + case SDL_KEYUP: + case SDL_KEYDOWN: + { + SDLKeyMap mp; + mp.SDLKey = SDL_event.key.keysym.sym; + s32 idx = KeyMap.binary_search(mp); + + EKEY_CODE key; + if (idx == -1) + key = (EKEY_CODE)0; + else + key = (EKEY_CODE)KeyMap[idx].Win32Key; + + irrevent.EventType = irr::EET_KEY_INPUT_EVENT; + irrevent.KeyInput.Char = SDL_event.key.keysym.sym; + irrevent.KeyInput.Key = key; + irrevent.KeyInput.PressedDown = (SDL_event.type == SDL_KEYDOWN); + irrevent.KeyInput.Shift = (SDL_event.key.keysym.mod & KMOD_SHIFT) != 0; + irrevent.KeyInput.Control = (SDL_event.key.keysym.mod & KMOD_CTRL ) != 0; + device->postEventFromUser(irrevent); + } + + if(SDL_event.type == SDL_KEYDOWN) + { + if(rc_textinput_flag && SDL_event.key.keysym.sym == SDLK_BACKSPACE && rc_textinput_string.length() > 0 + && rc_toggleBackspace) + { + rc_textinput_string = rc_utf8_substr(rc_textinput_string, 0, rc_utf8_length(rc_textinput_string)-1); + } + + rc_inkey_val = SDL_event.key.keysym.sym; + } + break; + + + case SDL_WINDOWEVENT: + if (SDL_event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) + { + // FIXME: Implement more precise window control + // FIXME: Check if the window is game window + s32 Width = SDL_event.window.data1; + s32 Height = SDL_event.window.data2; + + rc_win_event = RC_WIN_EVENT_RESIZE; + + //resizeWindow(Width, Height); + if (VideoDriver) + VideoDriver->OnResize(core::dimension2d(Width, Height)); + + win_w = Width; + win_h = Height; + + } + else if(SDL_event.window.event == SDL_WINDOWEVENT_CLOSE) + { + if(rc_window) + { + rc_win_event = RC_WIN_EVENT_CLOSE; + + if(SDL_QuitRequested() != 0) + { + SDL_FlushEvent(SDL_QUIT); + } + if(rc_win_exitOnClose) + { + rc_closeWindow_hw(); + Close = true; + } + + } + } + else if(SDL_event.window.event == SDL_WINDOWEVENT_MINIMIZED) + { + if(rc_window) + { + rc_win_event = RC_WIN_EVENT_MINIMIZE; + } + } + else if(SDL_event.window.event == SDL_WINDOWEVENT_MAXIMIZED) + { + if(rc_window) + { + rc_win_event = RC_WIN_EVENT_MAXIMIZE; + } + } + + break; + + case SDL_JOYDEVICEREMOVED: + //cout << "Joystick Removed: Instance " << event.jdevice.which << endl; + for(int i = 0; i < 8; i++) + { + if(SDL_event.jdevice.which == rc_joyID[i] && rc_joystick[i]) + { + //cout << "Joystick [" << i << "] was removed" << endl; + SDL_HapticClose(rc_haptic[i]); + SDL_JoystickClose(rc_joystick[i]); + rc_joystick[i] = NULL; + rc_haptic[i] = NULL; + rc_joyID[i] = -1; + rc_numJoysticks--; + break; + } + } + break; + case SDL_JOYDEVICEADDED: + //cout << "Joystick Added: " << event.jdevice.which << endl; + tmp_joy = SDL_JoystickOpen(SDL_event.jdevice.which); + tmp_joy_id = SDL_JoystickInstanceID(tmp_joy); + tmp_joy_flag = 0; + + for(int i = 0; i < 8; i++) + { + if(tmp_joy_id == rc_joyID[i]) + { + tmp_joy_flag = 1; + break; + } + } + + if(SDL_event.jdevice.which >= 0 && tmp_joy_flag == 0) + { + for(int i = 0; i < 8; i++) + { + if(rc_joystick[i] == NULL) + { + //cout << "Assigned " << i << endl; + rc_joystick[i] = tmp_joy; + rc_haptic[i] = SDL_HapticOpenFromJoystick(rc_joystick[i]); + SDL_HapticRumbleInit(rc_haptic[i]); + rc_joyID[i] = tmp_joy_id; + rc_numJoysticks++; + break; + } + } + } + break; + +#ifndef RC_MOBILE //This block handles touch events for non-mobile devices, Just in case it has a touch screen that SDL2 can get events for + case SDL_FINGERDOWN: + rc_touch = 1; + rc_touchX = SDL_event.tfinger.x * win_w; + rc_touchY = SDL_event.tfinger.y * win_h; +#ifdef RC_IOS + rc_pressure = 1; //FIXME: On IOS pressure is always getting reported as 0 on finger down so I am just setting it to 1 until I figure this out +#else + rc_pressure = SDL_event.tfinger.pressure; +#endif + rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure); + break; + case SDL_FINGERUP: + rc_touch = 0; + rc_mt_status = 0; + rc_touchX = SDL_event.tfinger.x * win_w; + rc_touchY = SDL_event.tfinger.y * win_h; + rc_pressure = SDL_event.tfinger.pressure; + rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, -1, -1, 0); + break; + case SDL_FINGERMOTION: + rc_touch = 1; + rc_touchX = SDL_event.tfinger.x * win_w; + rc_touchY = SDL_event.tfinger.y * win_h; + rc_motionX = SDL_event.tfinger.dx * win_w; + rc_motionY = SDL_event.tfinger.dy * win_h; +#ifdef RC_IOS + rc_pressure = 1; +#else + rc_pressure = SDL_event.tfinger.pressure; +#endif + rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure); + break; + case SDL_MULTIGESTURE: + rc_touch = 2; + rc_mt_status = 1; + rc_mt_x = SDL_event.mgesture.x; + rc_mt_y = SDL_event.mgesture.y; + rc_mt_numFingers = SDL_event.mgesture.numFingers; + rc_mt_dist = SDL_event.mgesture.dDist; + rc_mt_theta = SDL_event.mgesture.dTheta; +#ifdef RC_IOS + rc_pressure = 1; +#else + rc_pressure = SDL_event.tfinger.pressure; +#endif + break; +#endif + + case SDL_USEREVENT: + irrevent.EventType = irr::EET_USER_EVENT; + irrevent.UserEvent.UserData1 = reinterpret_cast(SDL_event.user.data1); + irrevent.UserEvent.UserData2 = reinterpret_cast(SDL_event.user.data2); + + device->postEventFromUser(irrevent); + break; + + default: + break; + } // end switch + + } // end while + + if(!Close) + { + irrtheora::updateVideo(); + + VideoDriver->setRenderTarget(rc_canvas[0].texture); + irr::core::vector2d bb_position(0,0); + irr::core::dimension2d bb_dimension(win_w, win_h); + VideoDriver->setViewPort( irr::core::rect(bb_position, bb_dimension) ); + + irr::core::vector2d screenSize( (irr::f32) rc_canvas[0].dimension.Width, (irr::f32) rc_canvas[0].dimension.Height ); + + double frame_current_time = ((double)SDL_GetTicks())/1000.0d; + + for(int i = 0; i < rc_transition_actor.size();) + { + if((frame_current_time - rc_actor[i].transition_start_time) >= rc_actor[i].transition_time) + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[i].mesh_node; + node->setTransitionTime(0); + node->setJointMode(irr::scene::EJUOR_NONE); + rc_actor[i].transition = false; + rc_actor[i].transition_time = 0; + rc_actor[i].transition_start_time = 0; + rc_transition_actor.erase(i); + } + else + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[i].mesh_node; + node->animateJoints(); + i++; + } + } + + + VideoDriver->beginScene(true, true); + + rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp; + rc_physics3D.TimeStamp = device->getTimer()->getTime(); + rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, rc_physics3D.fixedTimeStep); + + for(int i = 0; i < rc_canvas.size(); i++) + { + if(rc_canvas[i].show3D) + { + VideoDriver->setRenderTarget(rc_canvas[i].texture, true, true, irr::video::SColor(255,120,120,120)); + + if(rc_canvas[i].camera.camera) + SceneManager->setActiveCamera(rc_canvas[i].camera.camera); + + rc_canvas[i].camera.update(); + + VideoDriver->setViewPort(irr::core::rect(0,0,rc_canvas[i].viewport.dimension.Width,rc_canvas[i].viewport.dimension.Height)); + + //irr::core::rect viewport(irr::core::position, rc_canvas[i].viewport.dimension); + //VideoDriver->setViewPort(viewport); + + SceneManager->drawAll(); + + vector3df p0(0, 0, 0); + vector3df p1(10, 30, 0); + vector3df p2(20, -30, 0); + vector3df p3(30, 0, 0); + //drawBezierCurve(VideoDriver, p0, p1, p2, p3, irr::video::SColor(255, 0, 255, 0), 100); + + VideoDriver->setRenderTarget(rc_canvas[0].texture); + } + } + + + + for(int cz = 0; cz < rc_canvas_zOrder.size(); cz++) + { + int canvas_id = rc_canvas_zOrder[cz]; + + if(rc_canvas[canvas_id].texture && rc_canvas[canvas_id].visible) + { + irr::core::rect dest(rc_canvas[canvas_id].viewport.position, rc_canvas[canvas_id].viewport.dimension); + irr::core::rect src(rc_canvas[canvas_id].offset, rc_canvas[canvas_id].viewport.dimension); + + irr::video::SColor color(rc_canvas[canvas_id].color_mod); + //color.set(255,255,255,255); + + //std::cout << "draw canvas[" << canvas_id << "]" << std::endl; + + drawSprites(canvas_id); + draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::vector2d(0, 0), 0, true, color, screenSize); + + //drawSprites(canvas_id); + //draw2DImage2(VideoDriver, rc_canvas[canvas_id].sprite_layer, src, dest, irr::core::vector2d(0, 0), 0, true, color, screenSize); + //drawCanvasImage(rc_canvas[canvas_id].texture, dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y, + // src.UpperLeftCorner.X, src.UpperLeftCorner.Y, src.getWidth(), src.getHeight(), dest.getWidth(), dest.getHeight()); + + //VideoDriver->draw2DImage(rc_canvas[canvas_id].texture, dest, src, 0, &color, true); + } + } + + //env->drawAll(); + + VideoDriver->setRenderTarget(0); + //VideoDriver->beginScene(true, true); + VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d(0,0)); + //device->getGUIEnvironment()->drawAll(); + VideoDriver->endScene(); + + rc_setActiveCanvas(rc_active_canvas); + } + + #ifdef RC_WEB + emscripten_sleep(0); + #else + SDL_Delay(0); + #endif // RC_WEB + + return (!Close); +} + +#endif // RC_GFX_INCLUDED diff --git a/rcbasic_runtime/rc_gfx3D.h b/rcbasic_runtime/rc_gfx3D.h new file mode 100644 index 0000000..4b4d65e --- /dev/null +++ b/rcbasic_runtime/rc_gfx3D.h @@ -0,0 +1,6728 @@ +#ifndef RC_GFX3D_H_INCLUDED +#define RC_GFX3D_H_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "camera.h" +#include "rc_gfx_core.h" +#include "rc_matrix.h" +#include "RealisticWater.h" + +#include +#include + +//load a mesh from a file +int rc_loadMesh(std::string mesh_file) +{ + int mesh_id = -1; + + rc_mesh_obj mesh_obj; + mesh_obj.mesh_type = RC_MESH_TYPE_ANIMATED; + + irr::scene::IAnimatedMesh* mesh = SceneManager->getMesh(mesh_file.c_str()); + mesh_obj.mesh = mesh; + + if(!mesh) + return -1; + + for(int i = 0; i < rc_mesh.size(); i++) + { + if(!rc_mesh[i].mesh) + { + mesh_id = i; + break; + } + } + + if(mesh_id < 0) + { + mesh_id = rc_mesh.size(); + rc_mesh.push_back(mesh_obj); + } + else + { + rc_mesh[mesh_id] = mesh_obj; + } + + return mesh_id; +} + +//load a mesh from an archive +int rc_loadMeshFromArchive(std::string archive, std::string mesh_file) +{ + int mesh_id = -1; + + device->getFileSystem()->addFileArchive(archive.c_str()); + irr::scene::IAnimatedMesh *mesh = SceneManager->getMesh(mesh_file.c_str()); + device->getFileSystem()->removeFileArchive((irr::u32) 0); + + rc_mesh_obj mesh_obj; + mesh_obj.mesh_type = RC_MESH_TYPE_ANIMATED; + mesh_obj.mesh = mesh; + + if(!mesh) + return -1; + + for(int i = 0; i < rc_mesh.size(); i++) + { + if(!rc_mesh[i].mesh) + { + mesh_id = i; + break; + } + } + + if(mesh_id < 0) + { + mesh_id = rc_mesh.size(); + rc_mesh.push_back(mesh_obj); + } + else + { + rc_mesh[mesh_id] = mesh_obj; + } + + return mesh_id; +} + +//delete mesh +void rc_deleteMesh(int mesh_id) +{ + if(mesh_id < 0 || mesh_id >= rc_mesh.size()) + return; + + if(rc_mesh[mesh_id].mesh) + rc_mesh[mesh_id].mesh->drop(); + + rc_mesh[mesh_id].mesh = NULL; + rc_mesh[mesh_id].mesh_type = 0; + +} + +//create mesh from geometry data [TODO] +int rc_createMesh() +{ + irr::scene::ISkinnedMesh * mesh = SceneManager->createSkinnedMesh(); + + if(!mesh) + return -1; + + int mesh_id = rc_mesh.size(); + rc_mesh_obj mesh_obj; + mesh_obj.mesh = mesh; + mesh_obj.mesh_type = RC_MESH_TYPE_ANIMATED; + + rc_mesh.push_back(mesh_obj); + + return mesh_id; +} + + +//create mesh from geometry data [TODO] +bool rc_addMeshBuffer(int mesh_id, int vertex_count, double* vertex_data, double* normal_data, double* uv_data, int index_count, double* index_data) +{ + irr::scene::ISkinnedMesh * mesh = (irr::scene::ISkinnedMesh*) rc_mesh[mesh_id].mesh; + + irr::scene::SSkinMeshBuffer* mbuf = mesh->addMeshBuffer(); + + if(!mbuf) + { + mesh->drop(); + return false; + } + + irr::core::array vertices; + irr::core::array indices; + + for(int i = 0; i < vertex_count; i++) + { + irr::video::S3DVertex v; + v.Pos = irr::core::vector3df( (irr::f32) vertex_data[i*3], (irr::f32) vertex_data[i*3+1], (irr::f32) vertex_data[i*3+2] ); + v.Normal = irr::core::vector3df( (irr::f32) normal_data[i*3], (irr::f32) normal_data[i*3+1], (irr::f32) normal_data[i*3+2] ); + v.TCoords = irr::core::vector2df( (irr::f32) uv_data[i*2], (irr::f32) uv_data[i*2+1] ); + vertices.push_back(v); + } + + for(int i = 0; i < index_count; i++) + { + indices.push_back( (irr::u16) index_data[i] ); + } + + if(indices.size() > 0) + { + for(int i = 0; i < vertices.size(); i++) + mbuf->Vertices_Standard.push_back(vertices[i]); + + for(int i = 0; i < indices.size(); i++) + mbuf->Indices.push_back(indices[i]); + + } + + return true; +} + + + +//Set Gravity +void rc_setGravity3D(double x, double y, double z) +{ + rc_physics3D.world->setGravity(irr::core::vector3d(x, y, z)); +} + +void rc_getGravity3D(double* x, double* y, double* z) +{ + btVector3 v = rc_physics3D.world->getPointer()->getGravity(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); +} + +void setSolidProperties(int actor) +{ + if(!rc_actor[actor].physics.isSolid) + { + rc_actor[actor].physics.gravity = rc_actor[actor].physics.rigid_body->getGravity(); + rc_actor[actor].physics.rigid_body->setGravity(irr::core::vector3df(0,0,0)); + rc_actor[actor].physics.rigid_body->setCollisionFlags( ECollisionFlag::ECF_NO_CONTACT_RESPONSE ); + } + else + { + //rc_actor[actor].physics.rigid_body->setGravity(rc_actor[actor].physics.gravity); + } +} + +void rc_setActorCollisionShape(int actor_id, int shape_type, double mass) +{ + if(rc_actor[actor_id].physics.rigid_body) + { + rc_physics3D.world->removeCollisionObject(rc_actor[actor_id].physics.rigid_body, false); + delete rc_actor[actor_id].physics.rigid_body; + } + + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.mass = mass; + + if(!rc_actor[actor_id].physics.isSolid) + mass = 1; + + switch(shape_type) + { + case RC_NODE_SHAPE_TYPE_NONE: + break; + + case RC_NODE_SHAPE_TYPE_BOX: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + IBoxShape* shape = new IBoxShape(rc_actor[actor_id].mesh_node, mass, false); + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_SPHERE: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_SPHERE; + ISphereShape* shape = new ISphereShape(rc_actor[actor_id].mesh_node, mass, false); + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_CYLINDER: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_CYLINDER; + ICylinderShape* shape = new ICylinderShape(rc_actor[actor_id].mesh_node, mass, false); + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_CAPSULE: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_CAPSULE; + ICapsuleShape* shape; + + if(rc_actor[actor_id].node_type == RC_NODE_TYPE_MESH) + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor_id].mesh_node; + shape = new ICapsuleShape(node, mass, false); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_OTMESH) + { + irr::scene::IOctreeSceneNode* node = (irr::scene::IOctreeSceneNode*)rc_actor[actor_id].mesh_node; + shape = new ICapsuleShape(node, mass, false); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_TERRAIN) + { + irr::scene::ITerrainSceneNode* node = (irr::scene::ITerrainSceneNode*)rc_actor[actor_id].mesh_node; + shape = new ICapsuleShape(node, mass, false); + } + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_CONE: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_CONE; + IConeShape* shape = new IConeShape(rc_actor[actor_id].mesh_node, mass, false); + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_TRIMESH: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_TRIMESH; + IBvhTriangleMeshShape* shape; + + if(rc_actor[actor_id].node_type == RC_NODE_TYPE_MESH) + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IBvhTriangleMeshShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_OTMESH) + { + irr::scene::IOctreeSceneNode* node = (irr::scene::IOctreeSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IBvhTriangleMeshShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_TERRAIN) + { + irr::scene::ITerrainSceneNode* node = (irr::scene::ITerrainSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IBvhTriangleMeshShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + //else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_WATER) + //shape = new IBvhTriangleMeshShape(rc_actor[actor_id].mesh_node, (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor_id].mesh_node->getMesh(), mass); + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + case RC_NODE_SHAPE_TYPE_CONVEXHULL: + { + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_CONVEXHULL; + IConvexHullShape* shape; + + if(rc_actor[actor_id].node_type == RC_NODE_TYPE_MESH) + { + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IConvexHullShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_OTMESH) + { + irr::scene::IOctreeSceneNode* node = (irr::scene::IOctreeSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IConvexHullShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + else if(rc_actor[actor_id].node_type == RC_NODE_TYPE_TERRAIN) + { + irr::scene::ITerrainSceneNode* node = (irr::scene::ITerrainSceneNode*)rc_actor[actor_id].mesh_node; + shape = new IConvexHullShape(rc_actor[actor_id].mesh_node, node->getMesh(), mass); + } + + rc_actor[actor_id].physics.rigid_body = rc_physics3D.world->addRigidBody(shape); + + setSolidProperties(actor_id); + } + break; + + default: + std::cout << "SetActorCollisionShape Error: Invalid shape_type parameter" << std::endl; + } + + if(rc_actor[actor_id].physics.rigid_body) + { + rc_actor[actor_id].physics.rigid_body->getIdentification()->setId(actor_id); + rc_actor[actor_id].physics.rigid_body->getPointer()->setActivationState(ACTIVE_TAG); + rc_actor[actor_id].physics.rigid_body->getPointer()->setActivationState(DISABLE_DEACTIVATION); + } +} + +int rc_getActorCollisionShape(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(!rc_actor[actor].mesh_node) + return 0; + + return rc_actor[actor].physics.shape_type; +} + + +void rc_setActorSolid(int actor_id, bool flag) +{ + if(actor_id < 0 || actor_id >= rc_actor.size()) + return; + + if(!rc_actor[actor_id].mesh_node) + return; + + if(flag != rc_actor[actor_id].physics.isSolid) + { + rc_actor[actor_id].physics.isSolid = flag; + rc_setActorCollisionShape(actor_id, rc_actor[actor_id].physics.shape_type, rc_actor[actor_id].physics.mass); + } +} + +bool rc_actorIsSolid(int actor_id) +{ + if(actor_id < 0 || actor_id >= rc_actor.size()) + return false; + + if(!rc_actor[actor_id].mesh_node) + return false; + + return rc_actor[actor_id].physics.isSolid; +} + + +bool rc_getActorCollision(int actor1, int actor2) +{ + for(int i = 0; i < rc_actor[actor1].physics.collisions.size(); i++) + { + int c_index = rc_actor[actor1].physics.collisions[i]; + + int actorA = rc_collisions[c_index].actorA; + int actorB = rc_collisions[c_index].actorB; + + if(actor2 == actorA || actor2 == actorB) + { + //std::cout << "Actor in Collide = " << (actor1 == actorA ? "A" : "B") << std::endl; + return true; + } + } + + return false; +} + + +//add mesh actor to scene +int rc_createMeshActor(int mesh_id) +{ + if(mesh_id < 0 || mesh_id >= rc_mesh.size()) + return -1; + + irr::scene::IAnimatedMesh* mesh = rc_mesh[mesh_id].mesh; + + if(!mesh) + return -1; + + int actor_id = -1; + irr::scene::IAnimatedMeshSceneNode* node = SceneManager->addAnimatedMeshSceneNode(mesh); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_MESH; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + return actor_id; +} + + +//add mesh actor to scene +int rc_createMeshOctreeActor(int mesh_id) +{ + if(mesh_id < 0 || mesh_id >= rc_mesh.size()) + return -1; + + irr::scene::IAnimatedMesh* mesh = rc_mesh[mesh_id].mesh; + + if(!mesh) + return -1; + + int actor_id = -1; + //irr::scene::IAnimatedMeshSceneNode* node = SceneManager->addAnimatedMeshSceneNode(mesh); + irr::scene::IOctreeSceneNode *node = SceneManager->addOctreeSceneNode(mesh); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_OTMESH; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + + return actor_id; +} + +//add mesh actor to scene +int rc_createTerrainActor( std::string height_map ) +{ + + int actor_id = -1; + irr::scene::ITerrainSceneNode *node = SceneManager->addTerrainSceneNode(height_map.c_str()); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_TERRAIN; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0); + + + return actor_id; +} + +int rc_createParticleActor( int particle_type ) +{ + int actor_id = -1; + irr::scene::IParticleSystemSceneNode *node = SceneManager->addParticleSystemSceneNode( false ); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_PARTICLE; + actor.particle_properties.particle_type = particle_type; + actor.particle_properties.mesh_id = -1; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 0); + + + return actor_id; +} + +//add mesh actor to scene +int rc_createCubeActor(double cube_size) +{ + int actor_id = -1; + irr::scene::IMeshSceneNode* node = SceneManager->addCubeSceneNode(cube_size); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_MESH; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + return actor_id; +} + +//add mesh actor to scene +int rc_createSphereActor(double radius) +{ + int actor_id = -1; + irr::scene::IMeshSceneNode* node = SceneManager->addSphereSceneNode(radius); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_MESH; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_SPHERE; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_SPHERE, 1); + + return actor_id; +} + +//add mesh actor to scene +int rc_createWaterPlaneActor(double w, double h) +{ + int actor_id = -1; + RealisticWaterSceneNode* node = new RealisticWaterSceneNode(SceneManager, w, h); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_WATER; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + return actor_id; +} + +int rc_createBillboardActor() +{ + int actor_id = -1; + irr::scene::IBillboardSceneNode* node = SceneManager->addBillboardSceneNode(); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_BILLBOARD; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + return actor_id; +} + +int rc_createLightActor() +{ + int actor_id = -1; + irr::scene::ILightSceneNode* node = SceneManager->addLightSceneNode(); + rc_scene_node actor; + actor.node_type = RC_NODE_TYPE_LIGHT; + actor.mesh_node = node; + actor.shadow = NULL; + actor.transition = false; + actor.transition_time = 0; + actor.material_ref_index = -1; + + if(!node) + return -1; + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].mesh_node) + { + actor_id = i; + break; + } + } + + if(actor_id < 0) + { + actor_id = rc_actor.size(); + rc_actor.push_back(actor); + } + else + { + rc_actor[actor_id] = actor; + } + + //Actor RigidBody + rc_actor[actor_id].physics.shape_type = RC_NODE_SHAPE_TYPE_BOX; + rc_actor[actor_id].physics.rigid_body = NULL; + rc_actor[actor_id].physics.isSolid = false; + + rc_setActorCollisionShape(actor_id, RC_NODE_SHAPE_TYPE_BOX, 1); + + return actor_id; +} + +//delete actor +void rc_deleteActor(int actor_id) +{ + if(actor_id < 0 || actor_id >= rc_actor.size()) + return; + + if(!rc_actor[actor_id].mesh_node) + return; + + rc_physics3D.world->removeCollisionObject(rc_actor[actor_id].physics.rigid_body, false); + rc_actor[actor_id].physics.collisions.clear(); + + rc_actor[actor_id].mesh_node->remove(); + rc_actor[actor_id].mesh_node = NULL; + rc_actor[actor_id].shadow = NULL; + rc_actor[actor_id].node_type = 0; + rc_actor[actor_id].transition = false; + rc_actor[actor_id].transition_time = 0; + rc_actor[actor_id].material_ref_index = -1; +} + +void rc_setWaterWindForce(int actor, double f) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + water->setWindForce(f); + } +} + +double rc_getWaterWindForce(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + return water->getWindForce(); + } + + return 0; +} + +void rc_setWaterWaveHeight(int actor, double h) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + water->setWaveHeight(h); + } +} + +double rc_getWaterWaveHeight(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + return water->getWaveHeight(); + } + + return 0; +} + +void rc_setWaterWindDirection(int actor, double x, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + water->setWindDirection( irr::core::vector2df(x, z)); + } +} + +void rc_getWaterWindDirection(int actor, double* x, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *z = 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + irr::core::vector2df v = water->getWindDirection(); + *x = v.X; + *z = v.Y; + } +} + +void rc_setWaterColor(int actor, Uint32 c) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + irr::video::SColor color; + color.set(c); + SColorf cf(color); + water->setWaterColor( cf ); + } +} + +irr::u32 rc_getWaterColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + irr::video::SColorf color = water->getWaterColor(); + return color.toSColor().color; + } + + return 0; +} + + +void rc_setWaterColorBlendFactor(int actor, double cbfactor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + water->setColorBlendFactor(cbfactor); + } +} + +double rc_getWaterColorBlendFactor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_WATER: + RealisticWaterSceneNode* water = (RealisticWaterSceneNode*)rc_actor[actor].mesh_node; + return water->getColorBlendFactor(); + } + + return 0; +} + + +//set actor texture +void rc_setActorTexture(int actor, int layer, int image_id) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(!rc_actor[actor].mesh_node) + return; + + if(image_id < 0 || image_id >= rc_image.size()) + return; + + if(rc_image[image_id].image) + { + rc_actor[actor].mesh_node->setMaterialTexture(layer, rc_image[image_id].image); + } +} + +//get Material count +Uint32 rc_getActorMaterialCount(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(!rc_actor[actor].mesh_node) + return 0; + + return rc_actor[actor].mesh_node->getMaterialCount(); +} + +//set Actor Material Flag +void rc_setActorMaterialFlag(int actor, int flag, bool flag_value) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(!rc_actor[actor].mesh_node) + return; + + rc_actor[actor].mesh_node->setMaterialFlag((irr::video::E_MATERIAL_FLAG)flag, flag_value); +} + +//set Actor Material Flag +bool rc_getActorMaterialFlag(int actor, int material, int flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(!rc_actor[actor].mesh_node) + return false; + + return rc_actor[actor].mesh_node->getMaterial(material).getFlag((irr::video::E_MATERIAL_FLAG)flag); +} + +//Set Actor Material Type +void rc_setActorMaterialType(int actor, int material_type) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(!rc_actor[actor].mesh_node) + return; + + irr::video::E_MATERIAL_TYPE n = (irr::video::E_MATERIAL_TYPE) material_type; + rc_actor[actor].mesh_node->setMaterialType(n); +} + +//Set Actor Material Type +int rc_getActorMaterialType(int actor, int material) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(!rc_actor[actor].mesh_node) + return 0; + + return (int)rc_actor[actor].mesh_node->getMaterial(material).MaterialType; +} + +struct rc_material_obj +{ + irr::video::SMaterial mat; + bool isUsed = false; + bool isReference = false; + int refActor = -1; + int refMatNum = 0; +}; + +irr::core::array rc_material; + +int rc_createMaterial() +{ + int material_id = -1; + + for(int i = 0; i < rc_material.size(); i++) + { + if(!rc_material[i].isUsed) + { + material_id = i; + break; + } + } + + if(material_id < 0) + { + material_id = rc_material.size(); + rc_material_obj mat; + mat.isUsed = true; + mat.isReference = false; + rc_material.push_back(mat); + } + + return material_id; +} + +void rc_deleteMaterial(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + rc_material[material_id].isUsed = false; + rc_material[material_id].mat = irr::video::SMaterial(); +} + +//Set Actor Material Type +void rc_setActorMaterial(int actor, int material_num, int material_id) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(!rc_actor[actor].mesh_node) + return; + + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isUsed) + { + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[actor].mesh_node->getMaterial(material_num) = rc_actor[ refActor ].mesh_node->getMaterial( refMatNum ); + } + else + rc_actor[actor].mesh_node->getMaterial(material_num) = rc_material[material_id].mat; + } +} + +//Set Actor Material Type +int rc_copyActorMaterial(int actor, int material_num) +{ + if(actor < 0 || actor >= rc_actor.size()) + return -1; + + if(!rc_actor[actor].mesh_node) + return -1; + + int material_id = -1; + + for(int i = 0; i < rc_material.size(); i++) + { + if(!rc_material[i].isUsed) + { + rc_material[i].isUsed = true; + material_id = i; + break; + } + } + + if(material_id < 0) + { + material_id = rc_material.size(); + rc_material_obj nmat; + nmat.isUsed = true; + nmat.mat = rc_actor[actor].mesh_node->getMaterial(material_num); + rc_material.push_back(nmat); + } + else + rc_material[material_id].mat = rc_actor[actor].mesh_node->getMaterial(material_num); + + return material_id; +} + +int rc_copyMaterial(int src_material_id) +{ + int material_id = -1; + + for(int i = 0; i < rc_material.size(); i++) + { + if(!rc_material[i].isUsed) + { + rc_material[i].isUsed = true; + material_id = i; + break; + } + } + + rc_material_obj nmat; + nmat.isUsed = true; + nmat.mat = rc_material[src_material_id].mat; + nmat.isReference = false; + nmat.refActor = -1; + nmat.refMatNum = 0; + + if(material_id < 0) + { + material_id = rc_material.size(); + rc_material.push_back(nmat); + } + else + rc_material[material_id] = nmat; + + return material_id; +} + +int rc_getActorMaterial(int actor, int material_num) +{ + if(actor < 0 || actor >= rc_actor.size()) + return -1; + + if(!rc_actor[actor].mesh_node) + return -1; + + if(rc_actor[actor].material_ref_index >= 0) + return rc_actor[actor].material_ref_index; + + int material_id = -1; + + for(int i = 0; i < rc_material.size(); i++) + { + if(!rc_material[i].isUsed) + { + rc_material[i].isUsed = true; + material_id = i; + break; + } + } + + if(material_id < 0) + { + material_id = rc_material.size(); + rc_material_obj nmat; + nmat.isUsed = true; + nmat.isReference = true; + nmat.refActor = actor; + nmat.refMatNum = material_num; + rc_material.push_back(nmat); + } + else + { + rc_material_obj nmat; + nmat.isUsed = true; + nmat.isReference = true; + nmat.refActor = actor; + nmat.refMatNum = material_num; + rc_material[material_id] = nmat; + } + + return material_id; +} + +void rc_setMaterialAmbientColor(int material_id, Uint32 color) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).AmbientColor = irr::video::SColor(color); + } + else + rc_material[material_id].mat.AmbientColor = irr::video::SColor(color); +} + +void rc_setMaterialTextureCanvas(int material_id, int level, int canvas_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(canvas_id < 0 || canvas_id >= rc_canvas.size()) + return; + + if(!rc_canvas[canvas_id].texture) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).setTexture(level, rc_canvas[canvas_id].texture); + } + else + rc_material[material_id].mat.setTexture(level, rc_canvas[canvas_id].texture); +} + +Uint32 rc_getMaterialAmbientColor(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).AmbientColor.color; + } + else + return rc_material[material_id].mat.AmbientColor.color; +} + +void rc_setMaterialAntiAliasing(int material_id, int aa) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).AntiAliasing = aa; + } + else + rc_material[material_id].mat.AntiAliasing = aa; +} + +int rc_getMaterialAntiAliasing(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).AntiAliasing; + } + else + return rc_material[material_id].mat.AntiAliasing; +} + +void rc_setMaterialBackfaceCulling(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).BackfaceCulling = flag; + } + else + rc_material[material_id].mat.BackfaceCulling = flag; +} + +bool rc_getMaterialBackfaceCulling(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).BackfaceCulling; + } + else + return rc_material[material_id].mat.BackfaceCulling; +} + +void rc_setMaterialBlendFactor(int material_id, double bf) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).BlendFactor = bf; + } + else + rc_material[material_id].mat.BlendFactor = bf; +} + +double rc_getMaterialBlendFactor(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).BlendFactor; + } + else + return rc_material[material_id].mat.BlendFactor; +} + +void rc_setMaterialBlendMode(int material_id, int blend_mode) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).BlendOperation = (irr::video::E_BLEND_OPERATION)blend_mode; + } + else + rc_material[material_id].mat.BlendOperation = (irr::video::E_BLEND_OPERATION)blend_mode; +} + +int rc_getMaterialBlendMode(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return (int)rc_actor[refActor].mesh_node->getMaterial(refMatNum).BlendOperation; + } + else + return (int)rc_material[material_id].mat.BlendOperation; +} + +void rc_setMaterialColorMask(int material_id, int color_mask) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).ColorMask = color_mask; + } + else + rc_material[material_id].mat.ColorMask = color_mask; +} + +int rc_getMaterialColorMask(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).ColorMask; + } + else + return rc_material[material_id].mat.ColorMask; +} + +void rc_setMaterialColorMode(int material_id, int color_mode) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).ColorMaterial = (irr::video::E_COLOR_MATERIAL)color_mode; + } + else + rc_material[material_id].mat.ColorMaterial = (irr::video::E_COLOR_MATERIAL)color_mode; +} + +int rc_getMaterialColorMode(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return (int)rc_actor[refActor].mesh_node->getMaterial(refMatNum).ColorMaterial; + } + else + return (int)rc_material[material_id].mat.ColorMaterial; +} + +void rc_setMaterialDiffuseColor(int material_id, Uint32 color) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).DiffuseColor.set(color); + } + else + rc_material[material_id].mat.DiffuseColor = irr::video::SColor(color); +} + +Uint32 rc_getMaterialDiffuseColor(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).DiffuseColor.color; + } + else + return rc_material[material_id].mat.DiffuseColor.color; +} + +void rc_setMaterialEmissiveColor(int material_id, Uint32 color) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).EmissiveColor.set(color); + } + else + rc_material[material_id].mat.EmissiveColor = irr::video::SColor(color); +} + +Uint32 rc_getMaterialEmissiveColor(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).EmissiveColor.color; + } + else + return rc_material[material_id].mat.EmissiveColor.color; +} + +void rc_setMaterialFog(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).FogEnable = flag; + } + else + rc_material[material_id].mat.FogEnable = flag; +} + +bool rc_getMaterialFog(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).FogEnable; + } + else + return rc_material[material_id].mat.FogEnable; +} + +void rc_setMaterialFrontfaceCulling(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).FrontfaceCulling = flag; + } + else + rc_material[material_id].mat.FrontfaceCulling = flag; +} + +bool rc_getMaterialFrontfaceCulling(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).FrontfaceCulling; + } + else + return rc_material[material_id].mat.FrontfaceCulling; +} + +void rc_setMaterialGouraudShading(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).GouraudShading = flag; + } + else + rc_material[material_id].mat.GouraudShading = flag; +} + +bool rc_materialIsGouraudShaded(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).GouraudShading; + } + else + return rc_material[material_id].mat.GouraudShading; +} + +bool rc_materialIsAplhaBlend(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).isAlphaBlendOperation(); + } + else + return rc_material[material_id].mat.isAlphaBlendOperation(); +} + +bool rc_materialIsTransparent(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).isTransparent(); + } + else + return rc_material[material_id].mat.isTransparent(); +} + +void rc_setMaterialLighting(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).Lighting = flag; + } + else + rc_material[material_id].mat.Lighting = flag; +} + +bool rc_materialIsLit(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).Lighting; + } + else + return rc_material[material_id].mat.Lighting; +} + +void rc_setMaterialType(int material_id, int mat_type) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).MaterialType = (irr::video::E_MATERIAL_TYPE)mat_type; + } + else + rc_material[material_id].mat.MaterialType = (irr::video::E_MATERIAL_TYPE)mat_type; +} + +int rc_getMaterialType(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return (int)rc_actor[refActor].mesh_node->getMaterial(refMatNum).MaterialType; + } + else + return (int)rc_material[material_id].mat.MaterialType; +} + +void rc_setMaterialNormalize(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).NormalizeNormals = flag; + } + else + rc_material[material_id].mat.NormalizeNormals = flag; +} + +bool rc_materialIsNormalized(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).NormalizeNormals; + } + else + return rc_material[material_id].mat.NormalizeNormals; +} + +void rc_setMaterialPointCloud(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).PointCloud = flag; + } + else + rc_material[material_id].mat.PointCloud = flag; +} + +bool rc_materialIsPointCloud(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).PointCloud; + } + else + return rc_material[material_id].mat.PointCloud; +} + +void rc_setMaterialFlag(int material_id, int material_flag, bool f_value) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).setFlag((irr::video::E_MATERIAL_FLAG)material_flag, f_value); + } + else + rc_material[material_id].mat.setFlag((irr::video::E_MATERIAL_FLAG)material_flag, f_value); +} + +bool rc_getMaterialFlag(int material_id, int material_flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).getFlag((irr::video::E_MATERIAL_FLAG) material_flag); + } + else + return rc_material[material_id].mat.getFlag((irr::video::E_MATERIAL_FLAG) material_flag); +} + +void rc_setMaterialTexture(int material_id, int level, int img_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(level < 0 || level >= irr::video::MATERIAL_MAX_TEXTURES) + return; + + if(img_id < 0 || img_id >= rc_image.size()) + return; + + if(!rc_image[img_id].image) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).setTexture(level, rc_image[img_id].image); + } + else + rc_material[material_id].mat.setTexture(level, rc_image[img_id].image); +} + +void rc_setMaterialShininess(int material_id, double shininess) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).Shininess = shininess; + } + else + rc_material[material_id].mat.Shininess = shininess; +} + +double rc_getMaterialShininess(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).Shininess; + } + else + return rc_material[material_id].mat.Shininess; +} + +void rc_setMaterialSpecularColor(int material_id, Uint32 color) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).SpecularColor.set(color); + } + else + rc_material[material_id].mat.SpecularColor = irr::video::SColor(color); +} + +Uint32 rc_getMaterialSpecularColor(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).SpecularColor.color; + } + else + return rc_material[material_id].mat.SpecularColor.color; +} + +void rc_setMaterialThickness(int material_id, double thickness) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).Thickness = thickness; + } + else + rc_material[material_id].mat.Thickness = thickness; +} + +double rc_getMaterialThickness(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return 0; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).Thickness; + } + else + return rc_material[material_id].mat.Thickness; +} + +void rc_setMaterialWireframe(int material_id, bool flag) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + rc_actor[refActor].mesh_node->getMaterial(refMatNum).Wireframe = flag; + } + else + rc_material[material_id].mat.Wireframe = flag; +} + +bool rc_materialIsWireframe(int material_id) +{ + if(material_id < 0 || material_id >= rc_material.size()) + return false; + + if(rc_material[material_id].isReference) + { + int refActor = rc_material[material_id].refActor; + int refMatNum = rc_material[material_id].refMatNum; + return rc_actor[refActor].mesh_node->getMaterial(refMatNum).Wireframe; + } + else + return rc_material[material_id].mat.Wireframe; +} + + + + +//get Actor Texture +int rc_getActorTexture(int actor, int material, int layer) +{ + if(actor < 0 || actor >= rc_actor.size()) + return -1; + + if(!rc_actor[actor].mesh_node) + return -1; + + rc_image_obj img; + img.image = rc_actor[actor].mesh_node->getMaterial(material).getTexture(layer); + + if(img.image == NULL) + return -1; + + int img_id = -1; + + for(int i = 0; i < rc_image.size(); i++) + { + if(rc_image[i].image == NULL) + { + img_id = i; + break; + } + } + + if(img_id < 0) + { + img_id = rc_image.size(); + rc_image.push_back(img); + } + else + { + rc_image[img_id] = img; + } + + return img_id; +} + + +//set actor position +void rc_setActorPosition(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + rc_physics3D.world->removeCollisionObject(rc_actor[actor].physics.rigid_body, false); + actor_transform.setTranslation( irr::core::vector3df(x, y, z) ); + rc_actor[actor].physics.rigid_body->clearForces(); + //rc_actor[actor].physics.rigid_body-> + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + + rc_actor[actor].physics.rigid_body->setMassProps(rc_actor[actor].physics.mass, irr::core::vector3df(0,0,0)); + rc_physics3D.world->addRigidBody(rc_actor[actor].physics.rigid_body); + + rc_actor[actor].mesh_node->setPosition(actor_transform.getTranslation()); + + } +} + +//translate actor from local orientation +void rc_translateActor(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + irr::core::matrix4 m; + m.setRotationDegrees(actor_transform.getRotationDegrees()); + irr::core::vector3df v(x, y, z); + m.transformVect(v); + + actor_transform.setTranslation( actor_transform.getTranslation() + v ); + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setPosition(actor_transform.getTranslation()); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } +} + +//translate actor from world orientation +void rc_translateActorWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + actor_transform.setTranslation( actor_transform.getTranslation() + irr::core::vector3df(x, y, z) ); + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setPosition(actor_transform.getTranslation()); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } +} + +//get actor position +void rc_getActorPosition(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + *x = actor_transform.getTranslation().X; + *y = actor_transform.getTranslation().Y; + *z = actor_transform.getTranslation().Z; + } +} + +//set actor scale +void rc_setActorScale(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + actor_transform.setScale( irr::core::vector3df(x, y, z) ); + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setScale(actor_transform.getScale()); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } + +} + +//scale actor +void rc_scaleActor(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + actor_transform.setScale( actor_transform.getScale() * irr::core::vector3df(x, y, z) ); + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setScale(actor_transform.getScale()); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } +} + +//get actor scale +void rc_getActorScale(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + *x = actor_transform.getScale().X; + *y = actor_transform.getScale().Y; + *z = actor_transform.getScale().Z; + } +} + + +//set actor rotation +void rc_setActorRotation(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + actor_transform.setRotationDegrees( irr::core::vector3df(x, y, z) ); + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setRotation( actor_transform.getRotationDegrees() ); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } +} + +//rotate actor +void rc_rotateActor(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + + irr::core::matrix4 n; + irr::core::vector3df rot(x, y, z); + n.setRotationDegrees(rot); + actor_transform *= n; + + rc_actor[actor].physics.rigid_body->clearForces(); + rc_actor[actor].physics.rigid_body->setWorldTransform(actor_transform); + rc_actor[actor].mesh_node->setRotation( actor_transform.getRotationDegrees() ); + rc_actor[actor].mesh_node->updateAbsolutePosition(); + } +} + +//get actor position +void rc_getActorRotation(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + //std::cout << "Set POS" << std::endl; + irr::core::matrix4 actor_transform = rc_actor[actor].physics.rigid_body->getWorldTransform(); + *x = actor_transform.getRotationDegrees().X; + *y = actor_transform.getRotationDegrees().Y; + *z = actor_transform.getRotationDegrees().Z; + } +} + +void rc_setActorGravity(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setGravity(irr::core::vector3df(x, y, z)); + } +} + +void rc_getActorGravity(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df gvec = rc_actor[actor].physics.rigid_body->getGravity(); + *x = gvec.X; + *y = gvec.Y; + *z = gvec.Z; + } +} + +void rc_setActorDamping(int actor, double lin_damping, double ang_damping) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setDamping(lin_damping, ang_damping); + } +} + +double rc_getActorLinearDamping(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->getLinearDamping(); + } + return 0; +} + +double rc_getActorAngularDamping(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->getAngularDamping(); + } + return 0; +} + +double rc_getActorLinearSleepThreshold(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->getLinearSleepingThreshold(); + } + return 0; +} + +double rc_getActorAngularSleepThreshold(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->getAngularSleepingThreshold(); + } + return 0; +} + +void rc_applyActorDamping(int actor, double timeStep) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyDamping(timeStep); + } +} + +void rc_setActorMassProperties(int actor, double mass, double inertia_x, double inertia_y, double inertia_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_physics3D.world->removeCollisionObject(rc_actor[actor].physics.rigid_body, false); + rc_actor[actor].physics.rigid_body->setMassProps(mass, irr::core::vector3df(inertia_x, inertia_y, inertia_z)); + rc_physics3D.world->addRigidBody(rc_actor[actor].physics.rigid_body); + } + rc_actor[actor].physics.mass = mass; +} + +void rc_getActorLinearFactor(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df lf = rc_actor[actor].physics.rigid_body->getLinearFactor(); + *x = lf.X; + *y = lf.Y; + *z = lf.Z; + } +} + +void rc_setActorLinearFactor(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setLinearFactor(irr::core::vector3df(x, y, z)); + } +} + +double rc_getActorInverseMass(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->getInvMass(); + } + return 0; +} + +void rc_integrateActorVelocities(int actor, double step) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->integrateVelocities(step); + } +} + +void rc_applyActorCentralForceLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyCentralForce(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorCentralForceWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyCentralForce(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_getActorTotalForce(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df f = rc_actor[actor].physics.rigid_body->getTotalForce(); + *x = f.X; + *y = f.Y; + *z = f.Z; + } +} + +void rc_getActorTotalTorque(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df f = rc_actor[actor].physics.rigid_body->getTotalTorque(); + *x = f.X; + *y = f.Y; + *z = f.Z; + } +} + +void rc_getActorInverseInertiaDiagLocal(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df f = rc_actor[actor].physics.rigid_body->getInvInertiaDiagLocal(); + *x = f.X; + *y = f.Y; + *z = f.Z; + } +} + +void rc_setActorInverseInertiaDiagLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setInvInertiaDiagLocal(irr::core::vector3df(x,y,z)); + } +} + +void rc_setActorSleepThresholds(int actor, double linear, double angular) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setSleepingThresholds(linear, angular); + } +} + +void rc_applyActorTorqueLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyTorque(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorTorqueWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyTorque(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_applyActorForceLocal(int actor, double x, double y, double z, double rel_x, double rel_y, double rel_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyForce(irr::core::vector3df(x,y,z), irr::core::vector3df(rel_x, rel_y, rel_z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorForceWorld(int actor, double x, double y, double z, double rel_x, double rel_y, double rel_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyForce(irr::core::vector3df(x,y,z), irr::core::vector3df(rel_x, rel_y, rel_z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_applyActorCentralImpulseLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyCentralImpulse(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorCentralImpulseWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyCentralImpulse(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_applyActorTorqueImpulseLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyTorqueImpulse(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorTorqueImpulseWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyTorqueImpulse(irr::core::vector3df(x,y,z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_applyActorImpulseLocal(int actor, double x, double y, double z, double rel_x, double rel_y, double rel_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyImpulse(irr::core::vector3df(x,y,z), irr::core::vector3df(rel_x, rel_y, rel_z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_applyActorImpulseWorld(int actor, double x, double y, double z, double rel_x, double rel_y, double rel_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->applyImpulse(irr::core::vector3df(x,y,z), irr::core::vector3df(rel_x, rel_y, rel_z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_clearActorForces(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->clearForces(); + } +} + +void rc_updateActorInertiaTensor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->updateInertiaTensor(); + } +} + +void rc_getActorCOMPosition(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df pos = rc_actor[actor].physics.rigid_body->getCenterOfMassPosition(); + *x = pos.X; + *y = pos.Y; + *z = pos.Z; + } +} + +void rc_getActorRotationQ(int actor, double* x, double* y, double* z, double* w) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + *w = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::quaternion q = rc_actor[actor].physics.rigid_body->getOrientation(); + *x = q.X; + *y = q.Y; + *z = q.Z; + *w = q.W; + } +} + +void rc_getActorLinearVelocity(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df pos = rc_actor[actor].physics.rigid_body->getLinearVelocity(); + *x = pos.X; + *y = pos.Y; + *z = pos.Z; + } +} + +void rc_getActorAngularVelocity(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df pos = rc_actor[actor].physics.rigid_body->getAngularVelocity(); + *x = pos.X; + *y = pos.Y; + *z = pos.Z; + } +} + +void rc_setActorLinearVelocityLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setLinearVelocity(irr::core::vector3df(x, y, z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_setActorLinearVelocityWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setLinearVelocity(irr::core::vector3df(x, y, z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_setActorAngularVelocityLocal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setAngularVelocity(irr::core::vector3df(x, y, z), ERBTransformSpace::ERBTS_LOCAL); + } +} + +void rc_setActorAngularVelocityWorld(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setAngularVelocity(irr::core::vector3df(x, y, z), ERBTransformSpace::ERBTS_WORLD); + } +} + +void rc_getActorLocalPointVelocity(int actor, double rel_x, double rel_y, double rel_z, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df pos = rc_actor[actor].physics.rigid_body->getVelocityInLocalPoint(irr::core::vector3df(rel_x, rel_y, rel_z)); + *x = pos.X; + *y = pos.Y; + *z = pos.Z; + } +} + +void rc_getActorLinearVelocityLocal(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + btVector3 v = rc_actor[actor].physics.rigid_body->getPointer()->getWorldTransform().getBasis().transpose() * rc_actor[actor].physics.rigid_body->getPointer()->getLinearVelocity(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +void rc_getActorAngularVelocityLocal(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + btVector3 v = rc_actor[actor].physics.rigid_body->getPointer()->getWorldTransform().getBasis().transpose() * rc_actor[actor].physics.rigid_body->getPointer()->getAngularVelocity(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +void rc_getActorAABB(int actor, double* min_x, double* min_y, double* min_z, double* max_x, double* max_y, double* max_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *min_x = 0; + *min_y = 0; + *min_z = 0; + *max_x = 0; + *max_y = 0; + *max_z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df min_aabb; + irr::core::vector3df max_aabb; + rc_actor[actor].physics.rigid_body->getAabb(min_aabb, max_aabb); + *min_x = min_aabb.X; + *min_y = min_aabb.Y; + *min_z = min_aabb.Z; + *max_x = max_aabb.X; + *max_y = max_aabb.Y; + *max_z = max_aabb.Z; + } +} + +double rc_computeActorImpulseDenominator(int actor, double pos_x, double pos_y, double pos_z, double normal_x, double normal_y, double normal_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->computeImpulseDenominator(irr::core::vector3df(pos_x, pos_y, pos_z), irr::core::vector3df(normal_x, normal_y, normal_z)); + } +} + +double rc_computeActorAngularImpulseDenominator(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].physics.rigid_body) + { + return rc_actor[actor].physics.rigid_body->computeAngularImpulseDenominator(irr::core::vector3df(x, y, z)); + } +} + +void rc_setActorAngularFactor(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].physics.rigid_body) + { + rc_actor[actor].physics.rigid_body->setAngularFactor(irr::core::vector3df(x, y, z)); + } +} + +void rc_getActorAngularFactor(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + irr::core::vector3df af = rc_actor[actor].physics.rigid_body->getAngularFactor(); + *x = af.X; + *y = af.Y; + *z = af.Z; + } +} + +void rc_computeActorGyroImpulseLocal(int actor, double step, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + btVector3 v = rc_actor[actor].physics.rigid_body->getPointer()->computeGyroscopicImpulseImplicit_Body(step); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +void rc_computeActorGyroImpulseWorld(int actor, double dt, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + btVector3 v = rc_actor[actor].physics.rigid_body->getPointer()->computeGyroscopicImpulseImplicit_World(dt); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +void rc_getActorLocalInertia(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_actor[actor].physics.rigid_body) + { + btVector3 v = rc_actor[actor].physics.rigid_body->getPointer()->getLocalInertia(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +int getConstraintId() +{ + int cid = -1; + for(int i = 0; i < rc_physics3D.constraints.size(); i++) + { + if(rc_physics3D.constraints[i].type <= 0) + { + cid = i; + break; + } + } + + if(cid >= 0) + return cid; + + rc_constraint_obj constraint; + cid = rc_physics3D.constraints.size(); + rc_physics3D.constraints.push_back(constraint); + return cid; +} + +int rc_createPointConstraint(int actorA, double pxA, double pyA, double pzA) +{ + if(actorA < 0 || actorA >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body) + { + rc_constraint_obj p2p; + p2p.type = RC_CONSTRAINT_TYPE_POINT; + btVector3 pvtA(pxA, pyA, pzA); + p2p.constraint = new btPoint2PointConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), pvtA); + rc_physics3D.world->getPointer()->addConstraint(p2p.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = p2p; + return constraint_id; + } + + return -1; +} + +int rc_createPointConstraintEx(int actorA, int actorB, double pxA, double pyA, double pzA, double pxB, double pyB, double pzB) +{ + if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body) + { + rc_constraint_obj p2p; + p2p.type = RC_CONSTRAINT_TYPE_POINT; + btVector3 pvtA(pxA, pyA, pzA); + btVector3 pvtB(pxB, pyB, pzB); + p2p.constraint = new btPoint2PointConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), + pvtA, pvtB); + rc_physics3D.world->getPointer()->addConstraint(p2p.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = p2p; + return constraint_id; + } +} + +void rc_setConstraintPivotA(int constraint_id, double x, double y, double z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* c = (btPoint2PointConstraint*)rc_physics3D.constraints[constraint_id].constraint; + c->setPivotA(btVector3(x, y, z)); + } +} + +void rc_setConstraintPivotB(int constraint_id, double x, double y, double z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* c = (btPoint2PointConstraint*)rc_physics3D.constraints[constraint_id].constraint; + c->setPivotB(btVector3(x, y, z)); + } +} + +int rc_createHingeConstraint(int actorA, double pxA, double pyA, double pzA, double axA, double ayA, double azA) +{ + if(actorA < 0 || actorA >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body) + { + rc_constraint_obj hinge; + hinge.type = RC_CONSTRAINT_TYPE_HINGE; + btVector3 pvtA(pxA, pyA, pzA); + btVector3 axis(axA, ayA, azA); + hinge.constraint = new btHingeConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), pvtA, axis); + rc_physics3D.world->getPointer()->addConstraint(hinge.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = hinge; + return constraint_id; + } +} + + +int rc_createHingeConstraintEx(int actorA, int actorB, double pxA, double pyA, double pzA, double pxB, double pyB, double pzB, + double axA, double ayA, double azA, double axB, double ayB, double azB) +{ + if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body) + { + rc_constraint_obj hinge; + hinge.type = RC_CONSTRAINT_TYPE_HINGE; + + btVector3 pvtA(pxA, pyA, pzA); + btVector3 axisA(axA, ayA, azA); + + btVector3 pvtB(pxB, pyB, pzB); + btVector3 axisB(axB, ayB, azB); + + hinge.constraint = new btHingeConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), pvtA, pvtB, axisA, axisB); + rc_physics3D.world->getPointer()->addConstraint(hinge.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = hinge; + return constraint_id; + } +} + +int rc_createSlideConstraint(int actorA, int frameInB_matrix, bool useLinearReferenceFrameA) +{ + if(actorA < 0 || actorA >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body) + { + rc_constraint_obj slide; + slide.type = RC_CONSTRAINT_TYPE_SLIDER; + + irr::core::matrix4 irr_mat = rc_convertToIrrMatrix(frameInB_matrix); + btTransform frameInB; + btTransformFromIrrlichtMatrix(irr_mat, frameInB); + + slide.constraint = new btSliderConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), frameInB, useLinearReferenceFrameA); + rc_physics3D.world->getPointer()->addConstraint(slide.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = slide; + return constraint_id; + } +} + +int rc_createSlideConstraintEx(int actorA, int actorB, int frameInA_matrix, int frameInB_matrix, bool useLinearReferenceFrameA) +{ + if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body) + { + rc_constraint_obj slide; + slide.type = RC_CONSTRAINT_TYPE_SLIDER; + + irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(frameInA_matrix); + irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(frameInB_matrix); + + btTransform frameInA, frameInB; + btTransformFromIrrlichtMatrix(irr_matA, frameInA); + btTransformFromIrrlichtMatrix(irr_matB, frameInB); + + slide.constraint = new btSliderConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), frameInA, frameInB, useLinearReferenceFrameA); + rc_physics3D.world->getPointer()->addConstraint(slide.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = slide; + return constraint_id; + } +} + + +int rc_createConeConstraint(int actorA, int rbAFrame_matrix) +{ + if(actorA < 0 || actorA >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body) + { + rc_constraint_obj cone; + cone.type = RC_CONSTRAINT_TYPE_CONE; + + irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(rbAFrame_matrix); + + btTransform rba; + btTransformFromIrrlichtMatrix(irr_matA, rba); + + cone.constraint = new btConeTwistConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), rba); + rc_physics3D.world->getPointer()->addConstraint(cone.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = cone; + return constraint_id; + } +} + +int rc_createConeConstraintEx(int actorA, int actorB, int rbAFrame_matrix, int rbBFrame_matrix) +{ + if(actorA < 0 || actorA >= rc_actor.size() || actorB < 0 || actorB >= rc_actor.size()) + return -1; + + if(rc_actor[actorA].physics.rigid_body && rc_actor[actorB].physics.rigid_body) + { + rc_constraint_obj cone; + cone.type = RC_CONSTRAINT_TYPE_CONE; + + irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(rbAFrame_matrix); + irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(rbBFrame_matrix); + + btTransform rba, rbb; + btTransformFromIrrlichtMatrix(irr_matA, rba); + btTransformFromIrrlichtMatrix(irr_matB, rbb); + + cone.constraint = new btConeTwistConstraint(*rc_actor[actorA].physics.rigid_body->getPointer(), *rc_actor[actorB].physics.rigid_body->getPointer(), rba, rbb); + rc_physics3D.world->getPointer()->addConstraint(cone.constraint); + int constraint_id = getConstraintId(); + rc_physics3D.constraints[constraint_id] = cone; + return constraint_id; + } +} + +void rc_deleteConstraint(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].constraint) + { + rc_physics3D.world->getPointer()->removeConstraint(rc_physics3D.constraints[constraint_id].constraint); + rc_physics3D.constraints[constraint_id].constraint = NULL; + rc_physics3D.constraints[constraint_id].type = 0; + } +} + + +void rc_getConstraintFrameOffsetA(int constraint_id, double* x, double* y, double* z, double* rx, double* ry, double* rz) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + *rx = 0; + *ry = 0; + *rz = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*)rc_physics3D.constraints[constraint_id].constraint; + //btTransform t = hinge->getFrameOffsetA(); + //t.getBasis().getEulerZYX() + *x = hinge->getFrameOffsetA().getOrigin().getX(); + *y = hinge->getFrameOffsetA().getOrigin().getY(); + *z = hinge->getFrameOffsetA().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + hinge->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*)rc_physics3D.constraints[constraint_id].constraint; + *x = cone->getFrameOffsetA().getOrigin().getX(); + *y = cone->getFrameOffsetA().getOrigin().getY(); + *z = cone->getFrameOffsetA().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + cone->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*)rc_physics3D.constraints[constraint_id].constraint; + *x = slide->getFrameOffsetA().getOrigin().getX(); + *y = slide->getFrameOffsetA().getOrigin().getY(); + *z = slide->getFrameOffsetA().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + slide->getFrameOffsetA().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } +} + +void rc_getConstraintFrameOffsetB(int constraint_id, double* x, double* y, double* z, double* rx, double* ry, double* rz) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + *rx = 0; + *ry = 0; + *rz = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*)rc_physics3D.constraints[constraint_id].constraint; + *x = hinge->getFrameOffsetB().getOrigin().getX(); + *y = hinge->getFrameOffsetB().getOrigin().getY(); btTransform: + *z = hinge->getFrameOffsetB().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + hinge->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*)rc_physics3D.constraints[constraint_id].constraint; + *x = cone->getFrameOffsetB().getOrigin().getX(); + *y = cone->getFrameOffsetB().getOrigin().getY(); + *z = cone->getFrameOffsetB().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + cone->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*)rc_physics3D.constraints[constraint_id].constraint; + *x = slide->getFrameOffsetB().getOrigin().getX(); + *y = slide->getFrameOffsetB().getOrigin().getY(); + *z = slide->getFrameOffsetB().getOrigin().getZ(); + + btScalar yaw, pitch, roll; + slide->getFrameOffsetB().getBasis().getEulerZYX(yaw, pitch, roll); + *rx = roll; + *ry = pitch; + *rz = yaw; + } +} + + +void rc_useConstraintFrameOffset(int constraint_id, bool flag) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setUseFrameOffset(flag); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setUseFrameOffset(flag); + } +} + +//btHingeConstraint::getHingeAngle() +double rc_getHingeAngle(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getHingeAngle(); + } + + return 0; +} + +double rc_getHingeAngleEx(int constraint_id, int t_matrixA, int t_matrixB) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform transformA, transformB; + irr::core::matrix4 irr_matA = rc_convertToIrrMatrix(t_matrixA); + irr::core::matrix4 irr_matB = rc_convertToIrrMatrix(t_matrixB); + btTransformFromIrrlichtMatrix(irr_matA, transformA); + btTransformFromIrrlichtMatrix(irr_matB, transformB); + return hinge->getHingeAngle(transformA, transformB); + } + + return 0; +} + +//btHingeConstraint::getBreakingImpulseThreshold() +double rc_getConstraintBreakingImpulseThreshold(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getBreakingImpulseThreshold(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return p2p->getBreakingImpulseThreshold(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getBreakingImpulseThreshold(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getBreakingImpulseThreshold(); + } + + return 0; +} + +//btHingeConstraint::getAFrame() +int rc_getConstraintAFrame(int constraint_id, int mA) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return -1; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform aframe = hinge->getAFrame(); + irr::core::matrix4 irr_mat; + btTransformToIrrlichtMatrix(aframe, irr_mat); + mA = rc_convertFromIrrMatrix(irr_mat, mA); + return mA; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform aframe = cone->getAFrame(); + irr::core::matrix4 irr_mat; + btTransformToIrrlichtMatrix(aframe, irr_mat); + mA = rc_convertFromIrrMatrix(irr_mat, mA); + return mA; + } + + return -1; +} + +//btHingeConstraint::getBFrame() +int rc_getConstraintBFrame(int constraint_id, int mA) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return -1; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform bframe = hinge->getBFrame(); + irr::core::matrix4 irr_mat; + btTransformToIrrlichtMatrix(bframe, irr_mat); + mA = rc_convertFromIrrMatrix(irr_mat, mA); + return mA; + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform bframe = cone->getBFrame(); + irr::core::matrix4 irr_mat; + btTransformToIrrlichtMatrix(bframe, irr_mat); + mA = rc_convertFromIrrMatrix(irr_mat, mA); + return mA; + } + + return -1; +} + +//btHingeConstraint::setAxis() +void rc_setConstraintAxis(int constraint_id, double x, double y, double z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 axis(x,y,z); + hinge->setAxis(axis); + } +} + +//btHingeConstraint::setBreakingImpulseThreshold() +void rc_setConstraintBreakingImpulseThreshold(int constraint_id, double threshold) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setBreakingImpulseThreshold(threshold); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + p2p->setBreakingImpulseThreshold(threshold); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setBreakingImpulseThreshold(threshold); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setBreakingImpulseThreshold(threshold); + } +} + +//btHingeConstraint::setFrames() +void rc_setConstraintFrames(int constraint_id, int frameA_matrix, int frameB_matrix) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform frameA, frameB; + irr::core::matrix4 irr_matA, irr_matB; + irr_matA = rc_convertToIrrMatrix(frameA_matrix); + irr_matB = rc_convertToIrrMatrix(frameB_matrix); + btTransformFromIrrlichtMatrix(irr_matA, frameA); + btTransformFromIrrlichtMatrix(irr_matB, frameB); + hinge->setFrames(frameA, frameB); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform frameA, frameB; + irr::core::matrix4 irr_matA, irr_matB; + irr_matA = rc_convertToIrrMatrix(frameA_matrix); + irr_matB = rc_convertToIrrMatrix(frameB_matrix); + btTransformFromIrrlichtMatrix(irr_matA, frameA); + btTransformFromIrrlichtMatrix(irr_matB, frameB); + cone->setFrames(frameA, frameB); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btTransform frameA, frameB; + irr::core::matrix4 irr_matA, irr_matB; + irr_matA = rc_convertToIrrMatrix(frameA_matrix); + irr_matB = rc_convertToIrrMatrix(frameB_matrix); + btTransformFromIrrlichtMatrix(irr_matA, frameA); + btTransformFromIrrlichtMatrix(irr_matB, frameB); + slide->setFrames(frameA, frameB); + } +} + +//btHingeConstraint::setLimit(); +void rc_setHingeLimit(int constraint_id, double low, double high, double softness, double bias_factor, double relaxation_factor) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setLimit(low, high, softness, bias_factor, relaxation_factor); + } +} + +void rc_setConeLimit(int constraint_id, double swingSpan1, double swingSpan2, double twistSpan, double softness, double bias_factor, double relaxation_factor) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setLimit(swingSpan1, swingSpan2, twistSpan, softness, bias_factor, relaxation_factor); + } +} + +//btHingeConstraint::getLimitBiasFactor() +double rc_getConstraintLimitBiasFactor(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getLimitBiasFactor(); + } + + return 0; +} + +//btHingeConstraint::getLimitRelaxationFactor() +double rc_getLimitRelaxationFactor(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getLimitRelaxationFactor(); + } + + return 0; +} + +//btHingeConstraint::getLimitSign() +double rc_getConstraintLimitSign(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getLimitSign(); + } + + return 0; +} + +//btHingeConstraint::getSolveLimit() +int rc_getHingeSolveLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getSolveLimit(); + } + + return 0; +} + +//btHingeConstraint::setUseReferenceFrameA() +void rc_useHingeReferenceFrameA(int constraint_id, bool flag) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setUseReferenceFrameA(flag); + } +} + + +// +//btPoint2PointConstraint::getAppliedImpulse() +double rc_getConstraintAppliedImpulse(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getAppliedImpulse(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return p2p->getAppliedImpulse(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getAppliedImpulse(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getAppliedImpulse(); + } + + return 0; +} + + +//btPoint2PointConstraint::getFixedBody() +int rc_getConstraintFixedActor(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return -1; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = hinge->getFixedBody(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = p2p->getFixedBody(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = cone->getFixedBody(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = slide->getFixedBody(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + + return -1; +} + +//btPoint2PointConstraint::getPivotInA() +void rc_getConstraintPivotA(int constraint_id, double* x, double* y, double* z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 pivot = p2p->getPivotInA(); + *x = pivot.getX(); + *y = pivot.getY(); + *z = pivot.getZ(); + } +} + +//btPoint2PointConstraint::getPivotInB() +void rc_getConstraintPivotB(int constraint_id, double* x, double* y, double* z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 pivot = p2p->getPivotInB(); + *x = pivot.getX(); + *y = pivot.getY(); + *z = pivot.getZ(); + } +} + +//btPoint2PointConstraint::getRigidBodyA() +int rc_getConstraintActorA(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return -1; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = hinge->getRigidBodyA(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = p2p->getRigidBodyA(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = cone->getRigidBodyA(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = slide->getRigidBodyA(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + + return -1; +} + +//btPoint2PointConstraint::getRigidBodyB() +int rc_getConstraintActorB(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return -1; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = hinge->getRigidBodyB(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = p2p->getRigidBodyB(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = cone->getRigidBodyB(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btRigidBody body = slide->getRigidBodyB(); + SCollisionObjectIdentification* identification = (SCollisionObjectIdentification*)body.getUserPointer(); + return identification->getId(); + } + + return -1; +} + +//btPoint2PointConstraint::setOverrideNumSolverIterations() +void rc_setConstraintSolverIterations(int constraint_id, int num) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setOverrideNumSolverIterations(num); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + p2p->setOverrideNumSolverIterations(num); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setOverrideNumSolverIterations(num); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setOverrideNumSolverIterations(num); + } +} + +// +//btConeTwistConstraint::getBiasFactor() +double rc_getConstraintBiasFactor(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getBiasFactor(); + } + + return 0; +} + +//btConeTwistConstraint::getDamping() +double rc_getConstraintDamping(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getDamping(); + } + + return 0; +} + +//btConeTwistConstraint::getFixThresh() +double rc_getConstraintFixThresh(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getFixThresh(); + } + + return 0; +} + +//btConeTwistConstraint::getLimit() +double rc_getConstraintLimit(int constraint_id, int limit_index) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getLimit(limit_index); + } + + return 0; +} + +//btConeTwistConstraint::getLimitSoftness() +double rc_getConstraintLimitSoftness(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getLimitSoftness(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getLimitSoftness(); + } + + return 0; +} + +//btConeTwistConstraint::getOverrideNumSolverIterations() +double rc_getConstraintSolverIterations(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getOverrideNumSolverIterations(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_POINT) + { + btPoint2PointConstraint* p2p = (btPoint2PointConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return p2p->getOverrideNumSolverIterations(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getOverrideNumSolverIterations(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getOverrideNumSolverIterations(); + } + + return 0; +} + +//btConeTwistConstraint::GetPointForAngle() +void rc_getConstraintAnglePoint(int constraint_id, double angle, double len, double* x, double* y, double* z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 v = cone->GetPointForAngle( radians(angle), len); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +//btConeTwistConstraint::getAngularOnly() +bool rc_getConstraintAngularOnly(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return false; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getAngularOnly(); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getAngularOnly(); + } + + return false; +} + +//btConeTwistConstraint::getSolveSwingLimit() +int rc_getConstraintSolveSwingLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getSolveSwingLimit(); + } + + return 0; +} + +//btConeTwistConstraint::getSolveTwistLimit() +int rc_getConstraintSolveTwistLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getSolveTwistLimit(); + } + + return 0; +} + +//btHingeConstraint::getSolveLimit() +int rc_getConstraintSolveLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return hinge->getSolveLimit(); + } + + return 0; +} + +//btConeTwistConstraint::getSwingSpan1() +double rc_getConstraintSwingSpan1(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getSwingSpan1(); + } + + return 0; +} + +//btConeTwistConstraint::getSwingSpan2() +int rc_getConstraintSwingSpan2(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getSwingSpan2(); + } + + return 0; +} + +//btConeTwistConstraint::getTwistAngle() +double rc_getConstraintTwistAngle(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getTwistAngle(); + } + + return 0; +} + + +//btConeTwistConstraint::getTwistLimitSign() +double rc_getConstraintTwistLimitSign(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getTwistLimitSign(); + } + + return 0; +} + +//btConeTwistConstraint::getTwistSpan() +int rc_getConstraintTwistSpan(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return cone->getTwistSpan(); + } + + return 0; +} + +//btConeTwistConstraint::setAngularOnly() +void rc_setConstraintAngularOnly(int constraint_id, bool flag) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_HINGE) + { + btHingeConstraint* hinge = (btHingeConstraint*) rc_physics3D.constraints[constraint_id].constraint; + hinge->setAngularOnly(flag); + } + else if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setAngularOnly(flag); + } +} + +//btConeTwistConstraint::setDamping() +void rc_setConstraintDamping(int constraint_id, double damping) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setDamping(damping); + } +} + +//btConeTwistConstraint::setFixThresh() +void rc_setConstraintFixThresh(int constraint_id, double fixThresh) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_CONE) + { + btConeTwistConstraint* cone = (btConeTwistConstraint*) rc_physics3D.constraints[constraint_id].constraint; + cone->setFixThresh(fixThresh); + } +} + + +//btSliderConstraint::getAncorInA() +void rc_getConstraintAnchorA(int constraint_id, double* x, double* y, double* z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 v = slide->getAncorInA(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +//btSliderConstraint::getAncorInB() +void rc_getConstraintAnchorB(int constraint_id, double* x, double* y, double* z) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + btVector3 v = slide->getAncorInB(); + *x = v.getX(); + *y = v.getY(); + *z = v.getZ(); + } +} + +//btSliderConstraint::getAngDepth() +double rc_getConstraintAngDepth(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getAngDepth(); + } + + return 0; +} + +//btSliderConstraint::getAngularPos() +double rc_getConstraintAngularPos(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getAngularPos(); + } + + return 0; +} + +//btSliderConstraint::getDampingDirAng() +double rc_getConstraintDampingDirAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingDirAng(); + } + + return 0; +} + +//btSliderConstraint::getDampingDirLin() +double rc_getConstraintDampingDirLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingDirLin(); + } + + return 0; +} + +//btSliderConstraint::getDampingLimAng() +double rc_getConstraintDampingLimAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingLimAng(); + } + + return 0; +} + +//btSliderConstraint::getDampingLimLin() +double rc_getConstraintDampingLimLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingLimLin(); + } + + return 0; +} + +//btSliderConstraint::getDampingOrthoAng() +double rc_getConstraintDampingOrthoAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingOrthoAng(); + } + + return 0; +} + +//btSliderConstraint::getDampingOrthoLin() +double rc_getConstraintDampingOrthoLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getDampingOrthoLin(); + } + + return 0; +} + +//btSliderConstraint::getLinearPos() +double rc_getConstraintLinearPos(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getLinearPos(); + } + + return 0; +} + +//btSliderConstraint::getLinDepth() +double rc_getConstraintLinDepth(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getLinDepth(); + } + + return 0; +} + +//btSliderConstraint::getLowerAngLimit() +double rc_getConstraintLowerAngLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getLowerAngLimit(); + } + + return 0; +} + +//btSliderConstraint::getLowerLinLimit() +double rc_getConstraintLowerLinLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getLowerLinLimit(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionDirAng() +double rc_getConstraintRestitutionDirAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionDirAng(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionDirLin() +double rc_getConstraintRestitutionDirLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionDirLin(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionLimAng() +double rc_getConstraintRestitutionLimAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionLimAng(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionLimLin() +double rc_getConstraintRestitutionLimLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionLimLin(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionOrthoAng() +double rc_getConstraintRestitutionOrthoAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionOrthoAng(); + } + + return 0; +} + +//btSliderConstraint::getRestitutionOrthoLin() +double rc_getConstraintRestitutionOrthoLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getRestitutionOrthoLin(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessDirAng() +double rc_getConstraintSoftnessDirAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessDirAng(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessDirLin() +double rc_getConstraintSoftnessDirLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessDirLin(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessLimAng() +double rc_getConstraintSoftnessLimAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessLimAng(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessLimLin() +double rc_getConstraintSoftnessLimLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessLimLin(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessOrthoAng() +double rc_getConstraintSoftnessOrthoAng(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessOrthoAng(); + } + + return 0; +} + +//btSliderConstraint::getSoftnessOrthoLin() +double rc_getConstraintSoftnessOrthoLin(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSoftnessOrthoLin(); + } + + return 0; +} + +//btSliderConstraint::getSolveAngLimit() +bool rc_getConstraintSolveAngLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSolveAngLimit(); + } + + return 0; +} + +//btSliderConstraint::getSolveLinLimit() +bool rc_getConstraintSolveLinLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getSolveLinLimit(); + } + + return 0; +} + +//btSliderConstraint::getUpperAngLimit() +double rc_getConstraintUpperAngLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getUpperAngLimit(); + } + + return 0; +} + +//btSliderConstraint::getUpperLinLimit() +double rc_getConstraintUpperLinLimit(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getUpperLinLimit(); + } + + return 0; +} + +//btSliderConstraint::getUseFrameOffset() +bool rc_getConstraintUseFrameOffset(int constraint_id) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return 0; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + return slide->getUseFrameOffset(); + } + + return 0; +} + +//btSliderConstraint::setDampingDirAng() +void rc_setConstraintDampingDirAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingDirAng(n); + } +} + +//btSliderConstraint::setDampingDirLin() +void rc_setConstraintDampingDirLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingDirLin(n); + } +} + +//btSliderConstraint::setDampingLimAng() +void rc_setConstraintDampingLimAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingLimAng(n); + } +} + +//btSliderConstraint::setDampingLimLin() +void rc_setConstraintDampingLimLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingLimLin(n); + } +} + +//btSliderConstraint::setDampingOrthoAng() +void rc_setConstraintDampingOrthoAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingOrthoAng(n); + } +} + +//btSliderConstraint::setDampingOrthoLin() +void rc_setConstraintDampingOrthoLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setDampingOrthoLin(n); + } +} + +//btSliderConstraint::setLowerAngLimit() +void rc_setConstraintLowerAngLimit(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setLowerAngLimit(n); + } +} + +//btSliderConstraint::setLowerLinLimit() +void rc_setConstraintLowerLinLimit(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setLowerLinLimit(n); + } +} + +//btSliderConstraint::setRestitutionDirAng() +void rc_setConstraintRestitutionDirAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionDirAng(n); + } +} + +//btSliderConstraint::setRestitutionDirLin() +void rc_setConstraintRestitutionDirLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionDirLin(n); + } +} + +//btSliderConstraint::setRestitutionLimAng() +void rc_setConstraintRestitutionLimAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionLimAng(n); + } +} + +//btSliderConstraint::setRestitutionLimLin() +void rc_setConstraintRestitutionLimLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionLimLin(n); + } +} + +//btSliderConstraint::setRestitutionOrthoAng() +void rc_setConstraintRestitutionOrthoAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionOrthoAng(n); + } +} + +//btSliderConstraint::setRestitutionOrthoLin() +void rc_setConstraintRestitutionOrthoLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setRestitutionOrthoLin(n); + } +} + +//btSliderConstraint::setSoftnessDirAng() +void rc_setConstraintSoftnessDirAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessDirAng(n); + } +} + +//btSliderConstraint::setSoftnessDirLin() +void rc_setConstraintSoftnessDirLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessDirLin(n); + } +} + +//btSliderConstraint::setSoftnessLimAng() +void rc_setConstraintSoftnessLimAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessLimAng(n); + } +} + +//btSliderConstraint::setSoftnessLimLin() +void rc_setConstraintSoftnessLimLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessLimLin(n); + } +} + +//btSliderConstraint::setSoftnessOrthoAng() +void rc_setConstraintSoftnessOrthoAng(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessOrthoAng(n); + } +} + +//btSliderConstraint::setSoftnessOrthoLin() +void rc_setConstraintSoftnessOrthoLin(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setSoftnessOrthoLin(n); + } +} + +//btSliderConstraint::setUpperAngLimit() +void rc_setConstraintUpperAngLimit(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setUpperAngLimit(n); + } +} + +//btSliderConstraint::setUpperLinLimit() +void rc_setConstraintUpperLinLimit(int constraint_id, double n) +{ + if(constraint_id < 0 || constraint_id >= rc_physics3D.constraints.size()) + return; + + if(rc_physics3D.constraints[constraint_id].type == RC_CONSTRAINT_TYPE_SLIDER) + { + btSliderConstraint* slide = (btSliderConstraint*) rc_physics3D.constraints[constraint_id].constraint; + slide->setUpperLinLimit(n); + } +} + + + + + +void rc_setWorld3DDeltaTime(double dt) +{ + rc_physics3D.DeltaTime = dt; +} + +void rc_setWorld3DMaxSubSteps(double steps) +{ + rc_physics3D.maxSubSteps = steps; +} + +void rc_setWorld3DTimeStep(double ts) +{ + rc_physics3D.fixedTimeStep = ts; +} + + +//set actor animation [TODO] +void rc_setActorAnimation(int actor, int start_frame, int end_frame) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setFrameLoop((irr::s32)start_frame, (irr::s32)end_frame ); + break; + } +} + +void rc_setActorMD2Animation(int actor, int md2_animation) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setMD2Animation( (irr::scene::EMD2_ANIMATION_TYPE) md2_animation ); + break; + } +} + +void rc_setActorMD2AnimationByName(int actor, std::string animation_name) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setMD2Animation( animation_name.c_str() ); + break; + } +} + +int rc_getActorStartFrame(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getStartFrame(); + } + + return 0; +} + +int rc_getActorEndFrame(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getEndFrame(); + } + + return 0; +} + +int rc_getActorCurrentFrame(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getFrameNr(); + } + + return 0; +} + +//set actor animation speed +void rc_setActorAnimationSpeed(int actor, double speed) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setAnimationSpeed( (irr::f32)speed ); + break; + } +} + +double rc_getActorAnimationSpeed(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getAnimationSpeed(); + } + + return 0; +} + +//set actor animation speed +void rc_setActorAutoCulling(int actor, int cull_type) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + rc_actor[actor].mesh_node->setAutomaticCulling((irr::scene::E_CULLING_TYPE) cull_type); +} + +int rc_getActorAutoCulling(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].mesh_node) + return rc_actor[actor].mesh_node->getAutomaticCulling(); + + return 0; +} + + +void rc_addActorShadow(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].shadow) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + case RC_NODE_TYPE_OTMESH: + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + rc_actor[actor].shadow = node->addShadowVolumeSceneNode(); + break; + } +} + +void rc_removeActorShadow(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(!rc_actor[actor].shadow) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + case RC_NODE_TYPE_OTMESH: + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->removeChild(rc_actor[actor].shadow); + break; + } +} + +bool rc_lightIsCastingShadow(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + return node->getCastShadow(); + } + + return false; +} + +int rc_getLightType(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + return (int)node->getLightType(); + } + + return 0; +} + +double rc_getLightRadius(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + return node->getRadius(); + } + + return 0; +} + +void rc_setLightType(int actor, int light_type) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + node->setLightType((irr::video::E_LIGHT_TYPE)light_type); + } +} + +void rc_setLightRadius(int actor, double radius) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + node->setRadius(radius); + } +} + +void rc_setActorFrame(int actor, int frame) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setCurrentFrame(frame); + break; + } +} + +void rc_setLightShadowCast(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + node->enableCastShadow(flag); + } +} + +void rc_setLightAmbientColor(int actor, Uint32 color) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SColor c; + c.set(color); + irr::video::SColorf cf(c); + irr::video::SLight light_data = node->getLightData(); + light_data.AmbientColor = cf; + node->setLightData(light_data); + } +} + +Uint32 rc_getLightAmbientColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.AmbientColor.toSColor().color; + } + + return 0; +} + +void rc_setLightAttenuation(int actor, double l_constant, double l_linear, double l_quadratic) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + light_data.Attenuation.set(l_constant, l_linear, l_quadratic); + node->setLightData(light_data); + } +} + +void rc_getLightAttenuation(int actor, double* l_constant, double* l_linear, double* l_quadratic) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *l_constant = 0; + *l_linear = 0; + *l_quadratic = 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + *l_constant = light_data.Attenuation.X; + *l_linear = light_data.Attenuation.Y; + *l_quadratic = light_data.Attenuation.Z; + } +} + +void rc_setLightDiffuseColor(int actor, Uint32 color) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SColor c; + c.set(color); + irr::video::SColorf cf(c); + irr::video::SLight light_data = node->getLightData(); + light_data.DiffuseColor = cf; + node->setLightData(light_data); + } +} + +Uint32 rc_getLightDiffuseColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.DiffuseColor.toSColor().color; + } + + return 0; +} + +void rc_setLightFalloff(int actor, double falloff) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + light_data.Falloff = falloff; + node->setLightData(light_data); + } +} + +double rc_getLightFalloff(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.Falloff; + } + + return 0; +} + +void rc_setLightInnerCone(int actor, double angle) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + light_data.InnerCone = angle; + node->setLightData(light_data); + } +} + +double rc_getLightInnerCone(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.InnerCone; + } + + return 0; +} + +void rc_setLightOuterCone(int actor, double angle) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + light_data.OuterCone = angle; + node->setLightData(light_data); + } +} + +double rc_getLightOuterCone(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.OuterCone; + } + + return 0; +} + +void rc_setLightSpecularColor(int actor, Uint32 color) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SColor c; + c.set(color); + irr::video::SColorf cf(c); + irr::video::SLight light_data = node->getLightData(); + light_data.SpecularColor = cf; + node->setLightData(light_data); + } +} + +Uint32 rc_getLightSpecularColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_LIGHT: + irr::scene::ILightSceneNode* node = (irr::scene::ILightSceneNode*)rc_actor[actor].mesh_node; + irr::video::SLight light_data = node->getLightData(); + return light_data.SpecularColor.toSColor().color; + } + + return 0; +} + + +void rc_loopActorAnimation(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setLoopMode(flag); + break; + } +} + +bool rc_actorAnimationIsLooped(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + return node->getLoopMode(); + } + + return false; +} + +//set actor animation speed +void rc_setActorVisible(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + irr::scene::ISceneNode* node = rc_actor[actor].mesh_node; + node->setVisible(flag); +} + +bool rc_actorIsVisible(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + return rc_actor[actor].mesh_node->isVisible(); +} + +void rc_startActorTransition(int actor, double frame, double transition_time) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].transition) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setTransitionTime(transition_time); + node->setJointMode(irr::scene::EJUOR_CONTROL); + node->setCurrentFrame(frame); + rc_actor[actor].transition = true; + rc_actor[actor].transition_time = transition_time; + rc_actor[actor].transition_start_time = ((double)SDL_GetTicks())/1000.0d; + rc_transition_actor.push_back(actor); + } +} + +double rc_getActorTransitionTime(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].transition) + return rc_actor[actor].transition_time; + + return 0; +} + + +void rc_stopActorTransition(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_MESH: + irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[actor].mesh_node; + node->setTransitionTime(0); + node->setJointMode(irr::scene::EJUOR_NONE); + rc_actor[actor].transition = false; + rc_actor[actor].transition_time = 0; + + for(int i = 0; i < rc_transition_actor.size();) + { + if(rc_transition_actor[i] == actor) + { + rc_transition_actor.erase(i); + } + else + i++; + } + } +} + +bool rc_actorIsInTransition(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + return rc_actor[actor].transition; +} + + +void rc_getTerrainPatchAABB(int actor, double patch_x, double patch_z, double* min_x, double* min_y, double* min_z, double* max_x, double* max_y, double* max_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *min_x = 0; + *min_y = 0; + *min_z = 0; + + *max_x = 0; + *max_y = 0; + *max_z = 0; + + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* node = (irr::scene::ITerrainSceneNode*)rc_actor[actor].mesh_node; + irr::core::aabbox3d bbox = node->getBoundingBox(patch_x, patch_z); + + *min_x = bbox.MinEdge.X; + *min_y = bbox.MinEdge.Y; + *min_z = bbox.MinEdge.Z; + + *max_x = bbox.MaxEdge.X; + *max_y = bbox.MaxEdge.Y; + *max_z = bbox.MaxEdge.Z; + } +} + + +int rc_getTerrainPatchLOD(int actor, int patchX, int patchZ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return -1; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + + irr::core::array lod; + int lodp_size = terrain->getCurrentLODOfPatches(lod); + irr::s32 dim_size = irr::core::squareroot(lodp_size); + return lod[patchX * dim_size + patchZ]; + } + + return -1; +} + +double rc_getTerrainHeight(int actor, int patchX, int patchZ ) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + return terrain->getHeight(patchX, patchZ); + } + + return 0; +} + +void rc_getTerrainCenter(int actor, double* x, double* y, double* z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + *x = 0; + *y = 0; + *z = 0; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + irr::core::vector3df v = terrain->getTerrainCenter(); + *x = v.X; + *y = v.Y; + *z = v.Z; + } +} + +void rc_setTerrainLODDistance(int actor, int lod, double distance) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + terrain->overrideLODDistance(lod, distance); + } +} + +void rc_scaleTerrainTexture(int actor, double scale1, double scale2) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + terrain->scaleTexture(scale1, scale2); + } +} + +void rc_setTerrainCameraMovementDelta(int actor, double delta) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + terrain->setCameraMovementDelta(delta); + } +} + +void rc_setTerrainCameraRotationDelta(int actor, double delta) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + terrain->setCameraRotationDelta(delta); + } +} + +void rc_setTerrainPatchLOD(int actor, int patchX, int patchZ, int lod) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + switch(rc_actor[actor].node_type) + { + case RC_NODE_TYPE_TERRAIN: + irr::scene::ITerrainSceneNode* terrain = (irr::scene::ITerrainSceneNode*) rc_actor[actor].mesh_node; + terrain->setLODOfPatch(patchX, patchZ, lod); + } +} + +void rc_startParticleEmitter(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + + bool everyMeshVertex = rc_actor[actor].particle_properties.everyMeshVertex; + irr::s32 mbNumber = rc_actor[actor].particle_properties.mbNumber; + irr::f32 normalDirectionModifier = rc_actor[actor].particle_properties.normalDirectionModifier; + bool useNormalDirection = rc_actor[actor].particle_properties.useNormalDirection; + irr::s32 mesh_id = rc_actor[actor].particle_properties.mesh_id; + irr::core::vector3df direction = rc_actor[actor].particle_properties.direction; + irr::u32 minParticlesPerSecond = rc_actor[actor].particle_properties.minParticlesPerSecond; + irr::u32 maxParticlesPerSecond = rc_actor[actor].particle_properties.maxParticlesPerSecond; + irr::video::SColor minStartColor = rc_actor[actor].particle_properties.minStartColor; + irr::video::SColor maxStartColor = rc_actor[actor].particle_properties.maxStartColor; + irr::u32 lifeTimeMin = rc_actor[actor].particle_properties.lifeTimeMin; + irr::u32 lifeTimeMax = rc_actor[actor].particle_properties.lifeTimeMax; + irr::s32 maxAngleDegrees = rc_actor[actor].particle_properties.maxAngleDegrees; + irr::core::dimension2df minStartSize = rc_actor[actor].particle_properties.minStartSize; + irr::core::dimension2df maxStartSize = rc_actor[actor].particle_properties.maxStartSize; + irr::core::vector3df center = rc_actor[actor].particle_properties.center; + irr::f32 radius = rc_actor[actor].particle_properties.radius; + irr::f32 ringThickness = rc_actor[actor].particle_properties.ringThickness; + irr::core::aabbox3df box = rc_actor[actor].particle_properties.box; + irr::core::vector3df normal = rc_actor[actor].particle_properties.normal; + irr::f32 length = rc_actor[actor].particle_properties.length; + bool outlineOnly = rc_actor[actor].particle_properties.outlineOnly; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*) rc_actor[actor].mesh_node; + + irr::scene::IParticleEmitter* em = NULL; + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_POINT: + em = node->createPointEmitter(direction, minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + + case RC_PARTICLE_TYPE_BOX: + em = node->createBoxEmitter(box, direction, minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + + case RC_PARTICLE_TYPE_SPHERE: + em = node->createSphereEmitter(center, radius, direction, + minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + + case RC_PARTICLE_TYPE_CYLINDER: + em = node->createCylinderEmitter(center, radius, normal, length, outlineOnly, + direction, minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + + case RC_PARTICLE_TYPE_MESH: + if(mesh_id < 0 || mesh_id >= rc_mesh.size()) + return; + + if(!rc_mesh[mesh_id].mesh) + return; + + em = node->createMeshEmitter(rc_mesh[mesh_id].mesh, useNormalDirection, + direction, normalDirectionModifier, mbNumber, everyMeshVertex, + minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + + case RC_PARTICLE_TYPE_RING: + em = node->createRingEmitter(center, radius, ringThickness, + direction, minParticlesPerSecond, maxParticlesPerSecond, + minStartColor, maxStartColor, lifeTimeMin, lifeTimeMax, + maxAngleDegrees, minStartSize, maxStartSize); + node->setEmitter(em); + em->drop(); + break; + } +} + +void rc_stopParticleEmitter(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*) rc_actor[actor].mesh_node; + node->setEmitter(0); +} + +void rc_setParticleDirection(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.direction.set(x, y, z); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setDirection( rc_actor[actor].particle_properties.direction ); +} + +void rc_getParticleDirection(int actor, double* x, double* y, double* z) +{ + *x = 0; + *y = 0; + *z = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *x = rc_actor[actor].particle_properties.direction.X; + *y = rc_actor[actor].particle_properties.direction.Y; + *z = rc_actor[actor].particle_properties.direction.Z; +} + +void rc_useParticleEveryMeshVertex(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return; + + rc_actor[actor].particle_properties.everyMeshVertex = flag; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + { + irr::scene::IParticleMeshEmitter* em = (irr::scene::IParticleMeshEmitter*)node->getEmitter(); + em->setEveryMeshVertex(rc_actor[actor].particle_properties.everyMeshVertex); + } +} + +bool rc_particleIsUsingEveryMeshVertex(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return false; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return false; + + return rc_actor[actor].particle_properties.everyMeshVertex; + +} + +void rc_setParticleNormalDirectionMod(int actor, double mod) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return; + + rc_actor[actor].particle_properties.normalDirectionModifier = mod; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + { + irr::scene::IParticleMeshEmitter* em = (irr::scene::IParticleMeshEmitter*)node->getEmitter(); + em->setNormalDirectionModifier(rc_actor[actor].particle_properties.normalDirectionModifier); + } +} + +double rc_getParticleNormalDirectionMod(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return 0; + + return rc_actor[actor].particle_properties.normalDirectionModifier; +} + +void rc_useParticleNormalDirection(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return; + + rc_actor[actor].particle_properties.useNormalDirection = flag; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + { + irr::scene::IParticleMeshEmitter* em = (irr::scene::IParticleMeshEmitter*)node->getEmitter(); + em->setUseNormalDirection(rc_actor[actor].particle_properties.useNormalDirection); + } +} + +bool rc_particleIsUsingNormalDirection(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return false; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return false; + + return rc_actor[actor].particle_properties.useNormalDirection; +} + +void rc_setParticleMesh(int actor, int mesh) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + if(rc_actor[actor].particle_properties.particle_type != RC_PARTICLE_TYPE_MESH) + return; + + rc_actor[actor].particle_properties.mesh_id = mesh; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + { + if(mesh < 0 || mesh >= rc_mesh.size()) + return; + + if(!rc_mesh[mesh].mesh) + return; + + irr::scene::IParticleMeshEmitter* em = (irr::scene::IParticleMeshEmitter*)node->getEmitter(); + em->setMesh(rc_mesh[mesh].mesh); + } +} + +void rc_setParticleMinParticlesPerSecond(int actor, Uint32 minParticlesPerSecond) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.minParticlesPerSecond = minParticlesPerSecond; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMinParticlesPerSecond(minParticlesPerSecond); +} + +Uint32 rc_getParticleMinParticlesPerSecond(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.minParticlesPerSecond; +} + +void rc_setParticleMaxParticlesPerSecond(int actor, Uint32 maxParticlesPerSecond) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.maxParticlesPerSecond = maxParticlesPerSecond; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMaxParticlesPerSecond(maxParticlesPerSecond); +} + +Uint32 rc_getParticleMaxParticlesPerSecond(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.maxParticlesPerSecond; +} + +void rc_setParticleMinStartColor(int actor, Uint32 color) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.minStartColor = irr::video::SColor(color); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMinStartColor(rc_actor[actor].particle_properties.minStartColor); +} + +Uint32 rc_getParticleMinStartColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.minStartColor.color; +} + +void rc_setParticleMaxStartColor(int actor, Uint32 color) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.maxStartColor = irr::video::SColor(color); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMaxStartColor(rc_actor[actor].particle_properties.maxStartColor); +} + +Uint32 rc_getParticleMaxStartColor(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.maxStartColor.color; +} + +void rc_setParticleMinLife(int actor, Uint32 minLife) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.lifeTimeMin = minLife; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMinLifeTime(rc_actor[actor].particle_properties.lifeTimeMin); +} + +Uint32 rc_getParticleMinLife(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.lifeTimeMin; +} + +void rc_setParticleMaxLife(int actor, Uint32 maxLife) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.lifeTimeMax = maxLife; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMaxLifeTime(rc_actor[actor].particle_properties.lifeTimeMax); +} + +Uint32 rc_getParticleMaxLife(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.lifeTimeMax; +} + +void rc_setParticleMaxAngle(int actor, int maxAngle) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.maxAngleDegrees = maxAngle; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMaxAngleDegrees(rc_actor[actor].particle_properties.maxAngleDegrees); +} + +int rc_getParticleMaxAngle(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.maxAngleDegrees; +} + +void rc_setParticleMinStartSize(int actor, double w, double h) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.minStartSize = irr::core::dimension2df(w, h); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMinStartSize(rc_actor[actor].particle_properties.minStartSize); +} + +void rc_getParticleMinStartSize(int actor, double* w, double* h) +{ + *w = 0; + *h = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *w = rc_actor[actor].particle_properties.minStartSize.Width; + *h = rc_actor[actor].particle_properties.minStartSize.Height; +} + +void rc_setParticleMaxStartSize(int actor, double w, double h) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.maxStartSize = irr::core::dimension2df(w, h); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(node->getEmitter()) + node->getEmitter()->setMaxStartSize(rc_actor[actor].particle_properties.maxStartSize); +} + +void rc_getParticleMaxStartSize(int actor, double* w, double* h) +{ + *w = 0; + *h = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *w = rc_actor[actor].particle_properties.maxStartSize.Width; + *h = rc_actor[actor].particle_properties.maxStartSize.Height; +} + +void rc_setParticleCenter(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.center = irr::core::vector3df(x, y, z); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_SPHERE: + { + irr::scene::IParticleSphereEmitter* em = (irr::scene::IParticleSphereEmitter*)node->getEmitter(); + em->setCenter(rc_actor[actor].particle_properties.center); + } + break; + case RC_PARTICLE_TYPE_CYLINDER: + { + irr::scene::IParticleCylinderEmitter* em = (irr::scene::IParticleCylinderEmitter*)node->getEmitter(); + em->setCenter(rc_actor[actor].particle_properties.center); + } + break; + case RC_PARTICLE_TYPE_RING: + { + irr::scene::IParticleRingEmitter* em = (irr::scene::IParticleRingEmitter*)node->getEmitter(); + em->setCenter(rc_actor[actor].particle_properties.center); + } + break; + } +} + +void rc_getParticleCenter(int actor, double* x, double* y, double* z) +{ + *x = 0; + *y = 0; + *z = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *x = rc_actor[actor].particle_properties.center.X; + *y = rc_actor[actor].particle_properties.center.Y; + *z = rc_actor[actor].particle_properties.center.Z; +} + +void rc_setParticleRadius(int actor, double radius) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.radius = radius; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_SPHERE: + { + irr::scene::IParticleSphereEmitter* em = (irr::scene::IParticleSphereEmitter*)node->getEmitter(); + em->setRadius(rc_actor[actor].particle_properties.radius); + } + break; + case RC_PARTICLE_TYPE_CYLINDER: + { + irr::scene::IParticleCylinderEmitter* em = (irr::scene::IParticleCylinderEmitter*)node->getEmitter(); + em->setRadius(rc_actor[actor].particle_properties.radius); + } + break; + case RC_PARTICLE_TYPE_RING: + { + irr::scene::IParticleRingEmitter* em = (irr::scene::IParticleRingEmitter*)node->getEmitter(); + em->setRadius(rc_actor[actor].particle_properties.radius); + } + break; + } +} + +double rc_getParticleRadius(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.radius; +} + +void rc_setParticleRingThickness(int actor, double ringThickness) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.ringThickness = ringThickness; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_RING: + { + irr::scene::IParticleRingEmitter* em = (irr::scene::IParticleRingEmitter*)node->getEmitter(); + em->setRingThickness(rc_actor[actor].particle_properties.ringThickness); + } + break; + } +} + +double rc_getParticleRingThickness(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.ringThickness; +} + +void rc_setParticleBox(int actor, double min_x, double min_y, double min_z, double max_x, double max_y, double max_z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.box = irr::core::aabbox3df(min_x, min_y, min_z, max_x, max_y, max_z); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_BOX: + { + irr::scene::IParticleBoxEmitter* em = (irr::scene::IParticleBoxEmitter*)node->getEmitter(); + em->setBox(rc_actor[actor].particle_properties.box); + } + break; + } +} + +void rc_getParticleBox(int actor, double* min_x, double* min_y, double* min_z, double* max_x, double* max_y, double* max_z) +{ + *min_x = 0; + *min_y = 0; + *min_z = 0; + + *max_x = 0; + *max_y = 0; + *max_z = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *min_x = rc_actor[actor].particle_properties.box.MinEdge.X; + *min_y = rc_actor[actor].particle_properties.box.MinEdge.Y; + *min_z = rc_actor[actor].particle_properties.box.MinEdge.Z; + + *max_x = rc_actor[actor].particle_properties.box.MaxEdge.X; + *max_y = rc_actor[actor].particle_properties.box.MaxEdge.Y; + *max_z = rc_actor[actor].particle_properties.box.MaxEdge.Z; +} + +void rc_setParticleNormal(int actor, double x, double y, double z) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.normal.set(x, y, z); + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_CYLINDER: + { + irr::scene::IParticleCylinderEmitter* em = (irr::scene::IParticleCylinderEmitter*)node->getEmitter(); + em->setNormal(rc_actor[actor].particle_properties.normal); + } + break; + } +} + +void rc_getParticleNormal(int actor, double* x, double* y, double* z) +{ + *x = 0; + *y = 0; + *z = 0; + + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + *x = rc_actor[actor].particle_properties.normal.X; + *y = rc_actor[actor].particle_properties.normal.Y; + *z = rc_actor[actor].particle_properties.normal.Z; +} + +void rc_setParticleLength(int actor, double length) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.length = length; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_CYLINDER: + { + irr::scene::IParticleCylinderEmitter* em = (irr::scene::IParticleCylinderEmitter*)node->getEmitter(); + em->setLength(rc_actor[actor].particle_properties.length); + } + break; + } +} + +double rc_getParticleLength(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return 0; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return 0; + + return rc_actor[actor].particle_properties.length; +} + +void rc_useParticleOutlineOnly(int actor, bool flag) +{ + if(actor < 0 || actor >= rc_actor.size()) + return; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return; + + rc_actor[actor].particle_properties.outlineOnly = flag; + + irr::scene::IParticleSystemSceneNode* node = (irr::scene::IParticleSystemSceneNode*)rc_actor[actor].mesh_node; + + if(!node->getEmitter()) + return; + + + switch(rc_actor[actor].particle_properties.particle_type) + { + case RC_PARTICLE_TYPE_CYLINDER: + { + irr::scene::IParticleCylinderEmitter* em = (irr::scene::IParticleCylinderEmitter*)node->getEmitter(); + em->setOutlineOnly(flag); + } + break; + } +} + +bool rc_particleIsUsingOutlineOnly(int actor) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(rc_actor[actor].node_type != RC_NODE_TYPE_PARTICLE) + return false; + + return rc_actor[actor].particle_properties.outlineOnly; +} + + + +bool rc_getActorTransform(int actor, int t_mat) +{ + if(actor < 0 || actor >= rc_actor.size()) + return false; + + if(t_mat < 0 || t_mat >= rc_matrix.size()) + return false; + + if(!rc_matrix[t_mat].active) + return false; + + irr::core::matrix4 m = rc_actor[actor].mesh_node->getAbsoluteTransformation(); + rc_convertFromIrrMatrix(m, t_mat); + + return true; +} + +void rc_setCameraPosition(double x, double y, double z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.setPosition(x, y, z); +} + +void rc_getCameraPosition(double* x, double* y, double* z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + irr::f32 fx, fy, fz; + + rc_canvas[rc_active_canvas].camera.getPosition(fx, fy, fz); + + *x = fx; + *y = fy; + *z = fz; +} + +void rc_translateCamera(double x, double y, double z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.translate(x, y, z); +} + +void rc_translateCameraW(double x, double y, double z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.translateW(x, y, z); +} + + +void rc_setCameraRotation(double x, double y, double z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.setRotation(x, y, z); +} + +void rc_getCameraRotation(double* x, double* y, double* z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + *x = rc_canvas[rc_active_canvas].camera.rx; + *y = rc_canvas[rc_active_canvas].camera.ry; + *z = rc_canvas[rc_active_canvas].camera.rz; +} + +void rc_rotateCamera(double x, double y, double z) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.rotate(x, y, z); +} + +void rc_setCameraFOV(double fov) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.camera->setFOV(fov); +} + +double rc_getCameraFOV() +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return 0; + + return rc_canvas[rc_active_canvas].camera.camera->getFOV(); +} + +void rc_setCameraAspectRatio(double aspect) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.camera->setAspectRatio(aspect); +} + +double rc_getCameraAspectRatio() +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return 0; + + return rc_canvas[rc_active_canvas].camera.camera->getAspectRatio(); +} + +void rc_setCameraFarValue(double zf) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.camera->setFarValue(zf); +} + +double rc_getCameraFarValue() +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return 0; + + return rc_canvas[rc_active_canvas].camera.camera->getFarValue(); +} + +void rc_setCameraNearValue(double zn) +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return; + + rc_canvas[rc_active_canvas].camera.camera->setNearValue(zn); +} + +double rc_getCameraNearValue() +{ + if(!(rc_active_canvas > 0 && rc_active_canvas < rc_canvas.size())) + return 0; + + return rc_canvas[rc_active_canvas].camera.camera->getNearValue(); +} + + +void rc_addSceneSkyBox(int img_top, int img_bottom, int img_left, int img_right, int img_front, int img_back) +{ + if(!SceneManager) + return; + + if(rc_scene_properties.sky) + return; + + irr::video::ITexture* tp = rc_image[img_top].image; + irr::video::ITexture* bt = rc_image[img_bottom].image; + irr::video::ITexture* lf = rc_image[img_left].image; + irr::video::ITexture* rt = rc_image[img_right].image; + irr::video::ITexture* ft = rc_image[img_front].image; + irr::video::ITexture* bk = rc_image[img_back].image; + rc_scene_properties.sky = SceneManager->addSkyBoxSceneNode(tp, bt, lf, rt, ft, bk); +} + +void rc_addSceneSkyDome(int img) +{ + if(!SceneManager) + return; + + if(rc_scene_properties.sky) + return; + + irr::video::ITexture* texture = rc_image[img].image; + rc_scene_properties.sky = SceneManager->addSkyDomeSceneNode(texture); +} + +void rc_addSceneSkyDomeEx(int img, Uint32 horiRes, Uint32 vertRes, double txPercentage, double spherePercentage, double radius) +{ + if(!SceneManager) + return; + + if(rc_scene_properties.sky) + return; + + irr::video::ITexture* texture = rc_image[img].image; + rc_scene_properties.sky = SceneManager->addSkyDomeSceneNode(texture, horiRes, vertRes, txPercentage, spherePercentage, radius); +} + +void rc_removeSceneSky() +{ + if(rc_scene_properties.sky) + rc_scene_properties.sky->remove(); + + rc_scene_properties.sky = NULL; +} + + + +#endif // RC_GFX3D_H_INCLUDED diff --git a/rcbasic_runtime/rc_gfx_core.h b/rcbasic_runtime/rc_gfx_core.h new file mode 100644 index 0000000..2872334 --- /dev/null +++ b/rcbasic_runtime/rc_gfx_core.h @@ -0,0 +1,595 @@ +#ifndef RC_GFX_CORE_H_INCLUDED +#define RC_GFX_CORE_H_INCLUDED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "gui_freetype_font.h" +#include "rc_utf8.h" +#include "camera.h" +#include +#include "rc_sprite2D.h" +#include +#include +#include + +using namespace irr; + +using namespace core; +using namespace video; +using namespace scene; + + +#define MAX_JOYSTICKS 8 + +#define MAX_FINGERS 10 + +#define MAX_ACCELS 20 +#define MAX_GYROS 20 + +SDL_Joystick * rc_joystick[MAX_JOYSTICKS]; +int rc_joy_axis[MAX_JOYSTICKS][100]; +int rc_numJoysticks = 0; +int rc_joybutton[MAX_JOYSTICKS][100]; +SDL_JoystickID rc_joyID[MAX_JOYSTICKS]; + +SDL_Joystick * tmp_joy; +SDL_JoystickID tmp_joy_id; +int tmp_joy_flag = 0; + +SDL_Haptic * rc_haptic[MAX_JOYSTICKS]; //1 for each joystick + +double rc_pressure = 0; +int rc_touchX = 0; +int rc_touchY = 0; +int rc_motionX = 0; +int rc_motionY = 0; +int rc_touch = 0; +int rc_mt_status = 0; +int rc_mt_x = 0; +int rc_mt_y = 0; +int rc_mt_numFingers = 0; +double rc_mt_theta = 0; +double rc_mt_dist = 0; +SDL_TouchID rc_touchDevice; +SDL_Finger rc_finger[MAX_FINGERS]; +set rc_fingers_pressed; + +SDL_Sensor * rc_accel[MAX_ACCELS]; +int num_accels = 0; + +SDL_Sensor * rc_gyro[MAX_GYROS]; +int num_gyros = 0; + + +struct SDLKeyMap +{ + SDLKeyMap() {} + SDLKeyMap(s32 x11, s32 win32) + : SDLKey(x11), Win32Key(win32) + { + } + + s32 SDLKey; + s32 Win32Key; + + bool operator<(const SDLKeyMap& o) const + { + return SDLKey KeyMap; + +void createKeyMap() +{ + // I don't know if this is the best method to create + // the lookuptable, but I'll leave it like that until + // I find a better version. + + KeyMap.reallocate(105); + + // buttons missing + + KeyMap.push_back(SDLKeyMap(SDLK_BACKSPACE, irr::EKEY_CODE::KEY_BACK)); + KeyMap.push_back(SDLKeyMap(SDLK_TAB, irr::EKEY_CODE::KEY_TAB)); + KeyMap.push_back(SDLKeyMap(SDLK_CLEAR, irr::EKEY_CODE::KEY_CLEAR)); + KeyMap.push_back(SDLKeyMap(SDLK_RETURN, irr::EKEY_CODE::KEY_RETURN)); + + // combined modifiers missing + + KeyMap.push_back(SDLKeyMap(SDLK_PAUSE, irr::EKEY_CODE::KEY_PAUSE)); + KeyMap.push_back(SDLKeyMap(SDLK_CAPSLOCK, irr::EKEY_CODE::KEY_CAPITAL)); + + // asian letter keys missing + + KeyMap.push_back(SDLKeyMap(SDLK_ESCAPE, irr::EKEY_CODE::KEY_ESCAPE)); + + // asian letter keys missing + + KeyMap.push_back(SDLKeyMap(SDLK_SPACE, irr::EKEY_CODE::KEY_SPACE)); + KeyMap.push_back(SDLKeyMap(SDLK_PAGEUP, irr::EKEY_CODE::KEY_PRIOR)); + KeyMap.push_back(SDLKeyMap(SDLK_PAGEDOWN, irr::EKEY_CODE::KEY_NEXT)); + KeyMap.push_back(SDLKeyMap(SDLK_END, irr::EKEY_CODE::KEY_END)); + KeyMap.push_back(SDLKeyMap(SDLK_HOME, irr::EKEY_CODE::KEY_HOME)); + KeyMap.push_back(SDLKeyMap(SDLK_LEFT, irr::EKEY_CODE::KEY_LEFT)); + KeyMap.push_back(SDLKeyMap(SDLK_UP, irr::EKEY_CODE::KEY_UP)); + KeyMap.push_back(SDLKeyMap(SDLK_RIGHT, irr::EKEY_CODE::KEY_RIGHT)); + KeyMap.push_back(SDLKeyMap(SDLK_DOWN, irr::EKEY_CODE::KEY_DOWN)); + + // select missing + KeyMap.push_back(SDLKeyMap(SDLK_PRINTSCREEN, irr::EKEY_CODE::KEY_PRINT)); + // execute missing + KeyMap.push_back(SDLKeyMap(SDLK_PRINTSCREEN, irr::EKEY_CODE::KEY_SNAPSHOT)); + + KeyMap.push_back(SDLKeyMap(SDLK_INSERT, irr::EKEY_CODE::KEY_INSERT)); + KeyMap.push_back(SDLKeyMap(SDLK_DELETE, irr::EKEY_CODE::KEY_DELETE)); + KeyMap.push_back(SDLKeyMap(SDLK_HELP, irr::EKEY_CODE::KEY_HELP)); + + KeyMap.push_back(SDLKeyMap(SDLK_0, irr::EKEY_CODE::KEY_KEY_0)); + KeyMap.push_back(SDLKeyMap(SDLK_1, irr::EKEY_CODE::KEY_KEY_1)); + KeyMap.push_back(SDLKeyMap(SDLK_2, irr::EKEY_CODE::KEY_KEY_2)); + KeyMap.push_back(SDLKeyMap(SDLK_3, irr::EKEY_CODE::KEY_KEY_3)); + KeyMap.push_back(SDLKeyMap(SDLK_4, irr::EKEY_CODE::KEY_KEY_4)); + KeyMap.push_back(SDLKeyMap(SDLK_5, irr::EKEY_CODE::KEY_KEY_5)); + KeyMap.push_back(SDLKeyMap(SDLK_6, irr::EKEY_CODE::KEY_KEY_6)); + KeyMap.push_back(SDLKeyMap(SDLK_7, irr::EKEY_CODE::KEY_KEY_7)); + KeyMap.push_back(SDLKeyMap(SDLK_8, irr::EKEY_CODE::KEY_KEY_8)); + KeyMap.push_back(SDLKeyMap(SDLK_9, irr::EKEY_CODE::KEY_KEY_9)); + + KeyMap.push_back(SDLKeyMap(SDLK_a, irr::EKEY_CODE::KEY_KEY_A)); + KeyMap.push_back(SDLKeyMap(SDLK_b, irr::EKEY_CODE::KEY_KEY_B)); + KeyMap.push_back(SDLKeyMap(SDLK_c, irr::EKEY_CODE::KEY_KEY_C)); + KeyMap.push_back(SDLKeyMap(SDLK_d, irr::EKEY_CODE::KEY_KEY_D)); + KeyMap.push_back(SDLKeyMap(SDLK_e, irr::EKEY_CODE::KEY_KEY_E)); + KeyMap.push_back(SDLKeyMap(SDLK_f, irr::EKEY_CODE::KEY_KEY_F)); + KeyMap.push_back(SDLKeyMap(SDLK_g, irr::EKEY_CODE::KEY_KEY_G)); + KeyMap.push_back(SDLKeyMap(SDLK_h, irr::EKEY_CODE::KEY_KEY_H)); + KeyMap.push_back(SDLKeyMap(SDLK_i, irr::EKEY_CODE::KEY_KEY_I)); + KeyMap.push_back(SDLKeyMap(SDLK_j, irr::EKEY_CODE::KEY_KEY_J)); + KeyMap.push_back(SDLKeyMap(SDLK_k, irr::EKEY_CODE::KEY_KEY_K)); + KeyMap.push_back(SDLKeyMap(SDLK_l, irr::EKEY_CODE::KEY_KEY_L)); + KeyMap.push_back(SDLKeyMap(SDLK_m, irr::EKEY_CODE::KEY_KEY_M)); + KeyMap.push_back(SDLKeyMap(SDLK_n, irr::EKEY_CODE::KEY_KEY_N)); + KeyMap.push_back(SDLKeyMap(SDLK_o, irr::EKEY_CODE::KEY_KEY_O)); + KeyMap.push_back(SDLKeyMap(SDLK_p, irr::EKEY_CODE::KEY_KEY_P)); + KeyMap.push_back(SDLKeyMap(SDLK_q, irr::EKEY_CODE::KEY_KEY_Q)); + KeyMap.push_back(SDLKeyMap(SDLK_r, irr::EKEY_CODE::KEY_KEY_R)); + KeyMap.push_back(SDLKeyMap(SDLK_s, irr::EKEY_CODE::KEY_KEY_S)); + KeyMap.push_back(SDLKeyMap(SDLK_t, irr::EKEY_CODE::KEY_KEY_T)); + KeyMap.push_back(SDLKeyMap(SDLK_u, irr::EKEY_CODE::KEY_KEY_U)); + KeyMap.push_back(SDLKeyMap(SDLK_v, irr::EKEY_CODE::KEY_KEY_V)); + KeyMap.push_back(SDLKeyMap(SDLK_w, irr::EKEY_CODE::KEY_KEY_W)); + KeyMap.push_back(SDLKeyMap(SDLK_x, irr::EKEY_CODE::KEY_KEY_X)); + KeyMap.push_back(SDLKeyMap(SDLK_y, irr::EKEY_CODE::KEY_KEY_Y)); + KeyMap.push_back(SDLKeyMap(SDLK_z, irr::EKEY_CODE::KEY_KEY_Z)); + + // TODO: + //KeyMap.push_back(SDLKeyMap(SDLK_LSUPER, KEY_LWIN)); + // TODO: + //KeyMap.push_back(SDLKeyMap(SDLK_RSUPER, KEY_RWIN)); + // apps missing + KeyMap.push_back(SDLKeyMap(SDLK_POWER, irr::EKEY_CODE::KEY_SLEEP)); //?? + + KeyMap.push_back(SDLKeyMap(SDLK_KP_0, irr::EKEY_CODE::KEY_NUMPAD0)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_1, irr::EKEY_CODE::KEY_NUMPAD1)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_2, irr::EKEY_CODE::KEY_NUMPAD2)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_3, irr::EKEY_CODE::KEY_NUMPAD3)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_4, irr::EKEY_CODE::KEY_NUMPAD4)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_5, irr::EKEY_CODE::KEY_NUMPAD5)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_6, irr::EKEY_CODE::KEY_NUMPAD6)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_7, irr::EKEY_CODE::KEY_NUMPAD7)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_8, irr::EKEY_CODE::KEY_NUMPAD8)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_9, irr::EKEY_CODE::KEY_NUMPAD9)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_MULTIPLY, irr::EKEY_CODE::KEY_MULTIPLY)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_PLUS, irr::EKEY_CODE::KEY_ADD)); +// KeyMap.push_back(SDLKeyMap(SDLK_KP_, KEY_SEPARATOR)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_MINUS, irr::EKEY_CODE::KEY_SUBTRACT)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_PERIOD, irr::EKEY_CODE::KEY_DECIMAL)); + KeyMap.push_back(SDLKeyMap(SDLK_KP_DIVIDE, irr::EKEY_CODE::KEY_DIVIDE)); + + KeyMap.push_back(SDLKeyMap(SDLK_F1, irr::EKEY_CODE::KEY_F1)); + KeyMap.push_back(SDLKeyMap(SDLK_F2, irr::EKEY_CODE::KEY_F2)); + KeyMap.push_back(SDLKeyMap(SDLK_F3, irr::EKEY_CODE::KEY_F3)); + KeyMap.push_back(SDLKeyMap(SDLK_F4, irr::EKEY_CODE::KEY_F4)); + KeyMap.push_back(SDLKeyMap(SDLK_F5, irr::EKEY_CODE::KEY_F5)); + KeyMap.push_back(SDLKeyMap(SDLK_F6, irr::EKEY_CODE::KEY_F6)); + KeyMap.push_back(SDLKeyMap(SDLK_F7, irr::EKEY_CODE::KEY_F7)); + KeyMap.push_back(SDLKeyMap(SDLK_F8, irr::EKEY_CODE::KEY_F8)); + KeyMap.push_back(SDLKeyMap(SDLK_F9, irr::EKEY_CODE::KEY_F9)); + KeyMap.push_back(SDLKeyMap(SDLK_F10, irr::EKEY_CODE::KEY_F10)); + KeyMap.push_back(SDLKeyMap(SDLK_F11, irr::EKEY_CODE::KEY_F11)); + KeyMap.push_back(SDLKeyMap(SDLK_F12, irr::EKEY_CODE::KEY_F12)); + KeyMap.push_back(SDLKeyMap(SDLK_F13, irr::EKEY_CODE::KEY_F13)); + KeyMap.push_back(SDLKeyMap(SDLK_F14, irr::EKEY_CODE::KEY_F14)); + KeyMap.push_back(SDLKeyMap(SDLK_F15, irr::EKEY_CODE::KEY_F15)); + // no higher F-keys + + // TODO: + //KeyMap.push_back(SDLKeyMap(SDLK_NUMLOCK, KEY_NUMLOCK)); + KeyMap.push_back(SDLKeyMap(SDLK_SCROLLLOCK, irr::EKEY_CODE::KEY_SCROLL)); + KeyMap.push_back(SDLKeyMap(SDLK_LSHIFT, irr::EKEY_CODE::KEY_LSHIFT)); + KeyMap.push_back(SDLKeyMap(SDLK_RSHIFT, irr::EKEY_CODE::KEY_RSHIFT)); + KeyMap.push_back(SDLKeyMap(SDLK_LCTRL, irr::EKEY_CODE::KEY_LCONTROL)); + KeyMap.push_back(SDLKeyMap(SDLK_RCTRL, irr::EKEY_CODE::KEY_RCONTROL)); + KeyMap.push_back(SDLKeyMap(SDLK_LALT, irr::EKEY_CODE::KEY_LMENU)); + KeyMap.push_back(SDLKeyMap(SDLK_RALT, irr::EKEY_CODE::KEY_RMENU)); + + KeyMap.push_back(SDLKeyMap(SDLK_PLUS, irr::EKEY_CODE::KEY_PLUS)); + KeyMap.push_back(SDLKeyMap(SDLK_COMMA, irr::EKEY_CODE::KEY_COMMA)); + KeyMap.push_back(SDLKeyMap(SDLK_MINUS, irr::EKEY_CODE::KEY_MINUS)); + KeyMap.push_back(SDLKeyMap(SDLK_PERIOD, irr::EKEY_CODE::KEY_PERIOD)); + + // some special keys missing + + KeyMap.sort(); +} + +IrrlichtDevice* device; +irr::video::IVideoDriver * VideoDriver; +irr::scene::ISceneManager *SceneManager; +SDL_Window* rc_window; +irr::core::dimension2d rc_window_size; + +struct rc_scene_properties_obj +{ + irr::scene::ISceneNode* sky = NULL; +}; + +rc_scene_properties_obj rc_scene_properties; + +#define RC_CONSTRAINT_TYPE_POINT 1 +#define RC_CONSTRAINT_TYPE_HINGE 2 +#define RC_CONSTRAINT_TYPE_SLIDER 3 +#define RC_CONSTRAINT_TYPE_CONE 4 + +struct rc_constraint_obj +{ + btTypedConstraint* constraint; + + int type; +}; + +struct rc_physicsWorld3D_obj +{ + irrBulletWorld* world; + + irr::f32 DeltaTime; + irr::u32 maxSubSteps; + irr::f32 fixedTimeStep; + + irr::u32 TimeStamp; + + irr::core::array constraints; +}; + +rc_physicsWorld3D_obj rc_physics3D; + +//Canvases +struct rc_physicsWorld2D_obj +{ + b2World* world; + float timeStep = 1/20.0; //the length of time passed to simulate (seconds) + int velocityIterations = 8; //how strongly to correct velocity + int positionIterations = 3; //how strongly to correct position +}; + +struct rc_canvas_obj +{ + irr::video::ITexture* texture; + + irr::video::ITexture* sprite_layer; + + irr::core::dimension2d dimension; + + struct rc_canvas_viewport + { + irr::core::vector2d position; + irr::core::dimension2d dimension; + } viewport; + + + bool show3D = false; + Camera camera; + + irr::core::vector2d offset; + + int mode; + + bool visible = true; + int z = 0; + + irr::u32 color_mod; + + rc_physicsWorld2D_obj physics2D; + irr::core::array sprite; +}; + +irr::core::array rc_canvas; +irr::core::array rc_canvas_zOrder; +int rc_active_canvas = -1; + +irr::video::SColor rc_active_color(0,0,0,0); +irr::video::SColor rc_clear_color(0,0,0,0); + +bool rc_init_events = false; +bool rc_init_timer = false; +bool rc_init_video = false; +bool rc_init_joystick = false; +bool rc_init_haptic = false; +bool rc_init_sensor = false; +bool rc_init_noparachute = false; +bool rc_init_audio = false; + + +irr::s32 MouseX, MouseY, MouseXRel, MouseYRel; +irr::u32 MouseButtonStates; + + +int rc_win_event = -1; +#define RC_WIN_EVENT_CLOSE 1 +#define RC_WIN_EVENT_MINIMIZE 2 +#define RC_WIN_EVENT_MAXIMIZE 3 +#define RC_WIN_EVENT_RESIZE 4 + +bool rc_win_exitOnClose = true; + +std::string rc_textinput_string = ""; +std::string rc_textinput_char = ""; +int rc_textinput_timer = 0; +int rc_textinput_delay = 100; +bool rc_textinput_flag = true; +bool rc_textinput_isActive = false; +int rc_textinput_waitHold = 800; +bool rc_textinput_hold = false; +bool rc_toggleBackspace = true; + + +static Uint32 baseticks = 0; + +int rc_inkey_val = 0; + +const Uint8 * keyState = NULL; + + + +std::wstring_convert> converter; + +struct rc_font_obj +{ + CGUITTFace* face; + CGUIFreetypeFont* font; + int font_size; +}; + +irr::core::array rc_font; + +int rc_active_font = -1; + + +bool mobile_active_window_flag = true; + + + +//------------ 3D Graphics ----------------// +#define RC_MESH_TYPE_NONE 0 +#define RC_MESH_TYPE_ANIMATED 1 + + +struct rc_mesh_obj +{ + int mesh_type = 0; + irr::scene::IAnimatedMesh* mesh; +}; +irr::core::array rc_mesh; + +#define RC_NODE_TYPE_NONE 0 +#define RC_NODE_TYPE_MESH 1 +#define RC_NODE_TYPE_OTMESH 2 +#define RC_NODE_TYPE_LIGHT 3 +#define RC_NODE_TYPE_TERRAIN 4 +#define RC_NODE_TYPE_WATER 5 +#define RC_NODE_TYPE_BILLBOARD 6 +#define RC_NODE_TYPE_PARTICLE 7 + + +#define RC_NODE_SHAPE_TYPE_NONE 0 +#define RC_NODE_SHAPE_TYPE_BOX 1 +#define RC_NODE_SHAPE_TYPE_SPHERE 2 +#define RC_NODE_SHAPE_TYPE_CYLINDER 3 +#define RC_NODE_SHAPE_TYPE_CAPSULE 4 +#define RC_NODE_SHAPE_TYPE_CONE 5 +#define RC_NODE_SHAPE_TYPE_CONVEXHULL 6 +#define RC_NODE_SHAPE_TYPE_TRIMESH 7 +#define RC_NODE_SHAPE_TYPE_HEIGHTFIELD 8 + +struct rc_node_physics_collision +{ + int actorA; + int actorB; + irr::core::array pointA; + irr::core::array pointB; + irr::core::array normalB; +}; + +irr::core::array rc_collisions; + +struct rc_node_physics +{ + IRigidBody* rigid_body; + + int shape_type; + bool isSolid; + double mass; + + irr::core::vector3df gravity; //only used when changing from Solid to Non-Solid and vice versa + + irr::core::array collisions; +}; + +#define RC_PARTICLE_TYPE_POINT 1 +#define RC_PARTICLE_TYPE_BOX 2 +#define RC_PARTICLE_TYPE_SPHERE 3 +#define RC_PARTICLE_TYPE_CYLINDER 4 +#define RC_PARTICLE_TYPE_MESH 5 +#define RC_PARTICLE_TYPE_RING 6 + +struct rc_particle_properties_obj +{ + int particle_type = 0; + bool everyMeshVertex; + irr::s32 mbNumber = 0; + irr::f32 normalDirectionModifier; + bool useNormalDirection; + irr::s32 mesh_id; + irr::core::vector3df direction; + irr::u32 minParticlesPerSecond; + irr::u32 maxParticlesPerSecond; + irr::video::SColor minStartColor; + irr::video::SColor maxStartColor; + irr::u32 lifeTimeMin; + irr::u32 lifeTimeMax; + irr::s32 maxAngleDegrees; + irr::core::dimension2df minStartSize; + irr::core::dimension2df maxStartSize; + irr::core::vector3df center; + irr::f32 radius; + irr::f32 ringThickness; + irr::core::aabbox3df box; + irr::core::vector3df normal; + irr::f32 length; + bool outlineOnly; +}; + +struct rc_scene_node +{ + int node_type = 0; + + irr::scene::ISceneNode* mesh_node; + irr::scene::IShadowVolumeSceneNode* shadow; + rc_node_physics physics; + + bool transition; + double transition_time; + double transition_start_time; + + rc_particle_properties_obj particle_properties; + + int material_ref_index = -1; +}; + +irr::core::array rc_actor; + +irr::core::array rc_transition_actor; + + +void myTickCallback2(btSoftRigidDynamicsWorld* dynamicsWorld, btScalar timeStep) +{ + rc_collisions.clear(); + int numManifolds = dynamicsWorld->getDispatcher()->getNumManifolds(); + + int c_index = 0; + + rc_node_physics_collision collision; + + for(int i = 0; i < rc_actor.size(); i++) + { + rc_actor[i].physics.collisions.clear(); + } + + + for (int i = 0; i < rc_physics3D.world->getNumManifolds(); i++) + { + ICollisionCallbackInformation* manifold = rc_physics3D.world->getCollisionCallback(i); + + int numContacts = manifold->getPointer()->getNumContacts(); + + int actorA = manifold->getBody0()->getIdentification()->getId(); + int actorB = manifold->getBody1()->getIdentification()->getId(); + + collision.actorA = actorA; + collision.actorB = actorB; + + //std::cout << "Collision Details: " << actorA << ", " << actorB << ", " << numContacts << std::endl; + + if(numContacts < 1) + continue; + + for (int j = 0; j < numContacts; j++) + { + SManifoldPoint pt = manifold->getContactPoint(j); + collision.pointA.push_back(pt.getPositionWorldOnA()); + collision.pointB.push_back(pt.getPositionWorldOnB()); + collision.normalB.push_back(pt.getNormalWorldOnB()); + } + + c_index = rc_collisions.size(); + rc_collisions.push_back(collision); + rc_actor[actorA].physics.collisions.push_back(c_index); + rc_actor[actorB].physics.collisions.push_back(c_index); + } + + for(int i = 0; i < rc_actor.size(); i++) + { + if(!rc_actor[i].physics.isSolid) + { + if(rc_actor[i].physics.collisions.size() > 0) + { + rc_physics3D.world->removeCollisionObject(rc_actor[i].physics.rigid_body, false); + rc_physics3D.world->addRigidBody(rc_actor[i].physics.rigid_body); + rc_actor[i].physics.rigid_body->setMassProps(1, irr::core::vector3df(0,0,0)); + rc_actor[i].physics.rigid_body->setGravity(irr::core::vector3df(0,0,0)); + } + } + } +} + + +#define RC_ACTOR_TEXTURE_TYPE_IMAGE 0 +#define RC_ACTOR_TEXTURE_TYPE_CANVAS 1 + + +// Function to calculate a point on a cubic Bezier curve +vector3df bezierPoint(const vector3df& p0, const vector3df& p1, const vector3df& p2, const vector3df& p3, float t) { + float u = 1.0f - t; + float tt = t * t; + float uu = u * u; + float uuu = uu * u; + float ttt = tt * t; + + vector3df p = uuu * p0; // (1-t)^3 * p0 + p += 3 * uu * t * p1; // 3 * (1-t)^2 * t * p1 + p += 3 * u * tt * p2; // 3 * (1-t) * t^2 * p2 + p += ttt * p3; // t^3 * p3 + + return p; +} + +// Function to draw a Bezier curve +void drawBezierCurve(IVideoDriver* driver, const vector3df& p0, const vector3df& p1, const vector3df& p2, const vector3df& p3, SColor color, int segments) { + std::vector points; + + for (int i = 0; i <= segments; ++i) { + float t = static_cast(i) / segments; + points.push_back(bezierPoint(p0, p1, p2, p3, t)); + } + + for (size_t i = 0; i < points.size() - 1; ++i) { + driver->draw3DLine(points[i], points[i + 1], color); + } +} + + +void printIrrMatrix(irr::core::matrix4 m) +{ + for(int i = 0; i < 4; i++) + std::cout << "[ " << m[i*4] << ", " << m[i*4+1] << ", " << m[i*4+2] << ", " << m[i*4+3] << " ]" << std::endl; +} + +#endif // RC_GFX_CORE_H_INCLUDED diff --git a/rcbasic_runtime/rc_matrix.h b/rcbasic_runtime/rc_matrix.h index 817f575..0994f07 100755 --- a/rcbasic_runtime/rc_matrix.h +++ b/rcbasic_runtime/rc_matrix.h @@ -11,7 +11,9 @@ #endif #endif #include -#include +#include + +#include using namespace std; @@ -22,21 +24,47 @@ int64_t rand_int(int64_t vmin, int64_t vmax) { struct rc_matrix_type -{ +{ + bool active = false; uint32_t r = 0; uint32_t c = 0; vector data; }; -rc_matrix_type rc_matrix[1048]; +std::vector rc_matrix(64); #define RC_TMP_MATRIX 1024 #define RC_TMP_MATRIX_2 1025 #define RC_PROCESS_TMP_MATRIX_OFFSET 1026 + +#define NEW_MATRIX -1 + +int DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false) +{ + if(m < 0) + { + for(int i = 0; i < rc_matrix.size(); i++) + { + if(!rc_matrix[i].active) + { + m = i; + break; + } + } + + if(m < 0) + { + rc_matrix_type mat; + mat.active = true; + m = rc_matrix.size(); + rc_matrix.push_back(mat); + } + } + + if(!preserve_flag) + rc_matrix[m].data.clear(); -void DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false) -{ rc_matrix[m].data.resize(m_rows*m_cols); if(rc_matrix[m].c != m_cols && preserve_flag) @@ -56,7 +84,18 @@ void DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false } rc_matrix[m].r = m_rows; - rc_matrix[m].c = m_cols; + rc_matrix[m].c = m_cols; + rc_matrix[m].active = true; + + return m; +} + +void DeleteMatrix(int mA) +{ + rc_matrix[mA].data.clear(); + rc_matrix[mA].c = 0; + rc_matrix[mA].r = 0; + rc_matrix[mA].active = false; } //Adds Matrix A() to Matrix B(), answer is Matrix C() @@ -503,11 +542,11 @@ bool GetMatrixRows (uint32_t mA, uint32_t mB, uint32_t r, uint32_t num_rows) } // Creates Identity Matrix A() of order N% -void IdentityMatrix(uint32_t mA, uint32_t n) +void setIdentityMatrix(uint32_t mA, uint32_t n) { DimMatrix(mA, n, n); for(int i = 0; i < n; i++) - rc_matrix[mA].data[i*n+n] = 1; + rc_matrix[mA].data[i*(n+1)] = 1; } bool GaussianElimination(vector< vector > &A, vector &b, uint32_t mC) { @@ -630,7 +669,7 @@ void getCofactor(uint32_t A_dim, double* A, double* temp, int p, int q, } } -bool CofactorMatrix(uint32_t mA, int p, int q, int n) +void CofactorMatrix(uint32_t mA, int p, int q, int n) { uint32_t m_size = rc_matrix[mA].c; @@ -1184,6 +1223,136 @@ void JoinMatrixColumns(uint32_t mA, uint32_t mB, uint32_t mC) SetMatrixValue(mC, rc_matrix[mA].r + r, c, mv); } } +} + + + +void ClipMatrix(int mA, int r, int c, int num_rows, int num_cols, int mB) +{ + int mA_rows = rc_matrix[mA].r; + int mA_cols = rc_matrix[mA].c; + + int mB_rows = num_rows; + int mB_cols = num_cols; + + if((r + num_rows) > mA_rows) + mB_rows = mA_rows - r; + + if(mB_rows < 0) + { + DimMatrix(mB, mA_rows, mA_cols, false); + ClearMatrix(mB); + return; + } + + if((c + num_cols) > mA_cols) + mB_cols = mA_cols - c; + + if(mB_cols < 0) + { + DimMatrix(mB, mA_rows, mA_cols, false); + ClearMatrix(mB); + return; + } + + DimMatrix(mB, mB_rows, mB_cols, false); + + for(int row = r; row < (r+num_rows); row++) + for(int col = c; col < (c+num_cols); col++) + SetMatrixValue( mB, row-r, col-c, MatrixValue(mA, row, col)); +} + +int rc_convertFromIrrMatrix(irr::core::matrix4 irr_mat, int mB = -1) +{ + int mA = DimMatrix(NEW_MATRIX, 4, 4); + + if(mB < 0) + mB = DimMatrix(NEW_MATRIX, 4, 4); + else + DimMatrix(mB, 4, 4); + + for(int i = 0; i < 4; i++) + { + rc_matrix[mA].data[i*4] = irr_mat[i*4]; + rc_matrix[mA].data[i*4+1] = irr_mat[i*4+1]; + rc_matrix[mA].data[i*4+2] = irr_mat[i*4+2]; + rc_matrix[mA].data[i*4+3] = irr_mat[i*4+3]; + } + + TransposeMatrix(mA, mB); + DeleteMatrix(mA); + return mB; +} + +irr::core::matrix4 rc_convertToIrrMatrix(int mA) +{ + int mB = DimMatrix(NEW_MATRIX, 4, 4); + TransposeMatrix(mA, mB); + + irr::core::matrix4 irr_mat; + + for(int i = 0; i < 4; i++) + { + irr_mat[i*4] = rc_matrix[mB].data[i*4]; + irr_mat[i*4+1] = rc_matrix[mB].data[i*4+1]; + irr_mat[i*4+2] = rc_matrix[mB].data[i*4+2]; + irr_mat[i*4+3] = rc_matrix[mB].data[i*4+3]; + } + + DeleteMatrix(mB); + return irr_mat; +} + +void printRCMatrix(int m) +{ + for(int i = 0; i < 4; i++) + std::cout << "[ " << rc_matrix[m].data[i*4] << ", " << rc_matrix[m].data[i*4+1] << ", " << rc_matrix[m].data[i*4+2] << ", " << rc_matrix[m].data[i*4+3] << " ]" << std::endl; +} + + +void rc_setMatrixTranslation(int mA, double x, double y, double z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + m.setTranslation(irr::core::vector3df(x, y, z)); + rc_convertFromIrrMatrix(m, mA); +} + +void rc_setMatrixRotation(int mA, double x, double y, double z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + m.setRotationDegrees(irr::core::vector3df(x, y, z)); + rc_convertFromIrrMatrix(m, mA); +} + +void rc_setMatrixScale(int mA, double x, double y, double z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + m.setScale(irr::core::vector3df(x, y, z)); + rc_convertFromIrrMatrix(m, mA); +} + +void rc_getMatrixTranslation(int mA, double* x, double* y, double* z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + *x = m.getTranslation().X; + *y = m.getTranslation().Y; + *z = m.getTranslation().Z; +} + +void rc_getMatrixRotation(int mA, double* x, double* y, double* z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + *x = m.getRotationDegrees().X; + *y = m.getRotationDegrees().Y; + *z = m.getRotationDegrees().Z; +} + +void rc_getMatrixScale(int mA, double* x, double* y, double* z) +{ + irr::core::matrix4 m = rc_convertToIrrMatrix(mA); + *x = m.getScale().X; + *y = m.getScale().Y; + *z = m.getScale().Z; } #endif // RC_MATRIX_H_INCLUDED diff --git a/rcbasic_runtime/rc_sprite2D.h b/rcbasic_runtime/rc_sprite2D.h new file mode 100644 index 0000000..6a013dc --- /dev/null +++ b/rcbasic_runtime/rc_sprite2D.h @@ -0,0 +1,36 @@ +#ifndef RC_SPRITE2D_H_INCLUDED +#define RC_SPRITE2D_H_INCLUDED + +#include +#include + +struct rc_sprite2D_physics_obj +{ + b2Body* body; +}; + +struct rc_sprite2D_obj +{ + bool active = false; + int image_id; + irr::core::vector2d position; + irr::f64 rotation; + irr::core::vector2d scale; + + bool visible = true; + Uint8 alpha; + + irr::video::SColor color_mod; + + bool physics_enabled = false; + rc_sprite2D_physics_obj physics; + + int parent_canvas = -1; + + double z; +}; + +irr::core::array rc_sprite; + + +#endif // RC_SPRITE2D_H_INCLUDED diff --git a/rcbasic_runtime/rc_stdlib.h b/rcbasic_runtime/rc_stdlib.h index 7fedb54..b5f6204 100755 --- a/rcbasic_runtime/rc_stdlib.h +++ b/rcbasic_runtime/rc_stdlib.h @@ -71,20 +71,20 @@ using namespace std; struct dirent *rc_entry; DIR *rc_dir; -string rc_dir_path = ""; +std::string rc_dir_path = ""; #else struct dirent *rc_entry; -string rc_dir; -string rc_dir_path = ""; +std::string rc_dir; +std::string rc_dir_path = ""; HANDLE hfind; #endif // RC_LINUX int rc_cmd_count = 0; -string * rc_cmd_args; +std::string * rc_cmd_args; SDL_RWops * rc_fstream[RC_MAX_FILES]; @@ -94,8 +94,20 @@ bool rc_eof[RC_MAX_FILES]; int rc_user_active_n_stack = 0; int rc_user_active_s_stack = 0; -stack rc_user_n_stack[MAX_USER_STACKS]; -stack rc_user_s_stack[MAX_USER_STACKS]; +struct rc_num_stack_obj +{ + bool active = false; + stack data; +}; + +struct rc_str_stack_obj +{ + bool active = false; + stack data; +}; + +vector rc_user_n_stack; +vector rc_user_s_stack; #ifdef RC_WINDOWS #define MAX_INPUT_LENGTH 32767 @@ -138,16 +150,16 @@ std::size_t utf8_length(std::string const &s) } -void rc_fprint(string txt) +void rc_fprint(std::string txt) { cout << txt; } -string rc_input(string prompt) +std::string rc_input(std::string prompt) { #ifdef RC_WINDOWS - string line = ""; + std::string line = ""; cout << prompt; unsigned long read; @@ -167,11 +179,11 @@ string rc_input(string prompt) mb_str[s_size-1] = 0; } - return (string) mb_str; + return (std::string) mb_str; #else - string line = ""; + std::string line = ""; cout << prompt; getline(cin, line); return line; @@ -185,12 +197,12 @@ std::u32string to_utf32(const std::string &s) return conv.from_bytes(s); } -inline int rc_intern_asc(string c) +inline int rc_intern_asc(std::string c) { return (uint32_t)to_utf32(utf8_substr(c, 0, 1))[0]; } -inline size_t rc_intern_bufferFromString(string s, double* buffer) +inline size_t rc_intern_bufferFromString(std::string s, double* buffer) { for(int i = 0; i < s.length(); i++) { @@ -241,14 +253,14 @@ std::string cpToUTF8(uint32_t cp) return std::string(utf8, len); } -inline string rc_intern_chr(uint32_t n) +inline std::string rc_intern_chr(uint32_t n) { - string s = cpToUTF8(n); + std::string s = cpToUTF8(n); //s += (char) n; return s; } -inline string rc_intern_insert(string src, string tgt, size_t pos) +inline std::string rc_intern_insert(std::string src, std::string tgt, size_t pos) { if(pos < 0 || pos > utf8_length(src)) return src; @@ -256,7 +268,7 @@ inline string rc_intern_insert(string src, string tgt, size_t pos) return utf8_substr(src, 0, pos) + tgt + utf8_substr(src, pos, utf8_length(src)-pos); } -inline double rc_intern_instr(string in_string, string in_substring) +inline double rc_intern_instr(std::string in_string, std::string in_substring) { //cout << "Cant find " << rc_sid[INSTR_SUBSTR][0] << " in " << rc_sid[INSTR_STR][0] << endl; bool found = false; @@ -275,9 +287,9 @@ inline double rc_intern_instr(string in_string, string in_substring) return found ? (double)n : -1; } -inline string rc_intern_lcase(string u_string) +inline std::string rc_intern_lcase(std::string u_string) { - string u_string_out = ""; + std::string u_string_out = ""; for(size_t i=0;i= utf8_length(l_string)) return l_string; @@ -293,21 +305,21 @@ inline string rc_intern_left(string l_string, size_t n) return utf8_substr(l_string,0,n); } -inline size_t rc_intern_length(string l_string) +inline size_t rc_intern_length(std::string l_string) { //cout << "DBG_LEN" << endl; return utf8_length(l_string); } -inline string rc_intern_ltrim(string l_string) +inline std::string rc_intern_ltrim(std::string l_string) { size_t first_index = l_string.find_first_not_of(" "); - if(first_index != string::npos) + if(first_index != std::string::npos) return l_string.substr(first_index); return l_string; } -inline string rc_intern_mid(string m_string, size_t m_start, size_t n) +inline std::string rc_intern_mid(std::string m_string, size_t m_start, size_t n) { //cout << "DBG_MID" << endl; if(m_start < 0 || n < 0) @@ -320,10 +332,10 @@ inline string rc_intern_mid(string m_string, size_t m_start, size_t n) return utf8_substr(m_string, m_start, n); } -inline string rc_intern_replaceSubstr(string src, string rpc, size_t pos) +inline std::string rc_intern_replaceSubstr(std::string src, std::string rpc, size_t pos) { size_t rpc_i = 0; - string n_str = utf8_substr(src, 0, pos); + std::string n_str = utf8_substr(src, 0, pos); if(pos < 0) return src; @@ -341,14 +353,14 @@ inline string rc_intern_replaceSubstr(string src, string rpc, size_t pos) return n_str; } -inline string rc_intern_replace(string src, string tgt, string rpc) +inline std::string rc_intern_replace(std::string src, std::string tgt, std::string rpc) { if(tgt.length()==0) return src; size_t found_inc = rpc.length() > 0 ? rpc.length() : 1; size_t found = 0; found = src.find(tgt); - while( found != string::npos && found < src.length()) + while( found != std::string::npos && found < src.length()) { src = src.substr(0,found) + rpc + src.substr(found + tgt.length()); found = src.find(tgt,found+found_inc); @@ -356,9 +368,9 @@ inline string rc_intern_replace(string src, string tgt, string rpc) return src; } -inline string rc_intern_reverse(string rpc_string) +inline string rc_intern_reverse(std::string rpc_string) { - string n_str = ""; + std::string n_str = ""; if(rpc_string.length()==0) return ""; @@ -371,7 +383,7 @@ inline string rc_intern_reverse(string rpc_string) return n_str; } -inline string rc_intern_right(string src, size_t n) +inline std::string rc_intern_right(std::string src, size_t n) { size_t src_length = utf8_length(src); if(n < 0) @@ -381,7 +393,7 @@ inline string rc_intern_right(string src, size_t n) return utf8_substr(src,src_length-n, src_length -(src_length-n)); } -inline string rc_intern_rtrim(string src) +inline std::string rc_intern_rtrim(std::string src) { if(src.length()==0) return ""; @@ -398,12 +410,12 @@ inline string rc_intern_rtrim(string src) return utf8_substr(src,0,i+1); } -inline size_t rc_intern_size(string src) +inline size_t rc_intern_size(std::string src) { return src.length(); } -inline string rc_intern_stringFromBuffer(double* buffer, size_t buffer_size) +inline std::string rc_intern_stringFromBuffer(double* buffer, size_t buffer_size) { if(buffer_size <= 0) return ""; @@ -416,46 +428,46 @@ inline string rc_intern_stringFromBuffer(double* buffer, size_t buffer_size) } c_buf[buffer_size] = '\0'; - return (string)c_buf; + return (std::string)c_buf; } -inline string rc_intern_stringfill(string f_string, size_t n) +inline string rc_intern_stringfill(std::string f_string, size_t n) { - string f = ""; + std::string f = ""; for(size_t i = 0; i < n; i++) f += f_string; return f; } -inline string rc_intern_str(double n) +inline std::string rc_intern_str(double n) { stringstream ss; ss << n; return ss.str(); } -inline string rc_intern_str_f(double n) +inline std::string rc_intern_str_f(double n) { stringstream ss; ss << fixed << n; return ss.str(); } -inline string rc_intern_str_s(double n) +inline std::string rc_intern_str_s(double n) { stringstream ss; ss << scientific << n; return ss.str(); } -inline unsigned long rc_intern_tally(string t_string, string t_substring) +inline unsigned long rc_intern_tally(std::string t_string, std::string t_substring) { size_t found = 0; - string t_str = t_string; - string t_substr = t_substring; + std::string t_str = t_string; + std::string t_substr = t_substring; found = t_str.find(t_substr); unsigned long tally_count = 0; - while( found != string::npos) + while( found != std::string::npos) { tally_count++; found = t_str.find(t_substr,found+1); @@ -463,14 +475,14 @@ inline unsigned long rc_intern_tally(string t_string, string t_substring) return tally_count; } -inline string rc_intern_trim(string t_string) +inline std::string rc_intern_trim(std::string t_string) { return rc_intern_ltrim(rc_intern_rtrim(t_string)); } -inline string rc_intern_ucase(string u_string) +inline std::string rc_intern_ucase(std::string u_string) { - string u_string_out = ""; + std::string u_string_out = ""; for(size_t i=0;i(n).to_string(); //bin_str = bin_str.substr(bin_str.find_first_not_of("0")); - string binstr = Convert(n);// bin_str; + std::string binstr = Convert(n);// bin_str; return binstr.substr(binstr.find_first_not_of("0")); } #else -inline string rc_intern_bin(uint64_t n) +inline std::string rc_intern_bin(uint64_t n) { - string bin_str = bitset<64>(n).to_string(); + std::string bin_str = bitset<64>(n).to_string(); bin_str = bin_str.substr(bin_str.find_first_not_of("0")); return bin_str; } @@ -586,14 +598,14 @@ inline double rc_intern_frac(double n) return n - floor(n); } -inline string rc_intern_hex(uint64_t n) +inline std::string rc_intern_hex(uint64_t n) { stringstream ss; ss << hex << n; return ss.str(); } -inline double rc_intern_hexInt(string n) +inline double rc_intern_hexInt(std::string n) { uint64_t x; stringstream ss; @@ -689,8 +701,18 @@ inline double rc_intern_xorbit(uint64_t a, uint64_t b) return (a ^ b); } -inline int rc_intern_fileOpen(int fo_stream, string fo_file, int fo_mode) +inline int rc_intern_freeFile() { + for(int i = 0; i < RC_MAX_FILES; i++) + if(rc_fstream[i] == NULL) + return i; + return -1; +} + +inline int rc_intern_fileOpen(std::string fo_file, int fo_mode) +{ + int fo_stream = rc_intern_freeFile(); + if(fo_stream >= 0 && fo_stream < RC_MAX_FILES) { if(rc_fstream[fo_stream] != NULL) @@ -742,10 +764,10 @@ inline int rc_intern_fileOpen(int fo_stream, string fo_file, int fo_mode) if(rc_fstream[fo_stream] == NULL) { //cout << "RC_DEBUG: FILE NOT OPEN" << endl; - return 0; + return -1; } } - return 1; + return fo_stream; } inline int rc_intern_fileClose(int fc_stream) @@ -802,9 +824,9 @@ inline int rc_intern_fileWriteByte(int f_stream, char wb) return 1; } -inline string rc_intern_fileReadLine(int f_stream) +inline std::string rc_intern_fileReadLine(int f_stream) { - string rline = ""; + std::string rline = ""; unsigned char buf[5]; if(SDL_RWread(rc_fstream[f_stream], buf, 1, 1)==0) { @@ -826,7 +848,7 @@ inline string rc_intern_fileReadLine(int f_stream) return rline; } -inline int rc_intern_fileWrite(int f_stream, string line) +inline int rc_intern_fileWrite(int f_stream, std::string line) { //cout << "DEBUG: WRITELINE" << endl; if(rc_fstream[f_stream]!=NULL) @@ -835,17 +857,17 @@ inline int rc_intern_fileWrite(int f_stream, string line) return 1; } -inline int rc_intern_fileWriteLine(int f_stream, string line) +inline int rc_intern_fileWriteLine(int f_stream, std::string line) { //cout << "DEBUG: WRITELINE" << endl; - string line_out = line + "\n"; + std::string line_out = line + "\n"; if(rc_fstream[f_stream]!=NULL) SDL_RWwrite(rc_fstream[f_stream], line_out.c_str(), line_out.length(), 1); //cout << "WRITELINE_END" << endl; return 1; } -inline int rc_intern_fileCopy(string src_file, string dst_file) +inline int rc_intern_fileCopy(std::string src_file, std::string dst_file) { std::ifstream src(src_file.c_str(), std::ios::binary); std::ofstream dst(dst_file.c_str(), std::ios::binary); @@ -863,7 +885,7 @@ inline int rc_intern_fileCopy(string src_file, string dst_file) return 1; } -inline int rc_intern_fileDelete(string tgt_file) +inline int rc_intern_fileDelete(std::string tgt_file) { if(remove(tgt_file.c_str())==0) return 1; @@ -871,7 +893,7 @@ inline int rc_intern_fileDelete(string tgt_file) return 0; } -inline int rc_intern_fileExist(string tgt_file) +inline int rc_intern_fileExist(std::string tgt_file) { std::ifstream infile(tgt_file.c_str()); bool fx = infile.good(); @@ -879,7 +901,7 @@ inline int rc_intern_fileExist(string tgt_file) return (int)fx; } -inline int rc_intern_fileMove(string src, string dst) +inline int rc_intern_fileMove(std::string src, std::string dst) { int fm = rename(src.c_str(), dst.c_str()); if(fm == 0) @@ -888,7 +910,7 @@ inline int rc_intern_fileMove(string src, string dst) return 0; } -inline int rc_intern_fileRename(string src, string dst) +inline int rc_intern_fileRename(std::string src, std::string dst) { int fm = rename(src.c_str(), dst.c_str()); if(fm == 0) @@ -897,7 +919,7 @@ inline int rc_intern_fileRename(string src, string dst) return 0; } -inline unsigned long rc_intern_fileLength(string filename) +inline unsigned long rc_intern_fileLength(std::string filename) { //struct stat st; SDL_RWops * fl_file = SDL_RWFromFile(filename.c_str(), "r"); @@ -925,18 +947,11 @@ inline int rc_intern_eof(int f_stream) return rc_eof[f_stream]; } -inline int rc_intern_freeFile() -{ - for(int i = 0; i < RC_MAX_FILES; i++) - if(rc_fstream[i] == NULL) - return i; - return -1; -} #ifndef RC_WINDOWS #ifdef RC_LINUX -inline int rc_intern_dirChange(string ch_path) +inline int rc_intern_dirChange(std::string ch_path) { if(chdir(ch_path.c_str())!=0) { @@ -948,7 +963,7 @@ inline int rc_intern_dirChange(string ch_path) } #endif // RC_LINUX -inline int rc_intern_dirExist(string d_path) +inline int rc_intern_dirExist(std::string d_path) { struct stat info; @@ -960,7 +975,7 @@ inline int rc_intern_dirExist(string d_path) return 0; } -inline string rc_intern_dirFirst () +inline std::string rc_intern_dirFirst () { rc_dir = opendir (rc_dir_path.c_str()); //string s = ""; @@ -974,24 +989,24 @@ inline string rc_intern_dirFirst () } #ifdef RC_GETCWD -string getcwd_str() +std::string getcwd_str() { char *buffer = new char[MAXPATHLEN]; getcwd(buffer,MAXPATHLEN); if(buffer != NULL) { - string ret(buffer); + std::string ret(buffer); delete[] buffer; return ret; } else { - return string(); + return std::string(); } } -inline int rc_intern_dirChange(string ch_path) +inline int rc_intern_dirChange(std::string ch_path) { if(chdir(ch_path.c_str())!=0) { @@ -1002,9 +1017,9 @@ inline int rc_intern_dirChange(string ch_path) return 0; } -inline string rc_intern_dir() +inline std::string rc_intern_dir() { - string d = getcwd_str(); + std::string d = getcwd_str(); //__android_log_print(ANDROID_LOG_ERROR, "RC_DEBUG_DIR", "%s", SDL_GetPrefPath("rcbasic","lucky")); if(d.compare("")==0) { @@ -1017,9 +1032,9 @@ inline string rc_intern_dir() #else -inline string rc_intern_dir() +inline std::string rc_intern_dir() { - string d = get_current_dir_name(); + std::string d = get_current_dir_name(); if(d.compare("")==0) { cout << "Could not get current directory" << endl; @@ -1031,14 +1046,14 @@ inline string rc_intern_dir() #endif // RC_ANDROID -inline string rc_intern_dirNext() +inline std::string rc_intern_dirNext() { if( (rc_entry = readdir(rc_dir))!=NULL) return rc_entry->d_name; return ""; } -inline int rc_intern_dirCreate(string d_path) +inline int rc_intern_dirCreate(std::string d_path) { if(mkdir(d_path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)!=0) { @@ -1048,7 +1063,7 @@ inline int rc_intern_dirCreate(string d_path) return 1; } -inline int rc_intern_dirDelete(string d_path) +inline int rc_intern_dirDelete(std::string d_path) { if(rmdir(d_path.c_str())!=0) { @@ -1058,7 +1073,7 @@ inline int rc_intern_dirDelete(string d_path) return 1; } -inline string rc_intern_OS() +inline std::string rc_intern_OS() { #ifdef RC_WEB return "WEB"; @@ -1115,7 +1130,7 @@ std::wstring ConvertUtf8ToWide(const std::string& str) return wstr; } -inline int rc_intern_dirChange(string dpath) +inline int rc_intern_dirChange(std::string dpath) { if(SetCurrentDirectoryW(ConvertUtf8ToWide(dpath).c_str())==0) { @@ -1144,7 +1159,7 @@ bool dirExists(const std::string& dirName_in) return false; // this is not a directory! } -inline int rc_intern_dirExist(string dpath) +inline int rc_intern_dirExist(std::string dpath) { return dirExists(dpath); } @@ -1152,7 +1167,7 @@ inline int rc_intern_dirExist(string dpath) HANDLE hFind; WIN32_FIND_DATAW ffd; -string rc_intern_dirFirst() +std::string rc_intern_dirFirst() { //char* path = new char[rc_dir_path.length()+1]; @@ -1168,7 +1183,7 @@ string rc_intern_dirFirst() //_tcscat(path, _T("*.*")); - string path = rc_dir_path; + std::string path = rc_dir_path; if(path.substr(path.length()-1, 1).compare("\\")!=0) path += "\\"; @@ -1185,11 +1200,11 @@ string rc_intern_dirFirst() cerr << _T("Invalid handle value.") << GetLastError() << endl; return ""; } - string fname_utf8 = ConvertWideToUtf8(ffd.cFileName); + std::string fname_utf8 = ConvertWideToUtf8(ffd.cFileName); return fname_utf8; } -inline string rc_intern_dir() +inline std::string rc_intern_dir() { wchar_t buf[MAX_PATH+1]; GetCurrentDirectoryW(MAX_PATH, buf); @@ -1204,14 +1219,14 @@ inline string rc_intern_dir() return ConvertWideToUtf8(d.c_str()); } -string rc_intern_dirNext() +std::string rc_intern_dirNext() { if(!FindNextFileW(hFind,&ffd)) return ""; return ConvertWideToUtf8(ffd.cFileName); } -inline int rc_intern_dirCreate(string dpath) +inline int rc_intern_dirCreate(std::string dpath) { if(CreateDirectoryW(ConvertUtf8ToWide(dpath).c_str(),NULL)==0) { @@ -1221,7 +1236,7 @@ inline int rc_intern_dirCreate(string dpath) return 1; } -inline int rc_intern_dirDelete(string dpath) +inline int rc_intern_dirDelete(std::string dpath) { if(RemoveDirectoryW(ConvertUtf8ToWide(dpath).c_str())==0) { @@ -1231,7 +1246,7 @@ inline int rc_intern_dirDelete(string dpath) return 1; } -inline string rc_intern_OS() +inline std::string rc_intern_OS() { return "WINDOWS"; } @@ -1239,7 +1254,7 @@ inline string rc_intern_OS() #endif // RC_WINDOWS -inline string rc_intern_date() +inline std::string rc_intern_date() { time_t t = time(0); // get time now struct tm * now = localtime( & t ); @@ -1256,12 +1271,12 @@ inline string rc_intern_date() return d.str(); } -string ZeroPadNumber(int num) +std::string ZeroPadNumber(int num) { stringstream ss; // the number is converted to string with the help of stringstream ss << num; - string ret; + std::string ret; ss >> ret; // Append zero chars int str_length = ret.length(); @@ -1270,7 +1285,7 @@ string ZeroPadNumber(int num) return ret; } -string rc_intern_easter(int X) +std::string rc_intern_easter(int X) { stringstream ss; // X = year to compute int K, M, S, A, D, R, OG, SZ, OE; @@ -1293,7 +1308,7 @@ inline unsigned long rc_intern_ticks() return clock(); } -inline string rc_intern_time() +inline std::string rc_intern_time() { time_t t = time(0); // get time now struct tm * now = localtime( & t ); @@ -1326,7 +1341,7 @@ inline void rc_intern_wait(double m_sec) SDL_Delay(m_sec); } -inline int rc_intern_system(string rc_sys_cmd) +inline int rc_intern_system(std::string rc_sys_cmd) { #ifdef RC_IOS return 0; @@ -1335,7 +1350,7 @@ inline int rc_intern_system(string rc_sys_cmd) #endif } -inline string rc_intern_sysReturnOutput(string rc_sys_cmd) +inline std::string rc_intern_sysReturnOutput(std::string rc_sys_cmd) { #if defined(RC_ANDROID) || defined(RC_IOS) || defined(RC_WEB) return ""; @@ -1358,7 +1373,7 @@ inline string rc_intern_sysReturnOutput(string rc_sys_cmd) #endif } -inline string rc_intern_command(int num) +inline std::string rc_intern_command(int num) { if(num < rc_cmd_count) { @@ -1372,25 +1387,25 @@ inline int rc_intern_numCommands() return rc_cmd_count; } -inline string rc_intern_env(string v) +inline std::string rc_intern_env(std::string v) { #ifdef RC_WINDOWS char * val = new char[32767]; int n = GetEnvironmentVariable(v.c_str(), val, 32767); - string rtn = ""; + std::string rtn = ""; if (n>0) - rtn = (string)val; + rtn = (std::string)val; delete val; return rtn; #else char * c = getenv(v.c_str()); if(c != NULL) - return (string) c; + return (std::string) c; return ""; #endif } -inline int rc_intern_setEnv(string name, string value, int overwrite) +inline int rc_intern_setEnv(std::string name, std::string value, int overwrite) { #ifdef RC_WINDOWS //string env_cmd = name + "=" + value; @@ -1401,45 +1416,126 @@ inline int rc_intern_setEnv(string name, string value, int overwrite) #endif } -inline string rc_intern_prefPath(string org_name, string app_name) +inline std::string rc_intern_prefPath(std::string org_name, std::string app_name) { - return (string) SDL_GetPrefPath(org_name.c_str(), app_name.c_str()); + return (std::string) SDL_GetPrefPath(org_name.c_str(), app_name.c_str()); } -inline int rc_intern_push_n(double n) + +inline int rc_intern_createStack_N() { - rc_user_n_stack[rc_user_active_n_stack].push(n); - return 1; + int id = -1; + for(int i = 0; i < rc_user_n_stack.size(); i++) + { + if(!rc_user_n_stack[i].active) + { + id = i; + break; + } + } + + if(id < 0) + { + rc_num_stack_obj usr_stack; + usr_stack.active = true; + id = rc_user_n_stack.size(); + rc_user_n_stack.push_back(usr_stack); + } + else + { + while(!rc_user_n_stack[id].data.empty()) + rc_user_n_stack[id].data.pop(); + rc_user_n_stack[id].active = true; + } + + return id; } -inline int rc_intern_push_s(string s) +inline int rc_intern_createStack_S() { - rc_user_s_stack[rc_user_active_s_stack].push(s); - return 1; + int id = -1; + for(int i = 0; i < rc_user_s_stack.size(); i++) + { + if(!rc_user_s_stack[i].active) + { + id = i; + break; + } + } + + if(id < 0) + { + rc_str_stack_obj usr_stack; + usr_stack.active = true; + id = rc_user_s_stack.size(); + rc_user_s_stack.push_back(usr_stack); + } + else + { + while(!rc_user_s_stack[id].data.empty()) + rc_user_s_stack[id].data.pop(); + rc_user_s_stack[id].active = true; + } + + return id; } -inline double rc_intern_pop_n() +inline void rc_intern_clearStack_N( int stack_id ) { - double n = rc_user_n_stack[rc_user_active_n_stack].top(); - rc_user_n_stack[rc_user_active_n_stack].pop(); + while(!rc_user_n_stack[stack_id].data.empty()) + rc_user_n_stack[stack_id].data.pop(); +} + +inline void rc_intern_clearStack_S( int stack_id ) +{ + while(!rc_user_s_stack[stack_id].data.empty()) + rc_user_s_stack[stack_id].data.pop(); +} + +inline void rc_intern_deleteStack_N( int stack_id ) +{ + rc_intern_clearStack_N(stack_id); + rc_user_n_stack[stack_id].active = false; +} + +inline void rc_intern_deleteStack_S( int stack_id ) +{ + rc_intern_clearStack_S(stack_id); + rc_user_s_stack[stack_id].active = false; +} + +inline void rc_intern_push_n( int stack_id, double n) +{ + rc_user_n_stack[stack_id].data.push(n); +} + +inline void rc_intern_push_s( int stack_id, std::string s) +{ + rc_user_s_stack[stack_id].data.push(s); +} + +inline double rc_intern_pop_n( int stack_id ) +{ + double n = rc_user_n_stack[stack_id].data.top(); + rc_user_n_stack[stack_id].data.pop(); return n; } -inline string rc_intern_pop_s() +inline std::string rc_intern_pop_s( int stack_id ) { - string s = rc_user_s_stack[rc_user_active_s_stack].top(); - rc_user_s_stack[rc_user_active_s_stack].pop(); + std::string s = rc_user_s_stack[stack_id].data.top(); + rc_user_s_stack[stack_id].data.pop(); return s; } -inline unsigned long rc_intern_n_stack_size() +inline unsigned long rc_intern_n_stack_size( int stack_id ) { - return rc_user_n_stack[rc_user_active_n_stack].size(); + return rc_user_n_stack[stack_id].data.size(); } -inline unsigned long rc_intern_s_stack_size() +inline unsigned long rc_intern_s_stack_size( int stack_id ) { - return rc_user_s_stack[rc_user_active_s_stack].size(); + return rc_user_s_stack[stack_id].data.size(); } inline void rc_intern_getPowerInfo(double * status, double * secs, double * pct) @@ -1469,12 +1565,12 @@ int rc_intern_systemRam() } #ifdef RC_WEB -string rc_intern_evalJS(string js_code) +std::string rc_intern_evalJS(std::string js_code) { return emscripten_run_script_string(js_code.c_str()); } #else -string rc_intern_evalJS(string js_code) +std::string rc_intern_evalJS(std::string js_code) { return "ONLY IN WEB"; } @@ -1482,7 +1578,7 @@ string rc_intern_evalJS(string js_code) //MOBILE OS STUFF -inline string rc_intern_android_getInternalStoragePath() +inline std::string rc_intern_android_getInternalStoragePath() { #ifdef RC_ANDROID return SDL_AndroidGetInternalStoragePath(); @@ -1491,7 +1587,7 @@ inline string rc_intern_android_getInternalStoragePath() #endif } -inline string rc_intern_android_getExternalStoragePath() +inline std::string rc_intern_android_getExternalStoragePath() { #ifdef RC_ANDROID return SDL_AndroidGetExternalStoragePath(); @@ -1509,7 +1605,7 @@ inline int rc_intern_android_getExternalStorageState() #endif } -string rc_intern_android_jni_message(string arg_c) +std::string rc_intern_android_jni_message(std::string arg_c) { #ifdef RC_ANDROID @@ -1537,7 +1633,7 @@ string rc_intern_android_jni_message(string arg_c) env->DeleteLocalRef(activity); env->DeleteLocalRef(clazz); - return (string)strReturn; + return (std::string)strReturn; #else return ""; @@ -1547,7 +1643,7 @@ string rc_intern_android_jni_message(string arg_c) #ifdef RC_IOS #include "rcbasic_ios_native.h" #else - string rc_intern_runtime_utility(string arg) + std::string rc_intern_runtime_utility(std::string arg) { return ""; } diff --git a/rcbasic_runtime/rc_steam.cpp b/rcbasic_runtime/rc_steam.cpp new file mode 100755 index 0000000..7899add --- /dev/null +++ b/rcbasic_runtime/rc_steam.cpp @@ -0,0 +1,107 @@ +#include "rc_steam.h" + +CSteamAchievements::CSteamAchievements(Achievement_t *Achievements, int NumAchievements): + m_iAppID( 0 ), + m_bInitialized( false ), + m_CallbackUserStatsReceived( this, &CSteamAchievements::OnUserStatsReceived ), + m_CallbackUserStatsStored( this, &CSteamAchievements::OnUserStatsStored ), + m_CallbackAchievementStored( this, &CSteamAchievements::OnAchievementStored ) +{ + m_iAppID = SteamUtils()->GetAppID(); + m_pAchievements = Achievements; + m_iNumAchievements = NumAchievements; + RequestStats(); +} + + +bool CSteamAchievements::RequestStats() +{ + // Is Steam loaded? If not we can't get stats. + if ( NULL == SteamUserStats() || NULL == SteamUser() ) + { + return false; + } + // Is the user logged on? If not we can't get stats. + if ( !SteamUser()->BLoggedOn() ) + { + return false; + } + // Request user stats. + return SteamUserStats()->RequestCurrentStats(); +} + + +bool CSteamAchievements::SetAchievement(const char* ID) +{ + // Have we received a call back from Steam yet? + if (m_bInitialized) + { + SteamUserStats()->SetAchievement(ID); + return SteamUserStats()->StoreStats(); + } + // If not then we can't set achievements yet + return false; +} + + +void CSteamAchievements::OnUserStatsReceived( UserStatsReceived_t *pCallback ) +{ + // we may get callbacks for other games' stats arriving, ignore them + if ( m_iAppID == pCallback->m_nGameID ) + { + if ( k_EResultOK == pCallback->m_eResult ) + { + OutputDebugString("Received stats and achievements from Steam\n"); + m_bInitialized = true; + + // load achievements + for ( int iAch = 0; iAch < m_iNumAchievements; ++iAch ) + { + Achievement_t &ach = m_pAchievements[iAch]; + + SteamUserStats()->GetAchievement(ach.m_pchAchievementID, &ach.m_bAchieved); + _snprintf( ach.m_rgchName, sizeof(ach.m_rgchName), "%s", + SteamUserStats()->GetAchievementDisplayAttribute(ach.m_pchAchievementID, + "name")); + _snprintf( ach.m_rgchDescription, sizeof(ach.m_rgchDescription), "%s", + SteamUserStats()->GetAchievementDisplayAttribute(ach.m_pchAchievementID, + "desc")); + } + } + else + { + char buffer[128]; + _snprintf( buffer, 128, "RequestStats - failed, %d\n", pCallback->m_eResult ); + OutputDebugString( buffer ); + } + } +} + + +void CSteamAchievements::OnUserStatsStored( UserStatsStored_t *pCallback ) +{ + // we may get callbacks for other games' stats arriving, ignore them + if ( m_iAppID == pCallback->m_nGameID ) + { + if ( k_EResultOK == pCallback->m_eResult ) + { + OutputDebugString( "Stored stats for Steam\n" ); + } + else + { + char buffer[128]; + _snprintf( buffer, 128, "StatsStored - failed, %d\n", pCallback->m_eResult ); + OutputDebugString( buffer ); + } + } +} + + +void CSteamAchievements::OnAchievementStored( UserAchievementStored_t *pCallback ) +{ + // we may get callbacks for other games' stats arriving, ignore them + if ( m_iAppID == pCallback->m_nGameID ) + { + OutputDebugString( "Stored Achievement for Steam\n" ); + } +} diff --git a/rcbasic_runtime/rc_steam.h b/rcbasic_runtime/rc_steam.h new file mode 100755 index 0000000..f7329d2 --- /dev/null +++ b/rcbasic_runtime/rc_steam.h @@ -0,0 +1,46 @@ +#ifndef RC_STEAM_H_INCLUDED +#define RC_STEAM_H_INCLUDED + +#include + +#define _ACH_ID( id, name ) { id, #id, name, "", 0, 0 } +struct Achievement_t +{ + int m_eAchievementID; + const char *m_pchAchievementID; + char m_rgchName[128]; + char m_rgchDescription[256]; + bool m_bAchieved; + int m_iIconImage; +}; + + +class CSteamAchievements +{ +private: + int64 m_iAppID; // Our current AppID + Achievement_t *m_pAchievements; // Achievements data + int m_iNumAchievements; // The number of Achievements + bool m_bInitialized; // Have we called Request stats and received the callback? + +public: + CSteamAchievements(Achievement_t *Achievements, int NumAchievements); + ~CSteamAchievements(); + + bool RequestStats(); + bool SetAchievement(const char* ID); + + STEAM_CALLBACK( CSteamAchievements, OnUserStatsReceived, UserStatsReceived_t, + m_CallbackUserStatsReceived ); + STEAM_CALLBACK( CSteamAchievements, OnUserStatsStored, UserStatsStored_t, + m_CallbackUserStatsStored ); + STEAM_CALLBACK( CSteamAchievements, OnAchievementStored, + UserAchievementStored_t, m_CallbackAchievementStored ); +}; + + + + + + +#endif // RC_STEAM_H_INCLUDED diff --git a/rcbasic_runtime/rc_steam_lib.h b/rcbasic_runtime/rc_steam_lib.h new file mode 100755 index 0000000..188f189 --- /dev/null +++ b/rcbasic_runtime/rc_steam_lib.h @@ -0,0 +1,22 @@ +#include + +// Defining our achievements +enum EAchievements +{ + ACH_WIN_ONE_GAME = 0, + ACH_WIN_100_GAMES = 1, + ACH_TRAVEL_FAR_ACCUM = 2, + ACH_TRAVEL_FAR_SINGLE = 3, +}; + +// Achievement array which will hold data about the achievements and their state +Achievement_t g_Achievements[] = +{ + _ACH_ID( ACH_WIN_ONE_GAME, "Winner" ), + _ACH_ID( ACH_WIN_100_GAMES, "Champion" ), + _ACH_ID( ACH_TRAVEL_FAR_ACCUM, "Interstellar" ), + _ACH_ID( ACH_TRAVEL_FAR_SINGLE, "Orbiter" ), +}; + +// Global access to Achievements object +CSteamAchievements* g_SteamAchievements = NULL; diff --git a/rcbasic_runtime/rc_utf8.h b/rcbasic_runtime/rc_utf8.h new file mode 100644 index 0000000..796e49e --- /dev/null +++ b/rcbasic_runtime/rc_utf8.h @@ -0,0 +1,45 @@ +#ifndef RC_UTF8_H_INCLUDED +#define RC_UTF8_H_INCLUDED + +#include +#include + +std::string rc_utf8_substr(const std::string& str, unsigned int start, unsigned int leng) +{ + if (leng==0) { return ""; } + unsigned int c, i, ix, q, min=std::string::npos, max=std::string::npos; + for (q=0, i=0, ix=str.length(); i < ix; i++, q++) + { + if (q==start){ min=i; } + if (q<=start+leng || leng==std::string::npos){ max=i; } + + c = (unsigned char) str[i]; + if ( + //c>=0 && + c<=127) i+=0; + else if ((c & 0xE0) == 0xC0) i+=1; + else if ((c & 0xF0) == 0xE0) i+=2; + else if ((c & 0xF8) == 0xF0) i+=3; + //else if (($c & 0xFC) == 0xF8) i+=4; // 111110bb //byte 5, unnecessary in 4 byte UTF-8 + //else if (($c & 0xFE) == 0xFC) i+=5; // 1111110b //byte 6, unnecessary in 4 byte UTF-8 + else return "";//invalid utf8 + } + if (q<=start+leng || leng==std::string::npos){ max=i; } + if (min==std::string::npos || max==std::string::npos) { return ""; } + return str.substr(min,max-min); +} + +std::size_t rc_utf8_length(std::string const &s) +{ + return std::count_if(s.begin(), s.end(), + [](char c) { return (static_cast(c) & 0xC0) != 0x80; } ); +} + +// convert UTF-8 string to wstring +std::wstring utf8_to_wstring (const std::string& str) +{ + std::wstring_convert> myconv; + return myconv.from_bytes(str); +} + +#endif // RC_UTF8_H_INCLUDED