Added new vector math functions

This commit is contained in:
n00b87
2026-02-22 23:07:53 -06:00
parent c4d559f0d4
commit 902f0129f1
16 changed files with 2782 additions and 2270 deletions

View File

@@ -39,6 +39,7 @@ Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_physics.bas
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/constraint3D.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/camera.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/scene.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/billboard.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/particles.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/lights.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/terrain.bas"

View File

@@ -53,6 +53,14 @@ Distance2D( DISTANCE2D_X1, DISTANCE2D_Y1, DISTANCE2D_X2, DISTANCE2D_Y2 )
Distance3D( DISTANCE3D_X1, DISTANCE3D_Y1, DISTANCE3D_Z1, DISTANCE3D_X2, DISTANCE3D_Y2, DISTANCE3D_Z2 )
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 )
GetLinePlaneIntersection( &GETLINEPLANEINTERSECTION_LINE_POINT, &GETLINEPLANEINTERSECTION_LINE_DIRECTION, &GETLINEPLANEINTERSECTION_PLANE_POINT_1, &GETLINEPLANEINTERSECTION_PLANE_POINT_2, &GETLINEPLANEINTERSECTION_PLANE_POINT_3, &GETLINEPLANEINTERSECTION_INTERSECTION )
rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 )
rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 )
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ )
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ )
rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z )
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ )
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ )
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ )
rc_intern_asc( ASC_C$ )
rc_intern_chr( CHR$_N )
rc_intern_insert( INSERT$_SRC$, INSERT$_TGT$, INSERT$_POS )
@@ -978,6 +986,8 @@ rc_pipeline_End( )
rc_pipeline_Render( )
rc_setPhysics3D( SETPHYSICS3D_FLAG )
rc_getPhysics3D( )
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H )
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H )
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR )
rc_stopParticleEmitter( STOPPARTICLEEMITTER_ACTOR )
rc_setParticleDirection( SETPARTICLEDIRECTION_ACTOR, SETPARTICLEDIRECTION_X, SETPARTICLEDIRECTION_Y, SETPARTICLEDIRECTION_Z )

View File

@@ -0,0 +1,2 @@
Sub GetBillboardSize(actor, ByRef w, ByRef h)
Sub SetBillboardSize(actor, w, h)

View File

@@ -35,3 +35,11 @@ Function Distance2D(x1, y1, x2, y2)
Function Distance3D(x1, y1, z1, x2, y2, z2)
function GetCircleLineIntersection(circle_x, circle_y, radius, x1, y1, x2, y2, ByRef ix1, ByRef iy1, ByRef ix2, ByRef iy2)
function GetLinePlaneIntersection(ByRef line_point, ByRef line_direction, ByRef plane_point_1, ByRef plane_point_2, ByRef plane_point_3, ByRef intersection)
Function GetLineAngle(x1, y1, x2, y2)
Function DotProduct(x1, y1, z1, x2, y2, z2)
Sub InterpolateVector(x1, y1, z1, x2, y2, z2, distance, ByRef ix, ByRef iy, ByRef iz)
Sub InterpolateVectorQ(x1, y1, z1, x2, y2, z2, x3, y3, z3, distance, ByRef ix, ByRef iy, ByRef iz)
Function VectorIsBetweenPoints(x, y, z, start_x, start_y, start_z, end_x, end_y, end_z)
Sub NormalizeVector(x, y, z, ByRef nx, ByRef ny, ByRef nz)
Sub GetHorizontalAngle(x, y, z, ByRef hx, ByRef hy, ByRef hz)
Sub GetRotationToTarget(x, y, z, tgt_x, tgt_y, tgt_z, ByRef rx, ByRef ry, ByRef rz)

View File

@@ -184,6 +184,77 @@ void init_embedded_functions()
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("GetLineAngle", 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("DotProduct", 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("InterpolateVector", ID_TYPE_SUB);
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);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("InterpolateVectorQ", ID_TYPE_SUB);
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);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_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("start_x", ID_TYPE_NUM);
add_embedded_arg("start_y", ID_TYPE_NUM);
add_embedded_arg("start_z", ID_TYPE_NUM);
add_embedded_arg("end_x", ID_TYPE_NUM);
add_embedded_arg("end_y", ID_TYPE_NUM);
add_embedded_arg("end_z", ID_TYPE_NUM);
embed_function("NormalizeVector", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
embed_function("GetRotationToTarget", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("tgt_x", ID_TYPE_NUM);
add_embedded_arg("tgt_y", ID_TYPE_NUM);
add_embedded_arg("tgt_z", ID_TYPE_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("Asc", ID_TYPE_FN_NUM);
add_embedded_arg("c$", ID_TYPE_STR);
embed_function("Chr$", ID_TYPE_FN_STR);
@@ -3078,6 +3149,14 @@ void init_embedded_functions()
embed_function("SetPhysics3D", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
embed_function("GetBillboardSize", 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("SetBillboardSize", 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("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

Binary file not shown.

View File

@@ -178,6 +178,77 @@ 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("GetLineAngle", 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("DotProduct", 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("InterpolateVector", ID_TYPE_SUB);
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);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("InterpolateVectorQ", ID_TYPE_SUB);
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);
add_embedded_arg("x3", ID_TYPE_NUM);
add_embedded_arg("y3", ID_TYPE_NUM);
add_embedded_arg("z3", ID_TYPE_NUM);
add_embedded_arg("distance", ID_TYPE_NUM);
add_embedded_arg("ix", ID_TYPE_BYREF_NUM);
add_embedded_arg("iy", ID_TYPE_BYREF_NUM);
add_embedded_arg("iz", ID_TYPE_BYREF_NUM);
embed_function("VectorIsBetweenPoints", ID_TYPE_FN_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("start_x", ID_TYPE_NUM);
add_embedded_arg("start_y", ID_TYPE_NUM);
add_embedded_arg("start_z", ID_TYPE_NUM);
add_embedded_arg("end_x", ID_TYPE_NUM);
add_embedded_arg("end_y", ID_TYPE_NUM);
add_embedded_arg("end_z", ID_TYPE_NUM);
embed_function("NormalizeVector", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("nx", ID_TYPE_BYREF_NUM);
add_embedded_arg("ny", ID_TYPE_BYREF_NUM);
add_embedded_arg("nz", ID_TYPE_BYREF_NUM);
embed_function("GetHorizontalAngle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("hx", ID_TYPE_BYREF_NUM);
add_embedded_arg("hy", ID_TYPE_BYREF_NUM);
add_embedded_arg("hz", ID_TYPE_BYREF_NUM);
embed_function("GetRotationToTarget", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
add_embedded_arg("z", ID_TYPE_NUM);
add_embedded_arg("tgt_x", ID_TYPE_NUM);
add_embedded_arg("tgt_y", ID_TYPE_NUM);
add_embedded_arg("tgt_z", ID_TYPE_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("Asc", ID_TYPE_FN_NUM);
add_embedded_arg("c$", ID_TYPE_STR);
embed_function("Chr$", ID_TYPE_FN_STR);
@@ -3072,6 +3143,14 @@ embed_function("Pipeline_Render", ID_TYPE_SUB);
embed_function("SetPhysics3D", ID_TYPE_SUB);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("GetPhysics3D", ID_TYPE_FN_NUM);
embed_function("GetBillboardSize", 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("SetBillboardSize", 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("startParticleEmitter", ID_TYPE_SUB);
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("stopParticleEmitter", ID_TYPE_SUB);

File diff suppressed because it is too large Load Diff

View File

@@ -190,6 +190,30 @@ case FN_GetCircleLineIntersection: //Number Function
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_GetLineAngle: //Number Function
rc_push_num(rc_getLineAngle( GETLINEANGLE_X1, GETLINEANGLE_Y1, GETLINEANGLE_X2, GETLINEANGLE_Y2 ));
break;
case FN_DotProduct: //Number Function
rc_push_num(rc_dotProduct( DOTPRODUCT_X1, DOTPRODUCT_Y1, DOTPRODUCT_Z1, DOTPRODUCT_X2, DOTPRODUCT_Y2, DOTPRODUCT_Z2 ));
break;
case FN_InterpolateVector: //Sub Procedure
rc_interpolateVector( INTERPOLATEVECTOR_X1, INTERPOLATEVECTOR_Y1, INTERPOLATEVECTOR_Z1, INTERPOLATEVECTOR_X2, INTERPOLATEVECTOR_Y2, INTERPOLATEVECTOR_Z2, INTERPOLATEVECTOR_DISTANCE, &INTERPOLATEVECTOR_IX, &INTERPOLATEVECTOR_IY, &INTERPOLATEVECTOR_IZ );
break;
case FN_InterpolateVectorQ: //Sub Procedure
rc_interpolateVectorQ( INTERPOLATEVECTORQ_X1, INTERPOLATEVECTORQ_Y1, INTERPOLATEVECTORQ_Z1, INTERPOLATEVECTORQ_X2, INTERPOLATEVECTORQ_Y2, INTERPOLATEVECTORQ_Z2, INTERPOLATEVECTORQ_X3, INTERPOLATEVECTORQ_Y3, INTERPOLATEVECTORQ_Z3, INTERPOLATEVECTORQ_DISTANCE, &INTERPOLATEVECTORQ_IX, &INTERPOLATEVECTORQ_IY, &INTERPOLATEVECTORQ_IZ );
break;
case FN_VectorIsBetweenPoints: //Number Function
rc_push_num(rc_vectorIsBetweenPoints( VECTORISBETWEENPOINTS_X, VECTORISBETWEENPOINTS_Y, VECTORISBETWEENPOINTS_Z, VECTORISBETWEENPOINTS_START_X, VECTORISBETWEENPOINTS_START_Y, VECTORISBETWEENPOINTS_START_Z, VECTORISBETWEENPOINTS_END_X, VECTORISBETWEENPOINTS_END_Y, VECTORISBETWEENPOINTS_END_Z ));
break;
case FN_NormalizeVector: //Sub Procedure
rc_normalizeVector( NORMALIZEVECTOR_X, NORMALIZEVECTOR_Y, NORMALIZEVECTOR_Z, &NORMALIZEVECTOR_NX, &NORMALIZEVECTOR_NY, &NORMALIZEVECTOR_NZ );
break;
case FN_GetHorizontalAngle: //Sub Procedure
rc_getHorizontalAngle( GETHORIZONTALANGLE_X, GETHORIZONTALANGLE_Y, GETHORIZONTALANGLE_Z, &GETHORIZONTALANGLE_HX, &GETHORIZONTALANGLE_HY, &GETHORIZONTALANGLE_HZ );
break;
case FN_GetRotationToTarget: //Sub Procedure
rc_getRotationToTarget( GETROTATIONTOTARGET_X, GETROTATIONTOTARGET_Y, GETROTATIONTOTARGET_Z, GETROTATIONTOTARGET_TGT_X, GETROTATIONTOTARGET_TGT_Y, GETROTATIONTOTARGET_TGT_Z, &GETROTATIONTOTARGET_RX, &GETROTATIONTOTARGET_RY, &GETROTATIONTOTARGET_RZ );
break;
case FN_Asc: //Number Function
rc_push_num(rc_intern_asc( ASC_C$ ));
break;
@@ -2966,6 +2990,12 @@ case FN_SetPhysics3D: //Sub Procedure
case FN_GetPhysics3D: //Number Function
rc_push_num(rc_getPhysics3D( ));
break;
case FN_GetBillboardSize: //Sub Procedure
rc_getBillboardSize( GETBILLBOARDSIZE_ACTOR, &GETBILLBOARDSIZE_W, &GETBILLBOARDSIZE_H );
break;
case FN_SetBillboardSize: //Sub Procedure
rc_setBillboardSize( SETBILLBOARDSIZE_ACTOR, SETBILLBOARDSIZE_W, SETBILLBOARDSIZE_H );
break;
case FN_startParticleEmitter: //Sub Procedure
rc_startParticleEmitter( STARTPARTICLEEMITTER_ACTOR );
break;