From 8f1b72a8e2dd9ad5187a21c0582e792b97ede4a4 Mon Sep 17 00:00:00 2001
From: n00b
Date: Sun, 27 Oct 2024 23:24:37 -0400
Subject: [PATCH] Added Sprite Physics and Joints
---
doc/doc_files/loadmesh.html | 95 +
doc/doc_files/loadmeshfromarchive.html | 95 +
doc/doc_files/nav_bottom.html | 287 +-
doc/doc_files/rc_cover_page.html | 19 +
doc/files/applyspriteangularimpulse.txt | 4 +
doc/files/applyspritecentralforce.txt | 4 +
doc/files/applyspriteforce.txt | 4 +
doc/files/applyspritelinearimpulse.txt | 4 +
doc/files/applyspritetorque.txt | 4 +
doc/files/conditions.txt | 2 +-
doc/files/createdistancejoint.txt | 4 +
doc/files/createfrictionjoint.txt | 4 +
doc/files/creategearjoint.txt | 4 +
doc/files/createmotorjoint.txt | 4 +
doc/files/createprismaticjoint.txt | 4 +
doc/files/createpulleyjoint.txt | 4 +
doc/files/createrevolutejoint.txt | 4 +
doc/files/createweldjoint.txt | 4 +
doc/files/createwheeljoint.txt | 4 +
doc/files/enablejointlimit.txt | 4 +
doc/files/enablejointmotor.txt | 4 +
doc/files/getactorcenter.txt | 4 +
doc/files/getactorcomposition.txt | 4 -
doc/files/getactorvelocityinlocalpoint.txt | 4 +
doc/files/getjointangle.txt | 4 +
doc/files/getjointangularoffset.txt | 4 +
doc/files/getjointangularspeed.txt | 4 +
doc/files/getjointcorrectionfactor.txt | 4 +
doc/files/getjointcurrentlength.txt | 4 +
doc/files/getjointcurrentlengtha.txt | 4 +
doc/files/getjointcurrentlengthb.txt | 4 +
doc/files/getjointdamping.txt | 4 +
doc/files/getjointgroundanchora.txt | 4 +
doc/files/getjointgroundanchorb.txt | 4 +
doc/files/getjointlength.txt | 4 +
doc/files/getjointlengtha.txt | 4 +
doc/files/getjointlengthb.txt | 4 +
doc/files/getjointlinearoffset.txt | 4 +
doc/files/getjointlinearspeed.txt | 4 +
doc/files/getjointlocalanchora.txt | 4 +
doc/files/getjointlocalanchorb.txt | 4 +
doc/files/getjointlocalaxisa.txt | 4 +
doc/files/getjointlowerlimit.txt | 4 +
doc/files/getjointmaxforce.txt | 4 +
doc/files/getjointmaxlength.txt | 4 +
doc/files/getjointmaxmotorforce.txt | 4 +
doc/files/getjointmaxmotortorque.txt | 4 +
doc/files/getjointmaxtorque.txt | 4 +
doc/files/getjointminlength.txt | 4 +
doc/files/getjointmotorforce.txt | 4 +
doc/files/getjointmotorspeed.txt | 4 +
doc/files/getjointmotortorque.txt | 4 +
doc/files/getjointratio.txt | 4 +
doc/files/getjointreactionforce.txt | 4 +
doc/files/getjointreactiontorque.txt | 4 +
doc/files/getjointreferenceangle.txt | 4 +
doc/files/getjointspeed.txt | 4 +
doc/files/getjointstiffness.txt | 4 +
doc/files/getjointtranslation.txt | 4 +
doc/files/getjointupperlimit.txt | 4 +
doc/files/getjointworldanchora.txt | 4 +
doc/files/getjointworldanchorb.txt | 4 +
doc/files/getspriteangulardamping.txt | 4 +
doc/files/getspriteangularvelocity.txt | 4 +
doc/files/getspritecenter.txt | 4 +
doc/files/getspritegravityscale.txt | 4 +
doc/files/getspriteinertia.txt | 4 +
doc/files/getspritelineardamping.txt | 4 +
doc/files/getspritelinearvelocity.txt | 4 +
.../getspritelinearvelocityfromlocalpoint.txt | 4 +
.../getspritelinearvelocityfromworldpoint.txt | 4 +
doc/files/getspritelocalpoint.txt | 4 +
doc/files/getspritelocalvector.txt | 4 +
doc/files/getspritemass.txt | 4 +
doc/files/getspriteworldpoint.txt | 4 +
doc/files/getspriteworldvector.txt | 4 +
doc/files/jointislimitenabled.txt | 4 +
doc/files/jointmotorisenabled.txt | 4 +
doc/files/setjointangularoffset.txt | 4 +
doc/files/setjointcorrectionfactor.txt | 4 +
doc/files/setjointdamping.txt | 4 +
doc/files/setjointlength.txt | 4 +
doc/files/setjointlimits.txt | 4 +
doc/files/setjointlinearoffset.txt | 4 +
doc/files/setjointmaxforce.txt | 4 +
doc/files/setjointmaxlength.txt | 4 +
doc/files/setjointmaxmotorforce.txt | 4 +
doc/files/setjointmaxmotortorque.txt | 4 +
doc/files/setjointmaxtorque.txt | 4 +
doc/files/setjointminlength.txt | 4 +
doc/files/setjointmotorspeed.txt | 4 +
doc/files/setjointorigin.txt | 4 +
doc/files/setjointratio.txt | 4 +
doc/files/setjointstiffness.txt | 4 +
doc/files/setspriteangulardamping.txt | 4 +
doc/files/setspriteangularvelocity.txt | 4 +
doc/files/setspriteawake.txt | 4 +
doc/files/setspritebullet.txt | 4 +
doc/files/setspritefixedrotation.txt | 4 +
doc/files/setspritegravityscale.txt | 4 +
doc/files/setspritelineardamping.txt | 4 +
doc/files/setspritelinearvelocity.txt | 4 +
doc/files/setspritesleepallowed.txt | 4 +
doc/files/spriteisawake.txt | 4 +
doc/files/spriteisbullet.txt | 4 +
doc/files/spriteisfixedrotation.txt | 4 +
doc/files/spritesleepallowed.txt | 4 +
rc_sprite_physics.h | 185 -
rcbasic_build/embedded_functions.bas | 2 +-
rcbasic_build/intern_inc/switch_cases.h | 133 +-
rcbasic_build/intern_lib/actor_physics.bas | 4 +-
rcbasic_build/intern_lib/joint2D.bas | 67 +
rcbasic_build/intern_lib/sprite_physics.bas | 32 +
rcbasic_build/rc_builtin.h | 495 ++-
rcbasic_build/rcbasic4_changes.ods | Bin 16844492 -> 16878651 bytes
rcbasic_build/rcbasic_dev.txt | 495 ++-
rcbasic_build/rcbasic_dev2.txt | 1241 ++++---
rcbasic_build/rcbasic_dev3.txt | 439 ++-
rcbasic_runtime/rc_defines.h | 1241 ++++---
rcbasic_runtime/rc_func130_cases.h | 2962 +++++++++++++++++
rcbasic_runtime/rc_gfx3D.h | 4 +-
rcbasic_runtime/rc_joints.h | 1891 +++++++++++
rcbasic_runtime/rc_sprite2D.h | 20 +
rcbasic_runtime/rc_sprite_physics.h | 367 ++
rcbasic_runtime/rc_spritelib.h | 3 +
125 files changed, 9264 insertions(+), 1223 deletions(-)
create mode 100644 doc/doc_files/loadmesh.html
create mode 100644 doc/doc_files/loadmeshfromarchive.html
create mode 100755 doc/doc_files/rc_cover_page.html
create mode 100644 doc/files/applyspriteangularimpulse.txt
create mode 100644 doc/files/applyspritecentralforce.txt
create mode 100644 doc/files/applyspriteforce.txt
create mode 100644 doc/files/applyspritelinearimpulse.txt
create mode 100644 doc/files/applyspritetorque.txt
create mode 100644 doc/files/createdistancejoint.txt
create mode 100644 doc/files/createfrictionjoint.txt
create mode 100644 doc/files/creategearjoint.txt
create mode 100644 doc/files/createmotorjoint.txt
create mode 100644 doc/files/createprismaticjoint.txt
create mode 100644 doc/files/createpulleyjoint.txt
create mode 100644 doc/files/createrevolutejoint.txt
create mode 100644 doc/files/createweldjoint.txt
create mode 100644 doc/files/createwheeljoint.txt
create mode 100644 doc/files/enablejointlimit.txt
create mode 100644 doc/files/enablejointmotor.txt
create mode 100644 doc/files/getactorcenter.txt
delete mode 100644 doc/files/getactorcomposition.txt
create mode 100644 doc/files/getactorvelocityinlocalpoint.txt
create mode 100644 doc/files/getjointangle.txt
create mode 100644 doc/files/getjointangularoffset.txt
create mode 100644 doc/files/getjointangularspeed.txt
create mode 100644 doc/files/getjointcorrectionfactor.txt
create mode 100644 doc/files/getjointcurrentlength.txt
create mode 100644 doc/files/getjointcurrentlengtha.txt
create mode 100644 doc/files/getjointcurrentlengthb.txt
create mode 100644 doc/files/getjointdamping.txt
create mode 100644 doc/files/getjointgroundanchora.txt
create mode 100644 doc/files/getjointgroundanchorb.txt
create mode 100644 doc/files/getjointlength.txt
create mode 100644 doc/files/getjointlengtha.txt
create mode 100644 doc/files/getjointlengthb.txt
create mode 100644 doc/files/getjointlinearoffset.txt
create mode 100644 doc/files/getjointlinearspeed.txt
create mode 100644 doc/files/getjointlocalanchora.txt
create mode 100644 doc/files/getjointlocalanchorb.txt
create mode 100644 doc/files/getjointlocalaxisa.txt
create mode 100644 doc/files/getjointlowerlimit.txt
create mode 100644 doc/files/getjointmaxforce.txt
create mode 100644 doc/files/getjointmaxlength.txt
create mode 100644 doc/files/getjointmaxmotorforce.txt
create mode 100644 doc/files/getjointmaxmotortorque.txt
create mode 100644 doc/files/getjointmaxtorque.txt
create mode 100644 doc/files/getjointminlength.txt
create mode 100644 doc/files/getjointmotorforce.txt
create mode 100644 doc/files/getjointmotorspeed.txt
create mode 100644 doc/files/getjointmotortorque.txt
create mode 100644 doc/files/getjointratio.txt
create mode 100644 doc/files/getjointreactionforce.txt
create mode 100644 doc/files/getjointreactiontorque.txt
create mode 100644 doc/files/getjointreferenceangle.txt
create mode 100644 doc/files/getjointspeed.txt
create mode 100644 doc/files/getjointstiffness.txt
create mode 100644 doc/files/getjointtranslation.txt
create mode 100644 doc/files/getjointupperlimit.txt
create mode 100644 doc/files/getjointworldanchora.txt
create mode 100644 doc/files/getjointworldanchorb.txt
create mode 100644 doc/files/getspriteangulardamping.txt
create mode 100644 doc/files/getspriteangularvelocity.txt
create mode 100644 doc/files/getspritecenter.txt
create mode 100644 doc/files/getspritegravityscale.txt
create mode 100644 doc/files/getspriteinertia.txt
create mode 100644 doc/files/getspritelineardamping.txt
create mode 100644 doc/files/getspritelinearvelocity.txt
create mode 100644 doc/files/getspritelinearvelocityfromlocalpoint.txt
create mode 100644 doc/files/getspritelinearvelocityfromworldpoint.txt
create mode 100644 doc/files/getspritelocalpoint.txt
create mode 100644 doc/files/getspritelocalvector.txt
create mode 100644 doc/files/getspritemass.txt
create mode 100644 doc/files/getspriteworldpoint.txt
create mode 100644 doc/files/getspriteworldvector.txt
create mode 100644 doc/files/jointislimitenabled.txt
create mode 100644 doc/files/jointmotorisenabled.txt
create mode 100644 doc/files/setjointangularoffset.txt
create mode 100644 doc/files/setjointcorrectionfactor.txt
create mode 100644 doc/files/setjointdamping.txt
create mode 100644 doc/files/setjointlength.txt
create mode 100644 doc/files/setjointlimits.txt
create mode 100644 doc/files/setjointlinearoffset.txt
create mode 100644 doc/files/setjointmaxforce.txt
create mode 100644 doc/files/setjointmaxlength.txt
create mode 100644 doc/files/setjointmaxmotorforce.txt
create mode 100644 doc/files/setjointmaxmotortorque.txt
create mode 100644 doc/files/setjointmaxtorque.txt
create mode 100644 doc/files/setjointminlength.txt
create mode 100644 doc/files/setjointmotorspeed.txt
create mode 100644 doc/files/setjointorigin.txt
create mode 100644 doc/files/setjointratio.txt
create mode 100644 doc/files/setjointstiffness.txt
create mode 100644 doc/files/setspriteangulardamping.txt
create mode 100644 doc/files/setspriteangularvelocity.txt
create mode 100644 doc/files/setspriteawake.txt
create mode 100644 doc/files/setspritebullet.txt
create mode 100644 doc/files/setspritefixedrotation.txt
create mode 100644 doc/files/setspritegravityscale.txt
create mode 100644 doc/files/setspritelineardamping.txt
create mode 100644 doc/files/setspritelinearvelocity.txt
create mode 100644 doc/files/setspritesleepallowed.txt
create mode 100644 doc/files/spriteisawake.txt
create mode 100644 doc/files/spriteisbullet.txt
create mode 100644 doc/files/spriteisfixedrotation.txt
create mode 100644 doc/files/spritesleepallowed.txt
delete mode 100644 rc_sprite_physics.h
create mode 100644 rcbasic_runtime/rc_joints.h
create mode 100644 rcbasic_runtime/rc_sprite_physics.h
diff --git a/doc/doc_files/loadmesh.html b/doc/doc_files/loadmesh.html
new file mode 100644
index 0000000..70bc16d
--- /dev/null
+++ b/doc/doc_files/loadmesh.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+ LoadMesh [RCBasic Doc]
+
+
+
+
function LoadMesh( mesh_file$ )
+
+ Returns a mesh id for the loaded mesh
+
+
+ Supported formats
+
+
+
+ Animated objects:
+
+
+ B3D files (.b3d, r, skeleton)
+
+
+ Microsoft DirectX (.x, r) (binary & text, skeleton)
+
+
+ Milkshape (.ms3d, r, skeleton)
+
+
+ Quake 3 models (.md3, r, morph)
+
+
+ Quake 2 models (.md2, r, morph)
+
+
+
+
+ Static objects:
+
+
+ Irrlicht scenes (.irr, r/w)
+
+
+ Irrlicht static meshes (.irrmesh, r/w)
+
+
+ 3D Studio meshes (.3ds, r)
+
+
+ Alias Wavefront Maya (.obj, r/w)
+
+
+ Lightwave Objects (.lwo, r)
+
+
+ COLLADA 1.4 (.xml, .dae, r/w)
+
+
+ OGRE meshes (.mesh, r)
+
+
+ My3DTools 3 (.my3D, r)
+
+
+ Pulsar LMTools (.lmts, r)
+
+
+ Quake 3 levels (.bsp, r)
+
+
+ DeleD (.dmf, r)
+
+
+ FSRad oct (.oct, r)
+
+
+ Cartography shop 4 (.csm, r)
+
+
+ STL 3D files (.stl, r/w)
+
+
+ PLY 3D files (.ply, r/w)
+
+
+
+
+ Related:
+ LoadMeshFromArchive
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/doc_files/loadmeshfromarchive.html b/doc/doc_files/loadmeshfromarchive.html
new file mode 100644
index 0000000..52eb137
--- /dev/null
+++ b/doc/doc_files/loadmeshfromarchive.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+ LoadMeshFromArchive [RCBasic Doc]
+
+
+
+
function LoadMeshFromArchive( archive$, mesh_file$ )
+
+ Returns a mesh id for the loaded mesh from an archive (*.zip, *.pak, etc.)
+
+
+ Supported formats
+
+
+
+ Animated objects:
+
+
+ B3D files (.b3d, r, skeleton)
+
+
+ Microsoft DirectX (.x, r) (binary & text, skeleton)
+
+
+ Milkshape (.ms3d, r, skeleton)
+
+
+ Quake 3 models (.md3, r, morph)
+
+
+ Quake 2 models (.md2, r, morph)
+
+
+
+
+ Static objects:
+
+
+ Irrlicht scenes (.irr, r/w)
+
+
+ Irrlicht static meshes (.irrmesh, r/w)
+
+
+ 3D Studio meshes (.3ds, r)
+
+
+ Alias Wavefront Maya (.obj, r/w)
+
+
+ Lightwave Objects (.lwo, r)
+
+
+ COLLADA 1.4 (.xml, .dae, r/w)
+
+
+ OGRE meshes (.mesh, r)
+
+
+ My3DTools 3 (.my3D, r)
+
+
+ Pulsar LMTools (.lmts, r)
+
+
+ Quake 3 levels (.bsp, r)
+
+
+ DeleD (.dmf, r)
+
+
+ FSRad oct (.oct, r)
+
+
+ Cartography shop 4 (.csm, r)
+
+
+ STL 3D files (.stl, r/w)
+
+
+ PLY 3D files (.ply, r/w)
+
+
+
+
+ Related:
+ LoadMesh
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/doc_files/nav_bottom.html b/doc/doc_files/nav_bottom.html
index 1c5550a..a8769dc 100644
--- a/doc/doc_files/nav_bottom.html
+++ b/doc/doc_files/nav_bottom.html
@@ -3,7 +3,74 @@
-
+
RCBasic Library Reference
@@ -1187,6 +1254,220 @@
DeleteSpriteAnimation
+
+
+
+
+
+
+
@@ -1438,7 +1719,7 @@
updateActorInertiaTensor
-getActorCOMPosition
+getActorCenter
getActorRotationQ
@@ -1454,7 +1735,7 @@
setActorAngularVelocityWorld
-getActorLocalPointVelocity
+getActorVelocityInLocalPoint
getActorLinearVelocityLocal
diff --git a/doc/doc_files/rc_cover_page.html b/doc/doc_files/rc_cover_page.html
new file mode 100755
index 0000000..0b8d669
--- /dev/null
+++ b/doc/doc_files/rc_cover_page.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ RC BASIC Title
+
+
+
+
+
+
+
RC BASIC
+
+
+
+
+ The Revolution will be written in BASIC
+
diff --git a/doc/files/applyspriteangularimpulse.txt b/doc/files/applyspriteangularimpulse.txt
new file mode 100644
index 0000000..f882dcd
--- /dev/null
+++ b/doc/files/applyspriteangularimpulse.txt
@@ -0,0 +1,4 @@
+#title applySpriteAngularImpulse [RCBasic Doc]
+#header sub applySpriteAngularImpulse( spr_id, impulse)
+
+
diff --git a/doc/files/applyspritecentralforce.txt b/doc/files/applyspritecentralforce.txt
new file mode 100644
index 0000000..936b36e
--- /dev/null
+++ b/doc/files/applyspritecentralforce.txt
@@ -0,0 +1,4 @@
+#title applySpriteCentralForce [RCBasic Doc]
+#header sub applySpriteCentralForce( spr_id, x, y)
+
+
diff --git a/doc/files/applyspriteforce.txt b/doc/files/applyspriteforce.txt
new file mode 100644
index 0000000..e8a1d5b
--- /dev/null
+++ b/doc/files/applyspriteforce.txt
@@ -0,0 +1,4 @@
+#title applySpriteForce [RCBasic Doc]
+#header sub applySpriteForce( spr_id, fX, fY, pX, pY)
+
+
diff --git a/doc/files/applyspritelinearimpulse.txt b/doc/files/applyspritelinearimpulse.txt
new file mode 100644
index 0000000..278cd4b
--- /dev/null
+++ b/doc/files/applyspritelinearimpulse.txt
@@ -0,0 +1,4 @@
+#title applySpriteLinearImpulse [RCBasic Doc]
+#header sub applySpriteLinearImpulse( spr_id, iX, iY, pX, pY)
+
+
diff --git a/doc/files/applyspritetorque.txt b/doc/files/applyspritetorque.txt
new file mode 100644
index 0000000..bf166de
--- /dev/null
+++ b/doc/files/applyspritetorque.txt
@@ -0,0 +1,4 @@
+#title applySpriteTorque [RCBasic Doc]
+#header sub applySpriteTorque( spr_id, torque)
+
+
diff --git a/doc/files/conditions.txt b/doc/files/conditions.txt
index 261e49a..a6fb6b6 100644
--- a/doc/files/conditions.txt
+++ b/doc/files/conditions.txt
@@ -32,7 +32,7 @@ The above example will compare each case in the block to the SELECT CASE .
#code
Select Case 5
Case 6
- Print THIS WILL NOT PRINT"
+ Print "THIS WILL NOT PRINT"
Case 4, 5
Print "THIS WILL PRINT"
Default
diff --git a/doc/files/createdistancejoint.txt b/doc/files/createdistancejoint.txt
new file mode 100644
index 0000000..9538834
--- /dev/null
+++ b/doc/files/createdistancejoint.txt
@@ -0,0 +1,4 @@
+#title createDistanceJoint [RCBasic Doc]
+#header function createDistanceJoint( spriteA, spriteB, aX, aY, bX, bY)
+
+
diff --git a/doc/files/createfrictionjoint.txt b/doc/files/createfrictionjoint.txt
new file mode 100644
index 0000000..84ac12c
--- /dev/null
+++ b/doc/files/createfrictionjoint.txt
@@ -0,0 +1,4 @@
+#title createFrictionJoint [RCBasic Doc]
+#header function createFrictionJoint( spriteA, spriteB, x, y)
+
+
diff --git a/doc/files/creategearjoint.txt b/doc/files/creategearjoint.txt
new file mode 100644
index 0000000..174169e
--- /dev/null
+++ b/doc/files/creategearjoint.txt
@@ -0,0 +1,4 @@
+#title createGearJoint [RCBasic Doc]
+#header function createGearJoint( jointA, jointB, g_ratio)
+
+
diff --git a/doc/files/createmotorjoint.txt b/doc/files/createmotorjoint.txt
new file mode 100644
index 0000000..b6dcba1
--- /dev/null
+++ b/doc/files/createmotorjoint.txt
@@ -0,0 +1,4 @@
+#title createMotorJoint [RCBasic Doc]
+#header function createMotorJoint( spriteA, spriteB)
+
+
diff --git a/doc/files/createprismaticjoint.txt b/doc/files/createprismaticjoint.txt
new file mode 100644
index 0000000..59851a9
--- /dev/null
+++ b/doc/files/createprismaticjoint.txt
@@ -0,0 +1,4 @@
+#title createPrismaticJoint [RCBasic Doc]
+#header function createPrismaticJoint( spriteA, spriteB, aX, aY, axisX, axisY)
+
+
diff --git a/doc/files/createpulleyjoint.txt b/doc/files/createpulleyjoint.txt
new file mode 100644
index 0000000..9c4a9f4
--- /dev/null
+++ b/doc/files/createpulleyjoint.txt
@@ -0,0 +1,4 @@
+#title createPulleyJoint [RCBasic Doc]
+#header function createPulleyJoint( spriteA, spriteB, gaX, gaY, gbX, gbY, aX, aY, bX, bY, j_ratio)
+
+
diff --git a/doc/files/createrevolutejoint.txt b/doc/files/createrevolutejoint.txt
new file mode 100644
index 0000000..0a8e414
--- /dev/null
+++ b/doc/files/createrevolutejoint.txt
@@ -0,0 +1,4 @@
+#title createRevoluteJoint [RCBasic Doc]
+#header function createRevoluteJoint( spriteA, spriteB, x, y)
+
+
diff --git a/doc/files/createweldjoint.txt b/doc/files/createweldjoint.txt
new file mode 100644
index 0000000..3858515
--- /dev/null
+++ b/doc/files/createweldjoint.txt
@@ -0,0 +1,4 @@
+#title createWeldJoint [RCBasic Doc]
+#header function createWeldJoint( spriteA, spriteB, x, y)
+
+
diff --git a/doc/files/createwheeljoint.txt b/doc/files/createwheeljoint.txt
new file mode 100644
index 0000000..d2a0871
--- /dev/null
+++ b/doc/files/createwheeljoint.txt
@@ -0,0 +1,4 @@
+#title createWheelJoint [RCBasic Doc]
+#header function createWheelJoint( spriteA, spriteB, aX, aY, axisX, axisY)
+
+
diff --git a/doc/files/enablejointlimit.txt b/doc/files/enablejointlimit.txt
new file mode 100644
index 0000000..b891e32
--- /dev/null
+++ b/doc/files/enablejointlimit.txt
@@ -0,0 +1,4 @@
+#title enableJointLimit [RCBasic Doc]
+#header sub enableJointLimit( joint_id, flag)
+
+
diff --git a/doc/files/enablejointmotor.txt b/doc/files/enablejointmotor.txt
new file mode 100644
index 0000000..46d8bd3
--- /dev/null
+++ b/doc/files/enablejointmotor.txt
@@ -0,0 +1,4 @@
+#title enableJointMotor [RCBasic Doc]
+#header sub enableJointMotor( joint_id, flag)
+
+
diff --git a/doc/files/getactorcenter.txt b/doc/files/getactorcenter.txt
new file mode 100644
index 0000000..d5812bd
--- /dev/null
+++ b/doc/files/getactorcenter.txt
@@ -0,0 +1,4 @@
+#title getActorCenter [RCBasic Doc]
+#header sub getActorCenter( actor, ByRef x, ByRef y, ByRef z)
+
+Gets an actor's center of mass position. This is useful for setting the origin of constraints.
diff --git a/doc/files/getactorcomposition.txt b/doc/files/getactorcomposition.txt
deleted file mode 100644
index 0dc7ed3..0000000
--- a/doc/files/getactorcomposition.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-#title getActorCOMPosition [RCBasic Doc]
-#header sub getActorCOMPosition( actor, ByRef x, ByRef y, ByRef z)
-
-Gets an actor's center of mass position. This is useful for setting the origin of constraints.
diff --git a/doc/files/getactorvelocityinlocalpoint.txt b/doc/files/getactorvelocityinlocalpoint.txt
new file mode 100644
index 0000000..3e9d57c
--- /dev/null
+++ b/doc/files/getactorvelocityinlocalpoint.txt
@@ -0,0 +1,4 @@
+#title getActorVelocityInLocalPoint [RCBasic Doc]
+#header sub getActorVelocityInLocalPoint( actor, rel_x, rel_y, rel_z, ByRef x, ByRef y, ByRef z)
+
+
diff --git a/doc/files/getjointangle.txt b/doc/files/getjointangle.txt
new file mode 100644
index 0000000..7079334
--- /dev/null
+++ b/doc/files/getjointangle.txt
@@ -0,0 +1,4 @@
+#title getJointAngle [RCBasic Doc]
+#header function getJointAngle( joint_id)
+
+
diff --git a/doc/files/getjointangularoffset.txt b/doc/files/getjointangularoffset.txt
new file mode 100644
index 0000000..816f882
--- /dev/null
+++ b/doc/files/getjointangularoffset.txt
@@ -0,0 +1,4 @@
+#title getJointAngularOffset [RCBasic Doc]
+#header function getJointAngularOffset( joint_id)
+
+
diff --git a/doc/files/getjointangularspeed.txt b/doc/files/getjointangularspeed.txt
new file mode 100644
index 0000000..cda7ed3
--- /dev/null
+++ b/doc/files/getjointangularspeed.txt
@@ -0,0 +1,4 @@
+#title getJointAngularSpeed [RCBasic Doc]
+#header function getJointAngularSpeed( joint_id)
+
+
diff --git a/doc/files/getjointcorrectionfactor.txt b/doc/files/getjointcorrectionfactor.txt
new file mode 100644
index 0000000..59cc3e7
--- /dev/null
+++ b/doc/files/getjointcorrectionfactor.txt
@@ -0,0 +1,4 @@
+#title getJointCorrectionFactor [RCBasic Doc]
+#header function getJointCorrectionFactor( joint_id)
+
+
diff --git a/doc/files/getjointcurrentlength.txt b/doc/files/getjointcurrentlength.txt
new file mode 100644
index 0000000..29143cf
--- /dev/null
+++ b/doc/files/getjointcurrentlength.txt
@@ -0,0 +1,4 @@
+#title getJointCurrentLength [RCBasic Doc]
+#header function getJointCurrentLength( joint_id)
+
+
diff --git a/doc/files/getjointcurrentlengtha.txt b/doc/files/getjointcurrentlengtha.txt
new file mode 100644
index 0000000..707a5de
--- /dev/null
+++ b/doc/files/getjointcurrentlengtha.txt
@@ -0,0 +1,4 @@
+#title getJointCurrentLengthA [RCBasic Doc]
+#header function getJointCurrentLengthA( joint_id)
+
+
diff --git a/doc/files/getjointcurrentlengthb.txt b/doc/files/getjointcurrentlengthb.txt
new file mode 100644
index 0000000..2abf450
--- /dev/null
+++ b/doc/files/getjointcurrentlengthb.txt
@@ -0,0 +1,4 @@
+#title getJointCurrentLengthB [RCBasic Doc]
+#header function getJointCurrentLengthB( joint_id)
+
+
diff --git a/doc/files/getjointdamping.txt b/doc/files/getjointdamping.txt
new file mode 100644
index 0000000..43fd3c7
--- /dev/null
+++ b/doc/files/getjointdamping.txt
@@ -0,0 +1,4 @@
+#title getJointDamping [RCBasic Doc]
+#header function getJointDamping( joint_id)
+
+
diff --git a/doc/files/getjointgroundanchora.txt b/doc/files/getjointgroundanchora.txt
new file mode 100644
index 0000000..165c283
--- /dev/null
+++ b/doc/files/getjointgroundanchora.txt
@@ -0,0 +1,4 @@
+#title getJointGroundAnchorA [RCBasic Doc]
+#header sub getJointGroundAnchorA( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointgroundanchorb.txt b/doc/files/getjointgroundanchorb.txt
new file mode 100644
index 0000000..458c563
--- /dev/null
+++ b/doc/files/getjointgroundanchorb.txt
@@ -0,0 +1,4 @@
+#title getJointGroundAnchorB [RCBasic Doc]
+#header sub getJointGroundAnchorB( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointlength.txt b/doc/files/getjointlength.txt
new file mode 100644
index 0000000..97cf1df
--- /dev/null
+++ b/doc/files/getjointlength.txt
@@ -0,0 +1,4 @@
+#title getJointLength [RCBasic Doc]
+#header function getJointLength( joint_id)
+
+
diff --git a/doc/files/getjointlengtha.txt b/doc/files/getjointlengtha.txt
new file mode 100644
index 0000000..a4a2218
--- /dev/null
+++ b/doc/files/getjointlengtha.txt
@@ -0,0 +1,4 @@
+#title getJointLengthA [RCBasic Doc]
+#header function getJointLengthA( joint_id)
+
+
diff --git a/doc/files/getjointlengthb.txt b/doc/files/getjointlengthb.txt
new file mode 100644
index 0000000..fd255c2
--- /dev/null
+++ b/doc/files/getjointlengthb.txt
@@ -0,0 +1,4 @@
+#title getJointLengthB [RCBasic Doc]
+#header function getJointLengthB( joint_id)
+
+
diff --git a/doc/files/getjointlinearoffset.txt b/doc/files/getjointlinearoffset.txt
new file mode 100644
index 0000000..29f5c56
--- /dev/null
+++ b/doc/files/getjointlinearoffset.txt
@@ -0,0 +1,4 @@
+#title getJointLinearOffset [RCBasic Doc]
+#header sub getJointLinearOffset( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointlinearspeed.txt b/doc/files/getjointlinearspeed.txt
new file mode 100644
index 0000000..25be3de
--- /dev/null
+++ b/doc/files/getjointlinearspeed.txt
@@ -0,0 +1,4 @@
+#title getJointLinearSpeed [RCBasic Doc]
+#header function getJointLinearSpeed( joint_id)
+
+
diff --git a/doc/files/getjointlocalanchora.txt b/doc/files/getjointlocalanchora.txt
new file mode 100644
index 0000000..28f97de
--- /dev/null
+++ b/doc/files/getjointlocalanchora.txt
@@ -0,0 +1,4 @@
+#title getJointLocalAnchorA [RCBasic Doc]
+#header sub getJointLocalAnchorA( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointlocalanchorb.txt b/doc/files/getjointlocalanchorb.txt
new file mode 100644
index 0000000..cb9056c
--- /dev/null
+++ b/doc/files/getjointlocalanchorb.txt
@@ -0,0 +1,4 @@
+#title getJointLocalAnchorB [RCBasic Doc]
+#header sub getJointLocalAnchorB( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointlocalaxisa.txt b/doc/files/getjointlocalaxisa.txt
new file mode 100644
index 0000000..c6f66f4
--- /dev/null
+++ b/doc/files/getjointlocalaxisa.txt
@@ -0,0 +1,4 @@
+#title getJointLocalAxisA [RCBasic Doc]
+#header sub getJointLocalAxisA( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointlowerlimit.txt b/doc/files/getjointlowerlimit.txt
new file mode 100644
index 0000000..cdf0e89
--- /dev/null
+++ b/doc/files/getjointlowerlimit.txt
@@ -0,0 +1,4 @@
+#title getJointLowerLimit [RCBasic Doc]
+#header function getJointLowerLimit( joint_id)
+
+
diff --git a/doc/files/getjointmaxforce.txt b/doc/files/getjointmaxforce.txt
new file mode 100644
index 0000000..be5cace
--- /dev/null
+++ b/doc/files/getjointmaxforce.txt
@@ -0,0 +1,4 @@
+#title getJointMaxForce [RCBasic Doc]
+#header function getJointMaxForce( joint_id)
+
+
diff --git a/doc/files/getjointmaxlength.txt b/doc/files/getjointmaxlength.txt
new file mode 100644
index 0000000..1c08ce2
--- /dev/null
+++ b/doc/files/getjointmaxlength.txt
@@ -0,0 +1,4 @@
+#title getJointMaxLength [RCBasic Doc]
+#header function getJointMaxLength( joint_id)
+
+
diff --git a/doc/files/getjointmaxmotorforce.txt b/doc/files/getjointmaxmotorforce.txt
new file mode 100644
index 0000000..adc26f6
--- /dev/null
+++ b/doc/files/getjointmaxmotorforce.txt
@@ -0,0 +1,4 @@
+#title getJointMaxMotorForce [RCBasic Doc]
+#header function getJointMaxMotorForce( joint_id)
+
+
diff --git a/doc/files/getjointmaxmotortorque.txt b/doc/files/getjointmaxmotortorque.txt
new file mode 100644
index 0000000..7bcd7d9
--- /dev/null
+++ b/doc/files/getjointmaxmotortorque.txt
@@ -0,0 +1,4 @@
+#title getJointMaxMotorTorque [RCBasic Doc]
+#header function getJointMaxMotorTorque( joint_id)
+
+
diff --git a/doc/files/getjointmaxtorque.txt b/doc/files/getjointmaxtorque.txt
new file mode 100644
index 0000000..e785956
--- /dev/null
+++ b/doc/files/getjointmaxtorque.txt
@@ -0,0 +1,4 @@
+#title getJointMaxTorque [RCBasic Doc]
+#header function getJointMaxTorque( joint_id)
+
+
diff --git a/doc/files/getjointminlength.txt b/doc/files/getjointminlength.txt
new file mode 100644
index 0000000..7d88e5c
--- /dev/null
+++ b/doc/files/getjointminlength.txt
@@ -0,0 +1,4 @@
+#title getJointMinLength [RCBasic Doc]
+#header function getJointMinLength( joint_id)
+
+
diff --git a/doc/files/getjointmotorforce.txt b/doc/files/getjointmotorforce.txt
new file mode 100644
index 0000000..a4eaeb8
--- /dev/null
+++ b/doc/files/getjointmotorforce.txt
@@ -0,0 +1,4 @@
+#title getJointMotorForce [RCBasic Doc]
+#header function getJointMotorForce( joint_id, inv_dt)
+
+
diff --git a/doc/files/getjointmotorspeed.txt b/doc/files/getjointmotorspeed.txt
new file mode 100644
index 0000000..a2beeb3
--- /dev/null
+++ b/doc/files/getjointmotorspeed.txt
@@ -0,0 +1,4 @@
+#title getJointMotorSpeed [RCBasic Doc]
+#header function getJointMotorSpeed( joint_id)
+
+
diff --git a/doc/files/getjointmotortorque.txt b/doc/files/getjointmotortorque.txt
new file mode 100644
index 0000000..7025820
--- /dev/null
+++ b/doc/files/getjointmotortorque.txt
@@ -0,0 +1,4 @@
+#title getJointMotorTorque [RCBasic Doc]
+#header function getJointMotorTorque( joint_id, inv_dt)
+
+
diff --git a/doc/files/getjointratio.txt b/doc/files/getjointratio.txt
new file mode 100644
index 0000000..a2d26c4
--- /dev/null
+++ b/doc/files/getjointratio.txt
@@ -0,0 +1,4 @@
+#title getJointRatio [RCBasic Doc]
+#header function getJointRatio( joint_id)
+
+
diff --git a/doc/files/getjointreactionforce.txt b/doc/files/getjointreactionforce.txt
new file mode 100644
index 0000000..e4e73a3
--- /dev/null
+++ b/doc/files/getjointreactionforce.txt
@@ -0,0 +1,4 @@
+#title getJointReactionForce [RCBasic Doc]
+#header sub getJointReactionForce( joint_id, inv_dt, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointreactiontorque.txt b/doc/files/getjointreactiontorque.txt
new file mode 100644
index 0000000..c56a7e7
--- /dev/null
+++ b/doc/files/getjointreactiontorque.txt
@@ -0,0 +1,4 @@
+#title getJointReactionTorque [RCBasic Doc]
+#header function getJointReactionTorque( joint_id, inv_dt)
+
+
diff --git a/doc/files/getjointreferenceangle.txt b/doc/files/getjointreferenceangle.txt
new file mode 100644
index 0000000..1b6c175
--- /dev/null
+++ b/doc/files/getjointreferenceangle.txt
@@ -0,0 +1,4 @@
+#title getJointReferenceAngle [RCBasic Doc]
+#header function getJointReferenceAngle( joint_id)
+
+
diff --git a/doc/files/getjointspeed.txt b/doc/files/getjointspeed.txt
new file mode 100644
index 0000000..e7f7232
--- /dev/null
+++ b/doc/files/getjointspeed.txt
@@ -0,0 +1,4 @@
+#title getJointSpeed [RCBasic Doc]
+#header function getJointSpeed( joint_id)
+
+
diff --git a/doc/files/getjointstiffness.txt b/doc/files/getjointstiffness.txt
new file mode 100644
index 0000000..80678cf
--- /dev/null
+++ b/doc/files/getjointstiffness.txt
@@ -0,0 +1,4 @@
+#title getJointStiffness [RCBasic Doc]
+#header function getJointStiffness( joint_id)
+
+
diff --git a/doc/files/getjointtranslation.txt b/doc/files/getjointtranslation.txt
new file mode 100644
index 0000000..6b2ed7d
--- /dev/null
+++ b/doc/files/getjointtranslation.txt
@@ -0,0 +1,4 @@
+#title getJointTranslation [RCBasic Doc]
+#header function getJointTranslation( joint_id)
+
+
diff --git a/doc/files/getjointupperlimit.txt b/doc/files/getjointupperlimit.txt
new file mode 100644
index 0000000..5ea7c9b
--- /dev/null
+++ b/doc/files/getjointupperlimit.txt
@@ -0,0 +1,4 @@
+#title getJointUpperLimit [RCBasic Doc]
+#header function getJointUpperLimit( joint_id)
+
+
diff --git a/doc/files/getjointworldanchora.txt b/doc/files/getjointworldanchora.txt
new file mode 100644
index 0000000..ff7b706
--- /dev/null
+++ b/doc/files/getjointworldanchora.txt
@@ -0,0 +1,4 @@
+#title getJointWorldAnchorA [RCBasic Doc]
+#header sub getJointWorldAnchorA( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getjointworldanchorb.txt b/doc/files/getjointworldanchorb.txt
new file mode 100644
index 0000000..0b50320
--- /dev/null
+++ b/doc/files/getjointworldanchorb.txt
@@ -0,0 +1,4 @@
+#title getJointWorldAnchorB [RCBasic Doc]
+#header sub getJointWorldAnchorB( joint_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspriteangulardamping.txt b/doc/files/getspriteangulardamping.txt
new file mode 100644
index 0000000..459ecd0
--- /dev/null
+++ b/doc/files/getspriteangulardamping.txt
@@ -0,0 +1,4 @@
+#title getSpriteAngularDamping [RCBasic Doc]
+#header function getSpriteAngularDamping( spr_id)
+
+
diff --git a/doc/files/getspriteangularvelocity.txt b/doc/files/getspriteangularvelocity.txt
new file mode 100644
index 0000000..723bbbe
--- /dev/null
+++ b/doc/files/getspriteangularvelocity.txt
@@ -0,0 +1,4 @@
+#title getSpriteAngularVelocity [RCBasic Doc]
+#header function getSpriteAngularVelocity( spr_id)
+
+
diff --git a/doc/files/getspritecenter.txt b/doc/files/getspritecenter.txt
new file mode 100644
index 0000000..fd70b96
--- /dev/null
+++ b/doc/files/getspritecenter.txt
@@ -0,0 +1,4 @@
+#title getSpriteCenter [RCBasic Doc]
+#header sub getSpriteCenter( spr_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritegravityscale.txt b/doc/files/getspritegravityscale.txt
new file mode 100644
index 0000000..655b589
--- /dev/null
+++ b/doc/files/getspritegravityscale.txt
@@ -0,0 +1,4 @@
+#title getSpriteGravityScale [RCBasic Doc]
+#header function getSpriteGravityScale( spr_id)
+
+
diff --git a/doc/files/getspriteinertia.txt b/doc/files/getspriteinertia.txt
new file mode 100644
index 0000000..6a62ac2
--- /dev/null
+++ b/doc/files/getspriteinertia.txt
@@ -0,0 +1,4 @@
+#title getSpriteInertia [RCBasic Doc]
+#header function getSpriteInertia( spr_id)
+
+
diff --git a/doc/files/getspritelineardamping.txt b/doc/files/getspritelineardamping.txt
new file mode 100644
index 0000000..dbc24ad
--- /dev/null
+++ b/doc/files/getspritelineardamping.txt
@@ -0,0 +1,4 @@
+#title getSpriteLinearDamping [RCBasic Doc]
+#header function getSpriteLinearDamping( spr_id)
+
+
diff --git a/doc/files/getspritelinearvelocity.txt b/doc/files/getspritelinearvelocity.txt
new file mode 100644
index 0000000..fda98c9
--- /dev/null
+++ b/doc/files/getspritelinearvelocity.txt
@@ -0,0 +1,4 @@
+#title getSpriteLinearVelocity [RCBasic Doc]
+#header sub getSpriteLinearVelocity( spr_id, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritelinearvelocityfromlocalpoint.txt b/doc/files/getspritelinearvelocityfromlocalpoint.txt
new file mode 100644
index 0000000..47bfcc2
--- /dev/null
+++ b/doc/files/getspritelinearvelocityfromlocalpoint.txt
@@ -0,0 +1,4 @@
+#title getSpriteLinearVelocityFromLocalPoint [RCBasic Doc]
+#header sub getSpriteLinearVelocityFromLocalPoint( spr_id, pX, pY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritelinearvelocityfromworldpoint.txt b/doc/files/getspritelinearvelocityfromworldpoint.txt
new file mode 100644
index 0000000..534db39
--- /dev/null
+++ b/doc/files/getspritelinearvelocityfromworldpoint.txt
@@ -0,0 +1,4 @@
+#title getSpriteLinearVelocityFromWorldPoint [RCBasic Doc]
+#header sub getSpriteLinearVelocityFromWorldPoint( spr_id, wX, wY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritelocalpoint.txt b/doc/files/getspritelocalpoint.txt
new file mode 100644
index 0000000..6e74ec8
--- /dev/null
+++ b/doc/files/getspritelocalpoint.txt
@@ -0,0 +1,4 @@
+#title getSpriteLocalPoint [RCBasic Doc]
+#header sub getSpriteLocalPoint( spr_id, wX, wY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritelocalvector.txt b/doc/files/getspritelocalvector.txt
new file mode 100644
index 0000000..c7f26b7
--- /dev/null
+++ b/doc/files/getspritelocalvector.txt
@@ -0,0 +1,4 @@
+#title getSpriteLocalVector [RCBasic Doc]
+#header sub getSpriteLocalVector( spr_id, wX, wY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspritemass.txt b/doc/files/getspritemass.txt
new file mode 100644
index 0000000..c3aafc1
--- /dev/null
+++ b/doc/files/getspritemass.txt
@@ -0,0 +1,4 @@
+#title getSpriteMass [RCBasic Doc]
+#header function getSpriteMass( spr_id)
+
+
diff --git a/doc/files/getspriteworldpoint.txt b/doc/files/getspriteworldpoint.txt
new file mode 100644
index 0000000..4c907fb
--- /dev/null
+++ b/doc/files/getspriteworldpoint.txt
@@ -0,0 +1,4 @@
+#title getSpriteWorldPoint [RCBasic Doc]
+#header sub getSpriteWorldPoint( spr_id, lX, lY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/getspriteworldvector.txt b/doc/files/getspriteworldvector.txt
new file mode 100644
index 0000000..7cfc4b5
--- /dev/null
+++ b/doc/files/getspriteworldvector.txt
@@ -0,0 +1,4 @@
+#title getSpriteWorldVector [RCBasic Doc]
+#header sub getSpriteWorldVector( spr_id, lX, lY, ByRef x, ByRef y)
+
+
diff --git a/doc/files/jointislimitenabled.txt b/doc/files/jointislimitenabled.txt
new file mode 100644
index 0000000..5170fab
--- /dev/null
+++ b/doc/files/jointislimitenabled.txt
@@ -0,0 +1,4 @@
+#title jointIsLimitEnabled [RCBasic Doc]
+#header function jointIsLimitEnabled( joint_id)
+
+
diff --git a/doc/files/jointmotorisenabled.txt b/doc/files/jointmotorisenabled.txt
new file mode 100644
index 0000000..dcbe44b
--- /dev/null
+++ b/doc/files/jointmotorisenabled.txt
@@ -0,0 +1,4 @@
+#title jointMotorIsEnabled [RCBasic Doc]
+#header function jointMotorIsEnabled( joint_id)
+
+
diff --git a/doc/files/setjointangularoffset.txt b/doc/files/setjointangularoffset.txt
new file mode 100644
index 0000000..91a4222
--- /dev/null
+++ b/doc/files/setjointangularoffset.txt
@@ -0,0 +1,4 @@
+#title setJointAngularOffset [RCBasic Doc]
+#header sub setJointAngularOffset( joint_id, angleOffset)
+
+
diff --git a/doc/files/setjointcorrectionfactor.txt b/doc/files/setjointcorrectionfactor.txt
new file mode 100644
index 0000000..5e0bf91
--- /dev/null
+++ b/doc/files/setjointcorrectionfactor.txt
@@ -0,0 +1,4 @@
+#title setJointCorrectionFactor [RCBasic Doc]
+#header sub setJointCorrectionFactor( joint_id, factor)
+
+
diff --git a/doc/files/setjointdamping.txt b/doc/files/setjointdamping.txt
new file mode 100644
index 0000000..daf1ea1
--- /dev/null
+++ b/doc/files/setjointdamping.txt
@@ -0,0 +1,4 @@
+#title setJointDamping [RCBasic Doc]
+#header sub setJointDamping( joint_id, damping)
+
+
diff --git a/doc/files/setjointlength.txt b/doc/files/setjointlength.txt
new file mode 100644
index 0000000..6ace888
--- /dev/null
+++ b/doc/files/setjointlength.txt
@@ -0,0 +1,4 @@
+#title setJointLength [RCBasic Doc]
+#header sub setJointLength( joint_id, jlen)
+
+
diff --git a/doc/files/setjointlimits.txt b/doc/files/setjointlimits.txt
new file mode 100644
index 0000000..029a4db
--- /dev/null
+++ b/doc/files/setjointlimits.txt
@@ -0,0 +1,4 @@
+#title setJointLimits [RCBasic Doc]
+#header sub setJointLimits( joint_id, lower_limit, upper_limit)
+
+
diff --git a/doc/files/setjointlinearoffset.txt b/doc/files/setjointlinearoffset.txt
new file mode 100644
index 0000000..2596057
--- /dev/null
+++ b/doc/files/setjointlinearoffset.txt
@@ -0,0 +1,4 @@
+#title setJointLinearOffset [RCBasic Doc]
+#header sub setJointLinearOffset( joint_id, x, y)
+
+
diff --git a/doc/files/setjointmaxforce.txt b/doc/files/setjointmaxforce.txt
new file mode 100644
index 0000000..69e202c
--- /dev/null
+++ b/doc/files/setjointmaxforce.txt
@@ -0,0 +1,4 @@
+#title setJointMaxForce [RCBasic Doc]
+#header sub setJointMaxForce( joint_id, force)
+
+
diff --git a/doc/files/setjointmaxlength.txt b/doc/files/setjointmaxlength.txt
new file mode 100644
index 0000000..814612d
--- /dev/null
+++ b/doc/files/setjointmaxlength.txt
@@ -0,0 +1,4 @@
+#title setJointMaxLength [RCBasic Doc]
+#header sub setJointMaxLength( joint_id, jlen)
+
+
diff --git a/doc/files/setjointmaxmotorforce.txt b/doc/files/setjointmaxmotorforce.txt
new file mode 100644
index 0000000..f43857d
--- /dev/null
+++ b/doc/files/setjointmaxmotorforce.txt
@@ -0,0 +1,4 @@
+#title setJointMaxMotorForce [RCBasic Doc]
+#header sub setJointMaxMotorForce( joint_id, force)
+
+
diff --git a/doc/files/setjointmaxmotortorque.txt b/doc/files/setjointmaxmotortorque.txt
new file mode 100644
index 0000000..4f63002
--- /dev/null
+++ b/doc/files/setjointmaxmotortorque.txt
@@ -0,0 +1,4 @@
+#title setJointMaxMotorTorque [RCBasic Doc]
+#header sub setJointMaxMotorTorque( joint_id, torque)
+
+
diff --git a/doc/files/setjointmaxtorque.txt b/doc/files/setjointmaxtorque.txt
new file mode 100644
index 0000000..bc82940
--- /dev/null
+++ b/doc/files/setjointmaxtorque.txt
@@ -0,0 +1,4 @@
+#title setJointMaxTorque [RCBasic Doc]
+#header sub setJointMaxTorque( joint_id, torque)
+
+
diff --git a/doc/files/setjointminlength.txt b/doc/files/setjointminlength.txt
new file mode 100644
index 0000000..bffcdd8
--- /dev/null
+++ b/doc/files/setjointminlength.txt
@@ -0,0 +1,4 @@
+#title setJointMinLength [RCBasic Doc]
+#header sub setJointMinLength( joint_id, jlen)
+
+
diff --git a/doc/files/setjointmotorspeed.txt b/doc/files/setjointmotorspeed.txt
new file mode 100644
index 0000000..1c16f57
--- /dev/null
+++ b/doc/files/setjointmotorspeed.txt
@@ -0,0 +1,4 @@
+#title setJointMotorSpeed [RCBasic Doc]
+#header sub setJointMotorSpeed( joint_id, speed)
+
+
diff --git a/doc/files/setjointorigin.txt b/doc/files/setjointorigin.txt
new file mode 100644
index 0000000..73ef59a
--- /dev/null
+++ b/doc/files/setjointorigin.txt
@@ -0,0 +1,4 @@
+#title setJointOrigin [RCBasic Doc]
+#header sub setJointOrigin( joint_id, x, y)
+
+
diff --git a/doc/files/setjointratio.txt b/doc/files/setjointratio.txt
new file mode 100644
index 0000000..ad2f0b6
--- /dev/null
+++ b/doc/files/setjointratio.txt
@@ -0,0 +1,4 @@
+#title setJointRatio [RCBasic Doc]
+#header sub setJointRatio( joint_id, j_ratio)
+
+
diff --git a/doc/files/setjointstiffness.txt b/doc/files/setjointstiffness.txt
new file mode 100644
index 0000000..041cabc
--- /dev/null
+++ b/doc/files/setjointstiffness.txt
@@ -0,0 +1,4 @@
+#title setJointStiffness [RCBasic Doc]
+#header sub setJointStiffness( joint_id, stiffness)
+
+
diff --git a/doc/files/setspriteangulardamping.txt b/doc/files/setspriteangulardamping.txt
new file mode 100644
index 0000000..bf7b2cd
--- /dev/null
+++ b/doc/files/setspriteangulardamping.txt
@@ -0,0 +1,4 @@
+#title setSpriteAngularDamping [RCBasic Doc]
+#header sub setSpriteAngularDamping( spr_id, angularDamping)
+
+
diff --git a/doc/files/setspriteangularvelocity.txt b/doc/files/setspriteangularvelocity.txt
new file mode 100644
index 0000000..f2da891
--- /dev/null
+++ b/doc/files/setspriteangularvelocity.txt
@@ -0,0 +1,4 @@
+#title setSpriteAngularVelocity [RCBasic Doc]
+#header sub setSpriteAngularVelocity( spr_id, av)
+
+
diff --git a/doc/files/setspriteawake.txt b/doc/files/setspriteawake.txt
new file mode 100644
index 0000000..fd950d6
--- /dev/null
+++ b/doc/files/setspriteawake.txt
@@ -0,0 +1,4 @@
+#title setSpriteAwake [RCBasic Doc]
+#header sub setSpriteAwake( spr_id, flag)
+
+
diff --git a/doc/files/setspritebullet.txt b/doc/files/setspritebullet.txt
new file mode 100644
index 0000000..45ae5ee
--- /dev/null
+++ b/doc/files/setspritebullet.txt
@@ -0,0 +1,4 @@
+#title setSpriteBullet [RCBasic Doc]
+#header sub setSpriteBullet( spr_id, flag)
+
+
diff --git a/doc/files/setspritefixedrotation.txt b/doc/files/setspritefixedrotation.txt
new file mode 100644
index 0000000..2031d97
--- /dev/null
+++ b/doc/files/setspritefixedrotation.txt
@@ -0,0 +1,4 @@
+#title setSpriteFixedRotation [RCBasic Doc]
+#header sub setSpriteFixedRotation( spr_id, flag)
+
+
diff --git a/doc/files/setspritegravityscale.txt b/doc/files/setspritegravityscale.txt
new file mode 100644
index 0000000..6bd7f21
--- /dev/null
+++ b/doc/files/setspritegravityscale.txt
@@ -0,0 +1,4 @@
+#title setSpriteGravityScale [RCBasic Doc]
+#header sub setSpriteGravityScale( spr_id, g_scale)
+
+
diff --git a/doc/files/setspritelineardamping.txt b/doc/files/setspritelineardamping.txt
new file mode 100644
index 0000000..73ee07c
--- /dev/null
+++ b/doc/files/setspritelineardamping.txt
@@ -0,0 +1,4 @@
+#title setSpriteLinearDamping [RCBasic Doc]
+#header sub setSpriteLinearDamping( spr_id, linearDamping)
+
+
diff --git a/doc/files/setspritelinearvelocity.txt b/doc/files/setspritelinearvelocity.txt
new file mode 100644
index 0000000..1eed3bf
--- /dev/null
+++ b/doc/files/setspritelinearvelocity.txt
@@ -0,0 +1,4 @@
+#title setSpriteLinearVelocity [RCBasic Doc]
+#header sub setSpriteLinearVelocity( spr_id, x, y)
+
+
diff --git a/doc/files/setspritesleepallowed.txt b/doc/files/setspritesleepallowed.txt
new file mode 100644
index 0000000..a937a08
--- /dev/null
+++ b/doc/files/setspritesleepallowed.txt
@@ -0,0 +1,4 @@
+#title setSpriteSleepAllowed [RCBasic Doc]
+#header sub setSpriteSleepAllowed( spr_id, flag)
+
+
diff --git a/doc/files/spriteisawake.txt b/doc/files/spriteisawake.txt
new file mode 100644
index 0000000..cf7325b
--- /dev/null
+++ b/doc/files/spriteisawake.txt
@@ -0,0 +1,4 @@
+#title spriteIsAwake [RCBasic Doc]
+#header function spriteIsAwake( spr_id)
+
+
diff --git a/doc/files/spriteisbullet.txt b/doc/files/spriteisbullet.txt
new file mode 100644
index 0000000..80d3c80
--- /dev/null
+++ b/doc/files/spriteisbullet.txt
@@ -0,0 +1,4 @@
+#title spriteIsBullet [RCBasic Doc]
+#header function spriteIsBullet( spr_id)
+
+
diff --git a/doc/files/spriteisfixedrotation.txt b/doc/files/spriteisfixedrotation.txt
new file mode 100644
index 0000000..cac3f7a
--- /dev/null
+++ b/doc/files/spriteisfixedrotation.txt
@@ -0,0 +1,4 @@
+#title spriteIsFixedRotation [RCBasic Doc]
+#header function spriteIsFixedRotation( spr_id)
+
+
diff --git a/doc/files/spritesleepallowed.txt b/doc/files/spritesleepallowed.txt
new file mode 100644
index 0000000..c326ec1
--- /dev/null
+++ b/doc/files/spritesleepallowed.txt
@@ -0,0 +1,4 @@
+#title spriteSleepAllowed [RCBasic Doc]
+#header function spriteSleepAllowed( spr_id)
+
+
diff --git a/rc_sprite_physics.h b/rc_sprite_physics.h
deleted file mode 100644
index f7d4156..0000000
--- a/rc_sprite_physics.h
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "rc_sprite2D.h"
-
-void rc_applySpriteAngularImpulse(int spr_id, float impulse, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyAngularImpulse(impulse, wake);
-}
-
-void rc_applySpriteForce(int spr_id, double fX, double fY, double pX, double pY, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyForce(b2Vec2(fX, fY), b2Vec2(pX, pY), wake);
-}
-
-void rc_applySpriteForceToCenter(int spr_id, double x, double y, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyForceToCenter(b2Vec2(x, y), wake);
-}
-
-void rc_applySpriteLinearImpulse(int spr_id, double iX, double iY, double pX, double pY, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyLinearImpulse(b2Vec2(iX, iY), b2Vec2(pX, pY), wake);
-}
-
-void rc_applySpriteLinearForceToCenter(int spr_id, double x, double y, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyLinearImpulseToCenter(b2Vec2(x, y), wake);
-}
-
-void rc_applySpriteTorque(int spr_id, float torque, bool wake)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- rc_sprite[spr_id].physics.body->ApplyTorque(torque, wake);
-}
-
-float rc_getSpriteAngle(int spr_id)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-
- return rc_sprite[spr_id].physics.body->GetAngle();
-}
-
-float rc_getSpriteAngularVelocity(int spr_id)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-
- return rc_sprite[spr_id].physics.body->GetAngularVelocity();
-}
-
-float rc_getSpriteInertia(int spr_id)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-
- return rc_sprite[spr_id].physics.body->GetInertia();
-}
-
-void rc_getSpriteLinearVelocity(int spr_id, double* x, double* y)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- *x = (double)rc_sprite[spr_id].physics.body->GetLinearVelocity().x;
- *y = (double)rc_sprite[spr_id].physics.body->GetLinearVelocity().y;
-}
-
-void rc_getSpriteLinearVelocityFromLocalPoint(int spr_id, double* x, double* y, double pX, double pY)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return;
-
- if(!rc_sprite[spr_id].active)
- return;
-
- b2Vec2 pos = rc_sprite[spr_id].physics.body->GetLinearVelocityFromLocalPoint(b2Vec2(pX, pY));
- *x = pos.x;
- *y = pos.y;
-}
-
-void rc_getSpriteLinearVelocityFromWorldPoint(int spr_id, double* x, double* y, double wX, double wY)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-
- b2Vec2 pos = rc_sprite[spr_id].physics.body->GetLinearVelocityFromWorldPoint(b2Vec2(wX, wY));
- *x = pos.x;
- *y = pos.y;
-}
-
-void rc_getSpriteLocalPoint() *******************************
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-}
-
-void rc_getSpriteLocalVector() *******************************
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-}
-
-float rc_getSpriteMass(int spr_id)
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-
- return rc_sprite[spr_id].physics.body->GetMass();
-}
-
-void rc_getSpriteMassData(int spr_id) *******************************
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-}
-
-void rc_getSpriteTransform(int spr_id) *******************************
-{
- if(spr_id < 0 || spr_id >= rc_sprite.size())
- return 0;
-
- if(!rc_sprite[spr_id].active)
- return 0;
-}
diff --git a/rcbasic_build/embedded_functions.bas b/rcbasic_build/embedded_functions.bas
index c67a66d..44c17aa 100644
--- a/rcbasic_build/embedded_functions.bas
+++ b/rcbasic_build/embedded_functions.bas
@@ -34,6 +34,7 @@ Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/joint2D.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/tilemaps.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/mesh.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor.bas"
+Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_animation.bas"
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"
@@ -42,5 +43,4 @@ 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"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/water.bas"
-Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_animation.bas"
Include "/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/materials.bas"
diff --git a/rcbasic_build/intern_inc/switch_cases.h b/rcbasic_build/intern_inc/switch_cases.h
index 263e761..e449f35 100644
--- a/rcbasic_build/intern_inc/switch_cases.h
+++ b/rcbasic_build/intern_inc/switch_cases.h
@@ -488,6 +488,105 @@ rc_getSpriteCurrentAnimationFrame( GETSPRITECURRENTANIMATIONFRAME_SPRITE )
rc_numSpriteAnimationLoops( NUMSPRITEANIMATIONLOOPS_SPRITE )
rc_spriteAnimationIsPlaying( SPRITEANIMATIONISPLAYING_SPRITE )
rc_deleteSpriteAnimation( DELETESPRITEANIMATION_SPRITE, DELETESPRITEANIMATION_ANIMATION )
+rc_getSpriteCenter( GETSPRITECENTER_SPR_ID, &GETSPRITECENTER_X, &GETSPRITECENTER_Y )
+rc_setSpriteLinearVelocity( SETSPRITELINEARVELOCITY_SPR_ID, SETSPRITELINEARVELOCITY_X, SETSPRITELINEARVELOCITY_Y )
+rc_getSpriteLinearVelocity( GETSPRITELINEARVELOCITY_SPR_ID, &GETSPRITELINEARVELOCITY_X, &GETSPRITELINEARVELOCITY_Y )
+rc_setSpriteAngularVelocity( SETSPRITEANGULARVELOCITY_SPR_ID, SETSPRITEANGULARVELOCITY_AV )
+rc_getSpriteAngularVelocity( GETSPRITEANGULARVELOCITY_SPR_ID )
+rc_applySpriteForce( APPLYSPRITEFORCE_SPR_ID, APPLYSPRITEFORCE_FX, APPLYSPRITEFORCE_FY, APPLYSPRITEFORCE_PX, APPLYSPRITEFORCE_PY )
+rc_applySpriteCentralForce( APPLYSPRITECENTRALFORCE_SPR_ID, APPLYSPRITECENTRALFORCE_X, APPLYSPRITECENTRALFORCE_Y )
+rc_applySpriteTorque( APPLYSPRITETORQUE_SPR_ID, APPLYSPRITETORQUE_TORQUE )
+rc_applySpriteLinearImpulse( APPLYSPRITELINEARIMPULSE_SPR_ID, APPLYSPRITELINEARIMPULSE_IX, APPLYSPRITELINEARIMPULSE_IY, APPLYSPRITELINEARIMPULSE_PX, APPLYSPRITELINEARIMPULSE_PY )
+rc_applySpriteAngularImpulse( APPLYSPRITEANGULARIMPULSE_SPR_ID, APPLYSPRITEANGULARIMPULSE_IMPULSE )
+rc_getSpriteMass( GETSPRITEMASS_SPR_ID )
+rc_getSpriteInertia( GETSPRITEINERTIA_SPR_ID )
+rc_getSpriteWorldPoint( GETSPRITEWORLDPOINT_SPR_ID, GETSPRITEWORLDPOINT_LX, GETSPRITEWORLDPOINT_LY, &GETSPRITEWORLDPOINT_X, &GETSPRITEWORLDPOINT_Y )
+rc_getSpriteWorldVector( GETSPRITEWORLDVECTOR_SPR_ID, GETSPRITEWORLDVECTOR_LX, GETSPRITEWORLDVECTOR_LY, &GETSPRITEWORLDVECTOR_X, &GETSPRITEWORLDVECTOR_Y )
+rc_getSpriteLocalPoint( GETSPRITELOCALPOINT_SPR_ID, GETSPRITELOCALPOINT_WX, GETSPRITELOCALPOINT_WY, &GETSPRITELOCALPOINT_X, &GETSPRITELOCALPOINT_Y )
+rc_getSpriteLocalVector( GETSPRITELOCALVECTOR_SPR_ID, GETSPRITELOCALVECTOR_WX, GETSPRITELOCALVECTOR_WY, &GETSPRITELOCALVECTOR_X, &GETSPRITELOCALVECTOR_Y )
+rc_getSpriteLinearVelocityFromLocalPoint( GETSPRITELINEARVELOCITYFROMLOCALPOINT_SPR_ID, GETSPRITELINEARVELOCITYFROMLOCALPOINT_PX, GETSPRITELINEARVELOCITYFROMLOCALPOINT_PY, &GETSPRITELINEARVELOCITYFROMLOCALPOINT_X, &GETSPRITELINEARVELOCITYFROMLOCALPOINT_Y )
+rc_getSpriteLinearVelocityFromWorldPoint( GETSPRITELINEARVELOCITYFROMWORLDPOINT_SPR_ID, GETSPRITELINEARVELOCITYFROMWORLDPOINT_WX, GETSPRITELINEARVELOCITYFROMWORLDPOINT_WY, &GETSPRITELINEARVELOCITYFROMWORLDPOINT_X, &GETSPRITELINEARVELOCITYFROMWORLDPOINT_Y )
+rc_getSpriteLinearDamping( GETSPRITELINEARDAMPING_SPR_ID )
+rc_setSpriteLinearDamping( SETSPRITELINEARDAMPING_SPR_ID, SETSPRITELINEARDAMPING_LINEARDAMPING )
+rc_getSpriteAngularDamping( GETSPRITEANGULARDAMPING_SPR_ID )
+rc_setSpriteAngularDamping( SETSPRITEANGULARDAMPING_SPR_ID, SETSPRITEANGULARDAMPING_ANGULARDAMPING )
+rc_getSpriteGravityScale( GETSPRITEGRAVITYSCALE_SPR_ID )
+rc_setSpriteGravityScale( SETSPRITEGRAVITYSCALE_SPR_ID, SETSPRITEGRAVITYSCALE_G_SCALE )
+rc_setSpriteBullet( SETSPRITEBULLET_SPR_ID, SETSPRITEBULLET_FLAG )
+rc_spriteIsBullet( SPRITEISBULLET_SPR_ID )
+rc_setSpriteSleepAllowed( SETSPRITESLEEPALLOWED_SPR_ID, SETSPRITESLEEPALLOWED_FLAG )
+rc_spriteSleepAllowed( SPRITESLEEPALLOWED_SPR_ID )
+rc_setSpriteAwake( SETSPRITEAWAKE_SPR_ID, SETSPRITEAWAKE_FLAG )
+rc_spriteIsAwake( SPRITEISAWAKE_SPR_ID )
+rc_setSpriteFixedRotation( SETSPRITEFIXEDROTATION_SPR_ID, SETSPRITEFIXEDROTATION_FLAG )
+rc_spriteIsFixedRotation( SPRITEISFIXEDROTATION_SPR_ID )
+rc_createDistanceJoint( CREATEDISTANCEJOINT_SPRITEA, CREATEDISTANCEJOINT_SPRITEB, CREATEDISTANCEJOINT_AX, CREATEDISTANCEJOINT_AY, CREATEDISTANCEJOINT_BX, CREATEDISTANCEJOINT_BY )
+rc_createFrictionJoint( CREATEFRICTIONJOINT_SPRITEA, CREATEFRICTIONJOINT_SPRITEB, CREATEFRICTIONJOINT_X, CREATEFRICTIONJOINT_Y )
+rc_createGearJoint( CREATEGEARJOINT_JOINTA, CREATEGEARJOINT_JOINTB, CREATEGEARJOINT_G_RATIO )
+rc_createMotorJoint( CREATEMOTORJOINT_SPRITEA, CREATEMOTORJOINT_SPRITEB )
+rc_createPrismaticJoint( CREATEPRISMATICJOINT_SPRITEA, CREATEPRISMATICJOINT_SPRITEB, CREATEPRISMATICJOINT_AX, CREATEPRISMATICJOINT_AY, CREATEPRISMATICJOINT_AXISX, CREATEPRISMATICJOINT_AXISY )
+rc_createPulleyJoint( CREATEPULLEYJOINT_SPRITEA, CREATEPULLEYJOINT_SPRITEB, CREATEPULLEYJOINT_GAX, CREATEPULLEYJOINT_GAY, CREATEPULLEYJOINT_GBX, CREATEPULLEYJOINT_GBY, CREATEPULLEYJOINT_AX, CREATEPULLEYJOINT_AY, CREATEPULLEYJOINT_BX, CREATEPULLEYJOINT_BY, CREATEPULLEYJOINT_J_RATIO )
+rc_createRevoluteJoint( CREATEREVOLUTEJOINT_SPRITEA, CREATEREVOLUTEJOINT_SPRITEB, CREATEREVOLUTEJOINT_X, CREATEREVOLUTEJOINT_Y )
+rc_createWeldJoint( CREATEWELDJOINT_SPRITEA, CREATEWELDJOINT_SPRITEB, CREATEWELDJOINT_X, CREATEWELDJOINT_Y )
+rc_createWheelJoint( CREATEWHEELJOINT_SPRITEA, CREATEWHEELJOINT_SPRITEB, CREATEWHEELJOINT_AX, CREATEWHEELJOINT_AY, CREATEWHEELJOINT_AXISX, CREATEWHEELJOINT_AXISY )
+rc_getJointWorldAnchorA( GETJOINTWORLDANCHORA_JOINT_ID, &GETJOINTWORLDANCHORA_X, &GETJOINTWORLDANCHORA_Y )
+rc_getJointWorldAnchorB( GETJOINTWORLDANCHORB_JOINT_ID, &GETJOINTWORLDANCHORB_X, &GETJOINTWORLDANCHORB_Y )
+rc_getJointReactionForce( GETJOINTREACTIONFORCE_JOINT_ID, GETJOINTREACTIONFORCE_INV_DT, &GETJOINTREACTIONFORCE_X, &GETJOINTREACTIONFORCE_Y )
+rc_getJointReactionTorque( GETJOINTREACTIONTORQUE_JOINT_ID, GETJOINTREACTIONTORQUE_INV_DT )
+rc_getJointLocalAnchorA( GETJOINTLOCALANCHORA_JOINT_ID, &GETJOINTLOCALANCHORA_X, &GETJOINTLOCALANCHORA_Y )
+rc_getJointLocalAnchorB( GETJOINTLOCALANCHORB_JOINT_ID, &GETJOINTLOCALANCHORB_X, &GETJOINTLOCALANCHORB_Y )
+rc_setJointLength( SETJOINTLENGTH_JOINT_ID, SETJOINTLENGTH_JLEN )
+rc_getJointLength( GETJOINTLENGTH_JOINT_ID )
+rc_setJointMinLength( SETJOINTMINLENGTH_JOINT_ID, SETJOINTMINLENGTH_JLEN )
+rc_getJointMinLength( GETJOINTMINLENGTH_JOINT_ID )
+rc_setJointMaxLength( SETJOINTMAXLENGTH_JOINT_ID, SETJOINTMAXLENGTH_JLEN )
+rc_getJointMaxLength( GETJOINTMAXLENGTH_JOINT_ID )
+rc_getJointCurrentLength( GETJOINTCURRENTLENGTH_JOINT_ID )
+rc_setJointStiffness( SETJOINTSTIFFNESS_JOINT_ID, SETJOINTSTIFFNESS_STIFFNESS )
+rc_getJointStiffness( GETJOINTSTIFFNESS_JOINT_ID )
+rc_setJointDamping( SETJOINTDAMPING_JOINT_ID, SETJOINTDAMPING_DAMPING )
+rc_getJointDamping( GETJOINTDAMPING_JOINT_ID )
+rc_setJointMaxForce( SETJOINTMAXFORCE_JOINT_ID, SETJOINTMAXFORCE_FORCE )
+rc_getJointMaxForce( GETJOINTMAXFORCE_JOINT_ID )
+rc_setJointMaxTorque( SETJOINTMAXTORQUE_JOINT_ID, SETJOINTMAXTORQUE_TORQUE )
+rc_getJointMaxTorque( GETJOINTMAXTORQUE_JOINT_ID )
+rc_setJointCorrectionFactor( SETJOINTCORRECTIONFACTOR_JOINT_ID, SETJOINTCORRECTIONFACTOR_FACTOR )
+rc_getJointCorrectionFactor( GETJOINTCORRECTIONFACTOR_JOINT_ID )
+rc_setJointRatio( SETJOINTRATIO_JOINT_ID, SETJOINTRATIO_J_RATIO )
+rc_getJointRatio( GETJOINTRATIO_JOINT_ID )
+rc_setJointLinearOffset( SETJOINTLINEAROFFSET_JOINT_ID, SETJOINTLINEAROFFSET_X, SETJOINTLINEAROFFSET_Y )
+rc_getJointLinearOffset( GETJOINTLINEAROFFSET_JOINT_ID, &GETJOINTLINEAROFFSET_X, &GETJOINTLINEAROFFSET_Y )
+rc_setJointAngularOffset( SETJOINTANGULAROFFSET_JOINT_ID, SETJOINTANGULAROFFSET_ANGLEOFFSET )
+rc_getJointAngularOffset( GETJOINTANGULAROFFSET_JOINT_ID )
+rc_getJointLocalAxisA( GETJOINTLOCALAXISA_JOINT_ID, &GETJOINTLOCALAXISA_X, &GETJOINTLOCALAXISA_Y )
+rc_getJointReferenceAngle( GETJOINTREFERENCEANGLE_JOINT_ID )
+rc_getJointTranslation( GETJOINTTRANSLATION_JOINT_ID )
+rc_getJointSpeed( GETJOINTSPEED_JOINT_ID )
+rc_jointIsLimitEnabled( JOINTISLIMITENABLED_JOINT_ID )
+rc_enableJointLimit( ENABLEJOINTLIMIT_JOINT_ID, ENABLEJOINTLIMIT_FLAG )
+rc_getJointLowerLimit( GETJOINTLOWERLIMIT_JOINT_ID )
+rc_getJointUpperLimit( GETJOINTUPPERLIMIT_JOINT_ID )
+rc_setJointLimits( SETJOINTLIMITS_JOINT_ID, SETJOINTLIMITS_LOWER_LIMIT, SETJOINTLIMITS_UPPER_LIMIT )
+rc_jointMotorIsEnabled( JOINTMOTORISENABLED_JOINT_ID )
+rc_enableJointMotor( ENABLEJOINTMOTOR_JOINT_ID, ENABLEJOINTMOTOR_FLAG )
+rc_setJointMotorSpeed( SETJOINTMOTORSPEED_JOINT_ID, SETJOINTMOTORSPEED_SPEED )
+rc_getJointMotorSpeed( GETJOINTMOTORSPEED_JOINT_ID )
+rc_setJointMaxMotorForce( SETJOINTMAXMOTORFORCE_JOINT_ID, SETJOINTMAXMOTORFORCE_FORCE )
+rc_getJointMaxMotorForce( GETJOINTMAXMOTORFORCE_JOINT_ID )
+rc_getJointMotorForce( GETJOINTMOTORFORCE_JOINT_ID, GETJOINTMOTORFORCE_INV_DT )
+rc_setJointMaxMotorTorque( SETJOINTMAXMOTORTORQUE_JOINT_ID, SETJOINTMAXMOTORTORQUE_TORQUE )
+rc_getJointMaxMotorTorque( GETJOINTMAXMOTORTORQUE_JOINT_ID )
+rc_getJointMotorTorque( GETJOINTMOTORTORQUE_JOINT_ID, GETJOINTMOTORTORQUE_INV_DT )
+rc_getJointGroundAnchorA( GETJOINTGROUNDANCHORA_JOINT_ID, &GETJOINTGROUNDANCHORA_X, &GETJOINTGROUNDANCHORA_Y )
+rc_getJointGroundAnchorB( GETJOINTGROUNDANCHORB_JOINT_ID, &GETJOINTGROUNDANCHORB_X, &GETJOINTGROUNDANCHORB_Y )
+rc_getJointLengthA( GETJOINTLENGTHA_JOINT_ID )
+rc_getJointLengthB( GETJOINTLENGTHB_JOINT_ID )
+rc_getJointCurrentLengthA( GETJOINTCURRENTLENGTHA_JOINT_ID )
+rc_getJointCurrentLengthB( GETJOINTCURRENTLENGTHB_JOINT_ID )
+rc_setJointOrigin( SETJOINTORIGIN_JOINT_ID, SETJOINTORIGIN_X, SETJOINTORIGIN_Y )
+rc_getJointAngle( GETJOINTANGLE_JOINT_ID )
+rc_getJointLinearSpeed( GETJOINTLINEARSPEED_JOINT_ID )
+rc_getJointAngularSpeed( GETJOINTANGULARSPEED_JOINT_ID )
rc_createTileSet( CREATETILESET_IMG_ID, CREATETILESET_TILE_W, CREATETILESET_TILE_H )
rc_setTileAnimationLength( SETTILEANIMATIONLENGTH_TILESET, SETTILEANIMATIONLENGTH_BASE_TILE, SETTILEANIMATIONLENGTH_NUM_FRAMES )
rc_getTileAnimationLength( GETTILEANIMATIONLENGTH_TILESET, GETTILEANIMATIONLENGTH_BASE_TILE )
@@ -540,6 +639,21 @@ rc_getActorAutoCulling( GETACTORAUTOCULLING_ACTOR )
rc_addActorShadow( ADDACTORSHADOW_ACTOR )
rc_removeActorShadow( REMOVEACTORSHADOW_ACTOR )
rc_actorExists( ACTOREXISTS_ACTOR )
+rc_createActorAnimation( CREATEACTORANIMATION_ACTOR, CREATEACTORANIMATION_START_FRAME, CREATEACTORANIMATION_END_FRAME, CREATEACTORANIMATION_SPEED )
+rc_setActorAnimation( SETACTORANIMATION_ACTOR, SETACTORANIMATION_ANIMATION, SETACTORANIMATION_NUM_LOOPS )
+rc_setActorAnimationSpeed( SETACTORANIMATIONSPEED_ACTOR, SETACTORANIMATIONSPEED_ANIMATION, SETACTORANIMATIONSPEED_SPEED )
+rc_setActorAnimationFrames( SETACTORANIMATIONFRAMES_ACTOR, SETACTORANIMATIONFRAMES_ANIMATION, SETACTORANIMATIONFRAMES_START_FRAME, SETACTORANIMATIONFRAMES_END_FRAME )
+rc_getActorCurrentAnimation( GETACTORCURRENTANIMATION_ACTOR )
+rc_getActorAnimationSpeed( GETACTORANIMATIONSPEED_ACTOR, GETACTORANIMATIONSPEED_ANIMATION )
+rc_getActorAnimationStartFrame( GETACTORANIMATIONSTARTFRAME_ACTOR, GETACTORANIMATIONSTARTFRAME_ANIMATION )
+rc_getActorAnimationEndFrame( GETACTORANIMATIONENDFRAME_ACTOR, GETACTORANIMATIONENDFRAME_ANIMATION )
+rc_setActorFrame( SETACTORFRAME_ACTOR, SETACTORFRAME_FRAME )
+rc_getActorFrame( GETACTORFRAME_ACTOR )
+rc_actorAnimationIsPlaying( ACTORANIMATIONISPLAYING_ACTOR )
+rc_numActorAnimationLoops( NUMACTORANIMATIONLOOPS_ACTOR )
+rc_setActorMD2Animation( SETACTORMD2ANIMATION_ACTOR, SETACTORMD2ANIMATION_ANIM, SETACTORMD2ANIMATION_NUM_LOOPS )
+rc_setActorMD2AnimationByName( SETACTORMD2ANIMATIONBYNAME_ACTOR, SETACTORMD2ANIMATIONBYNAME_ANIM_NAME$, SETACTORMD2ANIMATIONBYNAME_NUM_LOOPS )
+rc_deleteActorAnimation( DELETEACTORANIMATION_ACTOR, DELETEACTORANIMATION_ANIMATION )
rc_setGravity3D( SETGRAVITY3D_X, SETGRAVITY3D_Y, SETGRAVITY3D_Z )
rc_getGravity3D( &GETGRAVITY3D_X, &GETGRAVITY3D_Y, &GETGRAVITY3D_Z )
rc_setActorCollisionShape( SETACTORCOLLISIONSHAPE_ACTOR, SETACTORCOLLISIONSHAPE_SHAPE_TYPE, SETACTORCOLLISIONSHAPE_MASS )
@@ -579,7 +693,7 @@ rc_applyActorImpulseLocal( APPLYACTORIMPULSELOCAL_ACTOR, APPLYACTORIMPULSELOCAL
rc_applyActorImpulseWorld( APPLYACTORIMPULSEWORLD_ACTOR, APPLYACTORIMPULSEWORLD_X, APPLYACTORIMPULSEWORLD_Y, APPLYACTORIMPULSEWORLD_Z, APPLYACTORIMPULSEWORLD_REL_X, APPLYACTORIMPULSEWORLD_REL_Y, APPLYACTORIMPULSEWORLD_REL_Z )
rc_clearActorForces( CLEARACTORFORCES_ACTOR )
rc_updateActorInertiaTensor( UPDATEACTORINERTIATENSOR_ACTOR )
-rc_getActorCOMPosition( GETACTORCOMPOSITION_ACTOR, &GETACTORCOMPOSITION_X, &GETACTORCOMPOSITION_Y, &GETACTORCOMPOSITION_Z )
+rc_getActorCenter( GETACTORCENTER_ACTOR, &GETACTORCENTER_X, &GETACTORCENTER_Y, &GETACTORCENTER_Z )
rc_getActorRotationQ( GETACTORROTATIONQ_ACTOR, &GETACTORROTATIONQ_X, &GETACTORROTATIONQ_Y, &GETACTORROTATIONQ_Z, &GETACTORROTATIONQ_W )
rc_getActorLinearVelocityWorld( GETACTORLINEARVELOCITYWORLD_ACTOR, &GETACTORLINEARVELOCITYWORLD_X, &GETACTORLINEARVELOCITYWORLD_Y, &GETACTORLINEARVELOCITYWORLD_Z )
rc_getActorAngularVelocityWorld( GETACTORANGULARVELOCITYWORLD_ACTOR, &GETACTORANGULARVELOCITYWORLD_X, &GETACTORANGULARVELOCITYWORLD_Y, &GETACTORANGULARVELOCITYWORLD_Z )
@@ -587,7 +701,7 @@ rc_setActorLinearVelocityLocal( SETACTORLINEARVELOCITYLOCAL_ACTOR, SETACTORLINE
rc_setActorLinearVelocityWorld( SETACTORLINEARVELOCITYWORLD_ACTOR, SETACTORLINEARVELOCITYWORLD_X, SETACTORLINEARVELOCITYWORLD_Y, SETACTORLINEARVELOCITYWORLD_Z )
rc_setActorAngularVelocityLocal( SETACTORANGULARVELOCITYLOCAL_ACTOR, SETACTORANGULARVELOCITYLOCAL_X, SETACTORANGULARVELOCITYLOCAL_Y, SETACTORANGULARVELOCITYLOCAL_Z )
rc_setActorAngularVelocityWorld( SETACTORANGULARVELOCITYWORLD_ACTOR, SETACTORANGULARVELOCITYWORLD_X, SETACTORANGULARVELOCITYWORLD_Y, SETACTORANGULARVELOCITYWORLD_Z )
-rc_getActorLocalPointVelocity( GETACTORLOCALPOINTVELOCITY_ACTOR, GETACTORLOCALPOINTVELOCITY_REL_X, GETACTORLOCALPOINTVELOCITY_REL_Y, GETACTORLOCALPOINTVELOCITY_REL_Z, &GETACTORLOCALPOINTVELOCITY_X, &GETACTORLOCALPOINTVELOCITY_Y, &GETACTORLOCALPOINTVELOCITY_Z )
+rc_getActorVelocityInLocalPoint( GETACTORVELOCITYINLOCALPOINT_ACTOR, GETACTORVELOCITYINLOCALPOINT_REL_X, GETACTORVELOCITYINLOCALPOINT_REL_Y, GETACTORVELOCITYINLOCALPOINT_REL_Z, &GETACTORVELOCITYINLOCALPOINT_X, &GETACTORVELOCITYINLOCALPOINT_Y, &GETACTORVELOCITYINLOCALPOINT_Z )
rc_getActorLinearVelocityLocal( GETACTORLINEARVELOCITYLOCAL_ACTOR, &GETACTORLINEARVELOCITYLOCAL_X, &GETACTORLINEARVELOCITYLOCAL_Y, &GETACTORLINEARVELOCITYLOCAL_Z )
rc_getActorAngularVelocityLocal( GETACTORANGULARVELOCITYLOCAL_ACTOR, &GETACTORANGULARVELOCITYLOCAL_X, &GETACTORANGULARVELOCITYLOCAL_Y, &GETACTORANGULARVELOCITYLOCAL_Z )
rc_getActorAABB( GETACTORAABB_ACTOR, &GETACTORAABB_MIN_X, &GETACTORAABB_MIN_Y, &GETACTORAABB_MIN_Z, &GETACTORAABB_MAX_X, &GETACTORAABB_MAX_Y, &GETACTORAABB_MAX_Z )
@@ -803,21 +917,6 @@ rc_scaleTerrainTexture( SCALETERRAINTEXTURE_ACTOR, SCALETERRAINTEXTURE_SCALE,
rc_setTerrainCameraMovementDelta( SETTERRAINCAMERAMOVEMENTDELTA_ACTOR, SETTERRAINCAMERAMOVEMENTDELTA_DELTA )
rc_setTerrainCameraRotationDelta( SETTERRAINCAMERAROTATIONDELTA_ACTOR, SETTERRAINCAMERAROTATIONDELTA_DELTA )
rc_setTerrainPatchLOD( SETTERRAINPATCHLOD_ACTOR, SETTERRAINPATCHLOD_PATCHX, SETTERRAINPATCHLOD_PATCHZ, SETTERRAINPATCHLOD_LOD )
-rc_createActorAnimation( CREATEACTORANIMATION_ACTOR, CREATEACTORANIMATION_START_FRAME, CREATEACTORANIMATION_END_FRAME, CREATEACTORANIMATION_SPEED )
-rc_setActorAnimation( SETACTORANIMATION_ACTOR, SETACTORANIMATION_ANIMATION, SETACTORANIMATION_NUM_LOOPS )
-rc_setActorAnimationSpeed( SETACTORANIMATIONSPEED_ACTOR, SETACTORANIMATIONSPEED_ANIMATION, SETACTORANIMATIONSPEED_SPEED )
-rc_setActorAnimationFrames( SETACTORANIMATIONFRAMES_ACTOR, SETACTORANIMATIONFRAMES_ANIMATION, SETACTORANIMATIONFRAMES_START_FRAME, SETACTORANIMATIONFRAMES_END_FRAME )
-rc_getActorCurrentAnimation( GETACTORCURRENTANIMATION_ACTOR )
-rc_getActorAnimationSpeed( GETACTORANIMATIONSPEED_ACTOR, GETACTORANIMATIONSPEED_ANIMATION )
-rc_getActorAnimationStartFrame( GETACTORANIMATIONSTARTFRAME_ACTOR, GETACTORANIMATIONSTARTFRAME_ANIMATION )
-rc_getActorAnimationEndFrame( GETACTORANIMATIONENDFRAME_ACTOR, GETACTORANIMATIONENDFRAME_ANIMATION )
-rc_setActorFrame( SETACTORFRAME_ACTOR, SETACTORFRAME_FRAME )
-rc_getActorFrame( GETACTORFRAME_ACTOR )
-rc_actorAnimationIsPlaying( ACTORANIMATIONISPLAYING_ACTOR )
-rc_numActorAnimationLoops( NUMACTORANIMATIONLOOPS_ACTOR )
-rc_setActorMD2Animation( SETACTORMD2ANIMATION_ACTOR, SETACTORMD2ANIMATION_ANIM, SETACTORMD2ANIMATION_NUM_LOOPS )
-rc_setActorMD2AnimationByName( SETACTORMD2ANIMATIONBYNAME_ACTOR, SETACTORMD2ANIMATIONBYNAME_ANIM_NAME$, SETACTORMD2ANIMATIONBYNAME_NUM_LOOPS )
-rc_deleteActorAnimation( DELETEACTORANIMATION_ACTOR, DELETEACTORANIMATION_ANIMATION )
rc_createMaterial( )
rc_deleteMaterial( DELETEMATERIAL_MATERIAL_ID )
rc_setActorMaterial( SETACTORMATERIAL_ACTOR, SETACTORMATERIAL_MATERIAL_NUM, SETACTORMATERIAL_MATERIAL_ID )
diff --git a/rcbasic_build/intern_lib/actor_physics.bas b/rcbasic_build/intern_lib/actor_physics.bas
index 118972b..72d4e54 100644
--- a/rcbasic_build/intern_lib/actor_physics.bas
+++ b/rcbasic_build/intern_lib/actor_physics.bas
@@ -37,7 +37,7 @@ sub applyActorImpulseLocal( actor, x, y, z, rel_x, rel_y, rel_z)
sub applyActorImpulseWorld( actor, x, y, z, rel_x, rel_y, rel_z)
sub clearActorForces( actor)
sub updateActorInertiaTensor( actor)
-sub getActorCOMPosition( actor, ByRef x, ByRef y, ByRef z)
+sub getActorCenter( actor, ByRef x, ByRef y, ByRef z)
sub getActorRotationQ( actor, ByRef x, ByRef y, ByRef z, ByRef w)
sub getActorLinearVelocityWorld( actor, ByRef x, ByRef y, ByRef z)
sub getActorAngularVelocityWorld( actor, ByRef x, ByRef y, ByRef z)
@@ -45,7 +45,7 @@ sub setActorLinearVelocityLocal( actor, x, y, z)
sub setActorLinearVelocityWorld( actor, x, y, z)
sub setActorAngularVelocityLocal( actor, x, y, z)
sub setActorAngularVelocityWorld( actor, x, y, z)
-sub getActorLocalPointVelocity( actor, rel_x, rel_y, rel_z, ByRef x, ByRef y, ByRef z)
+sub getActorVelocityInLocalPoint( actor, rel_x, rel_y, rel_z, ByRef x, ByRef y, ByRef z)
sub getActorLinearVelocityLocal( actor, ByRef x, ByRef y, ByRef z)
sub getActorAngularVelocityLocal( actor, ByRef x, ByRef y, ByRef z)
sub getActorAABB( actor, ByRef min_x, ByRef min_y, ByRef min_z, ByRef max_x, ByRef max_y, ByRef max_z)
diff --git a/rcbasic_build/intern_lib/joint2D.bas b/rcbasic_build/intern_lib/joint2D.bas
index e69de29..2233a74 100644
--- a/rcbasic_build/intern_lib/joint2D.bas
+++ b/rcbasic_build/intern_lib/joint2D.bas
@@ -0,0 +1,67 @@
+function createDistanceJoint( spriteA, spriteB, aX, aY, bX, bY)
+function createFrictionJoint( spriteA, spriteB, x, y)
+function createGearJoint( jointA, jointB, g_ratio)
+function createMotorJoint( spriteA, spriteB)
+function createPrismaticJoint( spriteA, spriteB, aX, aY, axisX, axisY)
+function createPulleyJoint( spriteA, spriteB, gaX, gaY, gbX, gbY, aX, aY, bX, bY, j_ratio)
+function createRevoluteJoint( spriteA, spriteB, x, y)
+function createWeldJoint( spriteA, spriteB, x, y)
+function createWheelJoint( spriteA, spriteB, aX, aY, axisX, axisY)
+sub getJointWorldAnchorA( joint_id, ByRef x, ByRef y)
+sub getJointWorldAnchorB( joint_id, ByRef x, ByRef y)
+sub getJointReactionForce( joint_id, inv_dt, ByRef x, ByRef y)
+function getJointReactionTorque( joint_id, inv_dt)
+sub getJointLocalAnchorA( joint_id, ByRef x, ByRef y)
+sub getJointLocalAnchorB( joint_id, ByRef x, ByRef y)
+sub setJointLength( joint_id, jlen)
+function getJointLength( joint_id)
+sub setJointMinLength( joint_id, jlen)
+function getJointMinLength( joint_id)
+sub setJointMaxLength( joint_id, jlen)
+function getJointMaxLength( joint_id)
+function getJointCurrentLength( joint_id)
+sub setJointStiffness( joint_id, stiffness)
+function getJointStiffness( joint_id)
+sub setJointDamping( joint_id, damping)
+function getJointDamping( joint_id)
+sub setJointMaxForce( joint_id, force)
+function getJointMaxForce( joint_id)
+sub setJointMaxTorque( joint_id, torque)
+function getJointMaxTorque( joint_id)
+sub setJointCorrectionFactor( joint_id, factor)
+function getJointCorrectionFactor( joint_id)
+sub setJointRatio( joint_id, j_ratio)
+function getJointRatio( joint_id)
+sub setJointLinearOffset( joint_id, x, y)
+sub getJointLinearOffset( joint_id, ByRef x, ByRef y)
+sub setJointAngularOffset( joint_id, angleOffset)
+function getJointAngularOffset( joint_id)
+sub getJointLocalAxisA( joint_id, ByRef x, ByRef y)
+function getJointReferenceAngle( joint_id)
+function getJointTranslation( joint_id)
+function getJointSpeed( joint_id)
+function jointIsLimitEnabled( joint_id)
+sub enableJointLimit( joint_id, flag)
+function getJointLowerLimit( joint_id)
+function getJointUpperLimit( joint_id)
+sub setJointLimits( joint_id, lower_limit, upper_limit)
+function jointMotorIsEnabled( joint_id)
+sub enableJointMotor( joint_id, flag)
+sub setJointMotorSpeed( joint_id, speed)
+function getJointMotorSpeed( joint_id)
+sub setJointMaxMotorForce( joint_id, force)
+function getJointMaxMotorForce( joint_id)
+function getJointMotorForce( joint_id, inv_dt)
+sub setJointMaxMotorTorque( joint_id, torque)
+function getJointMaxMotorTorque( joint_id)
+function getJointMotorTorque( joint_id, inv_dt)
+sub getJointGroundAnchorA( joint_id, ByRef x, ByRef y)
+sub getJointGroundAnchorB( joint_id, ByRef x, ByRef y)
+function getJointLengthA( joint_id)
+function getJointLengthB( joint_id)
+function getJointCurrentLengthA( joint_id)
+function getJointCurrentLengthB( joint_id)
+sub setJointOrigin( joint_id, x, y)
+function getJointAngle( joint_id)
+function getJointLinearSpeed( joint_id)
+function getJointAngularSpeed( joint_id)
diff --git a/rcbasic_build/intern_lib/sprite_physics.bas b/rcbasic_build/intern_lib/sprite_physics.bas
index e69de29..c3247fd 100644
--- a/rcbasic_build/intern_lib/sprite_physics.bas
+++ b/rcbasic_build/intern_lib/sprite_physics.bas
@@ -0,0 +1,32 @@
+sub getSpriteCenter( spr_id, ByRef x, ByRef y)
+sub setSpriteLinearVelocity( spr_id, x, y)
+sub getSpriteLinearVelocity( spr_id, ByRef x, ByRef y)
+sub setSpriteAngularVelocity( spr_id, av)
+function getSpriteAngularVelocity( spr_id)
+sub applySpriteForce( spr_id, fX, fY, pX, pY)
+sub applySpriteCentralForce( spr_id, x, y)
+sub applySpriteTorque( spr_id, torque)
+sub applySpriteLinearImpulse( spr_id, iX, iY, pX, pY)
+sub applySpriteAngularImpulse( spr_id, impulse)
+function getSpriteMass( spr_id)
+function getSpriteInertia( spr_id)
+sub getSpriteWorldPoint( spr_id, lX, lY, ByRef x, ByRef y)
+sub getSpriteWorldVector( spr_id, lX, lY, ByRef x, ByRef y)
+sub getSpriteLocalPoint( spr_id, wX, wY, ByRef x, ByRef y)
+sub getSpriteLocalVector( spr_id, wX, wY, ByRef x, ByRef y)
+sub getSpriteLinearVelocityFromLocalPoint( spr_id, pX, pY, ByRef x, ByRef y)
+sub getSpriteLinearVelocityFromWorldPoint( spr_id, wX, wY, ByRef x, ByRef y)
+function getSpriteLinearDamping( spr_id)
+sub setSpriteLinearDamping( spr_id, linearDamping)
+function getSpriteAngularDamping( spr_id)
+sub setSpriteAngularDamping( spr_id, angularDamping)
+function getSpriteGravityScale( spr_id)
+sub setSpriteGravityScale( spr_id, g_scale)
+sub setSpriteBullet( spr_id, flag)
+function spriteIsBullet( spr_id)
+sub setSpriteSleepAllowed( spr_id, flag)
+function spriteSleepAllowed( spr_id)
+sub setSpriteAwake( spr_id, flag)
+function spriteIsAwake( spr_id)
+sub setSpriteFixedRotation( spr_id, flag)
+function spriteIsFixedRotation( spr_id)
diff --git a/rcbasic_build/rc_builtin.h b/rcbasic_build/rc_builtin.h
index f2a194a..45939a0 100755
--- a/rcbasic_build/rc_builtin.h
+++ b/rcbasic_build/rc_builtin.h
@@ -519,8 +519,6 @@ void init_embedded_functions()
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("state", ID_TYPE_NUM);
embed_function("OpenCanvasSpriteLayer", 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);
@@ -1404,6 +1402,397 @@ void init_embedded_functions()
embed_function("DeleteSpriteAnimation", ID_TYPE_SUB);
add_embedded_arg("sprite", ID_TYPE_NUM);
add_embedded_arg("animation", ID_TYPE_NUM);
+ embed_function("getSpriteCenter", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("setSpriteLinearVelocity", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("getSpriteLinearVelocity", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("setSpriteAngularVelocity", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("av", ID_TYPE_NUM);
+ embed_function("getSpriteAngularVelocity", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("applySpriteForce", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("fX", ID_TYPE_NUM);
+ add_embedded_arg("fY", ID_TYPE_NUM);
+ add_embedded_arg("pX", ID_TYPE_NUM);
+ add_embedded_arg("pY", ID_TYPE_NUM);
+ embed_function("applySpriteCentralForce", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("applySpriteTorque", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("torque", ID_TYPE_NUM);
+ embed_function("applySpriteLinearImpulse", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("iX", ID_TYPE_NUM);
+ add_embedded_arg("iY", ID_TYPE_NUM);
+ add_embedded_arg("pX", ID_TYPE_NUM);
+ add_embedded_arg("pY", ID_TYPE_NUM);
+ embed_function("applySpriteAngularImpulse", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("impulse", ID_TYPE_NUM);
+ embed_function("getSpriteMass", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("getSpriteInertia", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("getSpriteWorldPoint", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("lX", ID_TYPE_NUM);
+ add_embedded_arg("lY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteWorldVector", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("lX", ID_TYPE_NUM);
+ add_embedded_arg("lY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteLocalPoint", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("wX", ID_TYPE_NUM);
+ add_embedded_arg("wY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteLocalVector", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("wX", ID_TYPE_NUM);
+ add_embedded_arg("wY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteLinearVelocityFromLocalPoint", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("pX", ID_TYPE_NUM);
+ add_embedded_arg("pY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteLinearVelocityFromWorldPoint", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("wX", ID_TYPE_NUM);
+ add_embedded_arg("wY", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getSpriteLinearDamping", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteLinearDamping", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("linearDamping", ID_TYPE_NUM);
+ embed_function("getSpriteAngularDamping", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteAngularDamping", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("angularDamping", ID_TYPE_NUM);
+ embed_function("getSpriteGravityScale", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteGravityScale", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("g_scale", ID_TYPE_NUM);
+ embed_function("setSpriteBullet", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("spriteIsBullet", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteSleepAllowed", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("spriteSleepAllowed", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteAwake", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("spriteIsAwake", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("setSpriteFixedRotation", ID_TYPE_SUB);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("spriteIsFixedRotation", ID_TYPE_FN_NUM);
+ add_embedded_arg("spr_id", ID_TYPE_NUM);
+ embed_function("createDistanceJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("aX", ID_TYPE_NUM);
+ add_embedded_arg("aY", ID_TYPE_NUM);
+ add_embedded_arg("bX", ID_TYPE_NUM);
+ add_embedded_arg("bY", ID_TYPE_NUM);
+ embed_function("createFrictionJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("createGearJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("jointA", ID_TYPE_NUM);
+ add_embedded_arg("jointB", ID_TYPE_NUM);
+ add_embedded_arg("g_ratio", ID_TYPE_NUM);
+ embed_function("createMotorJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ embed_function("createPrismaticJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("aX", ID_TYPE_NUM);
+ add_embedded_arg("aY", ID_TYPE_NUM);
+ add_embedded_arg("axisX", ID_TYPE_NUM);
+ add_embedded_arg("axisY", ID_TYPE_NUM);
+ embed_function("createPulleyJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("gaX", ID_TYPE_NUM);
+ add_embedded_arg("gaY", ID_TYPE_NUM);
+ add_embedded_arg("gbX", ID_TYPE_NUM);
+ add_embedded_arg("gbY", ID_TYPE_NUM);
+ add_embedded_arg("aX", ID_TYPE_NUM);
+ add_embedded_arg("aY", ID_TYPE_NUM);
+ add_embedded_arg("bX", ID_TYPE_NUM);
+ add_embedded_arg("bY", ID_TYPE_NUM);
+ add_embedded_arg("j_ratio", ID_TYPE_NUM);
+ embed_function("createRevoluteJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("createWeldJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("createWheelJoint", ID_TYPE_FN_NUM);
+ add_embedded_arg("spriteA", ID_TYPE_NUM);
+ add_embedded_arg("spriteB", ID_TYPE_NUM);
+ add_embedded_arg("aX", ID_TYPE_NUM);
+ add_embedded_arg("aY", ID_TYPE_NUM);
+ add_embedded_arg("axisX", ID_TYPE_NUM);
+ add_embedded_arg("axisY", ID_TYPE_NUM);
+ embed_function("getJointWorldAnchorA", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointWorldAnchorB", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointReactionForce", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("inv_dt", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointReactionTorque", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("inv_dt", ID_TYPE_NUM);
+ embed_function("getJointLocalAnchorA", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointLocalAnchorB", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("setJointLength", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("jlen", ID_TYPE_NUM);
+ embed_function("getJointLength", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointMinLength", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("jlen", ID_TYPE_NUM);
+ embed_function("getJointMinLength", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointMaxLength", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("jlen", ID_TYPE_NUM);
+ embed_function("getJointMaxLength", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointCurrentLength", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointStiffness", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("stiffness", ID_TYPE_NUM);
+ embed_function("getJointStiffness", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointDamping", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("damping", ID_TYPE_NUM);
+ embed_function("getJointDamping", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointMaxForce", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("force", ID_TYPE_NUM);
+ embed_function("getJointMaxForce", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointMaxTorque", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("torque", ID_TYPE_NUM);
+ embed_function("getJointMaxTorque", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointCorrectionFactor", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("factor", ID_TYPE_NUM);
+ embed_function("getJointCorrectionFactor", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointRatio", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("j_ratio", ID_TYPE_NUM);
+ embed_function("getJointRatio", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointLinearOffset", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("getJointLinearOffset", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("setJointAngularOffset", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("angleOffset", ID_TYPE_NUM);
+ embed_function("getJointAngularOffset", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointLocalAxisA", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointReferenceAngle", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointTranslation", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("jointIsLimitEnabled", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("enableJointLimit", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("getJointLowerLimit", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointUpperLimit", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointLimits", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("lower_limit", ID_TYPE_NUM);
+ add_embedded_arg("upper_limit", ID_TYPE_NUM);
+ embed_function("jointMotorIsEnabled", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("enableJointMotor", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("flag", ID_TYPE_NUM);
+ embed_function("setJointMotorSpeed", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("speed", ID_TYPE_NUM);
+ embed_function("getJointMotorSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointMaxMotorForce", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("force", ID_TYPE_NUM);
+ embed_function("getJointMaxMotorForce", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointMotorForce", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("inv_dt", ID_TYPE_NUM);
+ embed_function("setJointMaxMotorTorque", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("torque", ID_TYPE_NUM);
+ embed_function("getJointMaxMotorTorque", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointMotorTorque", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("inv_dt", ID_TYPE_NUM);
+ embed_function("getJointGroundAnchorA", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointGroundAnchorB", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("y", ID_TYPE_BYREF_NUM);
+ embed_function("getJointLengthA", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointLengthB", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointCurrentLengthA", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointCurrentLengthB", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("setJointOrigin", ID_TYPE_SUB);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("getJointAngle", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointLinearSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("getJointAngularSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("joint_id", ID_TYPE_NUM);
+ embed_function("CreateTileSet", ID_TYPE_FN_NUM);
+ add_embedded_arg("img_id", ID_TYPE_NUM);
+ add_embedded_arg("tile_w", ID_TYPE_NUM);
+ add_embedded_arg("tile_h", ID_TYPE_NUM);
+ embed_function("SetTileAnimationLength", ID_TYPE_SUB);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ add_embedded_arg("num_frames", ID_TYPE_NUM);
+ embed_function("GetTileAnimationLength", ID_TYPE_FN_NUM);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ embed_function("SetTileAnimationFrame", ID_TYPE_SUB);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ add_embedded_arg("anim_frame", ID_TYPE_NUM);
+ add_embedded_arg("tile_frame", ID_TYPE_NUM);
+ embed_function("GetTileAnimationFrame", ID_TYPE_FN_NUM);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ add_embedded_arg("anim_frame", ID_TYPE_NUM);
+ embed_function("SetTileAnimationSpeed", ID_TYPE_SUB);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ add_embedded_arg("speed", ID_TYPE_NUM);
+ embed_function("GetTileAnimationSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("base_tile", ID_TYPE_NUM);
+ embed_function("CreateTileMap", ID_TYPE_FN_NUM);
+ add_embedded_arg("tileset", ID_TYPE_NUM);
+ add_embedded_arg("widthInTiles", ID_TYPE_NUM);
+ add_embedded_arg("heightInTiles", ID_TYPE_NUM);
+ embed_function("SetTileMapSize", ID_TYPE_SUB);
+ add_embedded_arg("tilemap", ID_TYPE_NUM);
+ add_embedded_arg("widthInTiles", ID_TYPE_NUM);
+ add_embedded_arg("heightInTiles", ID_TYPE_NUM);
+ embed_function("GetTileMapSize", ID_TYPE_SUB);
+ add_embedded_arg("tilemap", ID_TYPE_NUM);
+ add_embedded_arg("widthInTiles", ID_TYPE_BYREF_NUM);
+ add_embedded_arg("heightInTiles", ID_TYPE_BYREF_NUM);
+ embed_function("SetTile", ID_TYPE_SUB);
+ add_embedded_arg("tilemap", ID_TYPE_NUM);
+ add_embedded_arg("tile", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("GetTile", ID_TYPE_FN_NUM);
+ add_embedded_arg("tilemap", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ embed_function("FillTile", ID_TYPE_SUB);
+ add_embedded_arg("tilemap", ID_TYPE_NUM);
+ add_embedded_arg("tile", ID_TYPE_NUM);
+ add_embedded_arg("x", ID_TYPE_NUM);
+ add_embedded_arg("y", ID_TYPE_NUM);
+ add_embedded_arg("widthInTiles", ID_TYPE_NUM);
+ add_embedded_arg("heightInTiles", ID_TYPE_NUM);
+ embed_function("DrawTileMap", ID_TYPE_SUB);
+ add_embedded_arg("tilemap", 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("offset_x", ID_TYPE_NUM);
+ add_embedded_arg("offset_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);
@@ -1525,6 +1914,55 @@ void init_embedded_functions()
add_embedded_arg("actor", ID_TYPE_NUM);
embed_function("ActorExists", ID_TYPE_FN_NUM);
add_embedded_arg("actor", ID_TYPE_NUM);
+ embed_function("CreateActorAnimation", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("start_frame", ID_TYPE_NUM);
+ add_embedded_arg("end_frame", ID_TYPE_NUM);
+ add_embedded_arg("speed", ID_TYPE_NUM);
+ embed_function("SetActorAnimation", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
+ add_embedded_arg("num_loops", ID_TYPE_NUM);
+ embed_function("SetActorAnimationSpeed", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
+ add_embedded_arg("speed", ID_TYPE_NUM);
+ embed_function("SetActorAnimationFrames", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
+ add_embedded_arg("start_frame", ID_TYPE_NUM);
+ add_embedded_arg("end_frame", ID_TYPE_NUM);
+ embed_function("GetActorCurrentAnimation", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ embed_function("GetActorAnimationSpeed", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
+ embed_function("GetActorAnimationStartFrame", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
+ embed_function("GetActorAnimationEndFrame", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", 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("GetActorFrame", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ embed_function("ActorAnimationIsPlaying", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ embed_function("NumActorAnimationLoops", ID_TYPE_FN_NUM);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ embed_function("SetActorMD2Animation", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("anim", ID_TYPE_NUM);
+ add_embedded_arg("num_loops", ID_TYPE_NUM);
+ embed_function("SetActorMD2AnimationByName", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("anim_name$", ID_TYPE_STR);
+ add_embedded_arg("num_loops", ID_TYPE_NUM);
+ embed_function("DeleteActorAnimation", ID_TYPE_SUB);
+ add_embedded_arg("actor", ID_TYPE_NUM);
+ add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("SetGravity3D", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);
@@ -1693,7 +2131,7 @@ void init_embedded_functions()
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);
+ embed_function("getActorCenter", 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);
@@ -1734,7 +2172,7 @@ void init_embedded_functions()
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);
+ embed_function("getActorVelocityInLocalPoint", 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);
@@ -2436,55 +2874,6 @@ void init_embedded_functions()
add_embedded_arg("patchX", ID_TYPE_NUM);
add_embedded_arg("patchZ", ID_TYPE_NUM);
add_embedded_arg("LOD", ID_TYPE_NUM);
- embed_function("CreateActorAnimation", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("start_frame", ID_TYPE_NUM);
- add_embedded_arg("end_frame", ID_TYPE_NUM);
- add_embedded_arg("speed", ID_TYPE_NUM);
- embed_function("SetActorAnimation", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
- add_embedded_arg("num_loops", ID_TYPE_NUM);
- embed_function("SetActorAnimationSpeed", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
- add_embedded_arg("speed", ID_TYPE_NUM);
- embed_function("SetActorAnimationFrames", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
- add_embedded_arg("start_frame", ID_TYPE_NUM);
- add_embedded_arg("end_frame", ID_TYPE_NUM);
- embed_function("GetActorCurrentAnimation", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- embed_function("GetActorAnimationSpeed", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
- embed_function("GetActorAnimationStartFrame", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
- embed_function("GetActorAnimationEndFrame", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", 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("GetActorFrame", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- embed_function("ActorAnimationIsPlaying", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- embed_function("NumActorAnimationLoops", ID_TYPE_FN_NUM);
- add_embedded_arg("actor", ID_TYPE_NUM);
- embed_function("SetActorMD2Animation", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("anim", ID_TYPE_NUM);
- add_embedded_arg("num_loops", ID_TYPE_NUM);
- embed_function("SetActorMD2AnimationByName", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("anim_name$", ID_TYPE_STR);
- add_embedded_arg("num_loops", ID_TYPE_NUM);
- embed_function("DeleteActorAnimation", ID_TYPE_SUB);
- add_embedded_arg("actor", ID_TYPE_NUM);
- add_embedded_arg("animation", ID_TYPE_NUM);
embed_function("createMaterial", ID_TYPE_FN_NUM);
embed_function("deleteMaterial", ID_TYPE_SUB);
add_embedded_arg("material_id", ID_TYPE_NUM);
diff --git a/rcbasic_build/rcbasic4_changes.ods b/rcbasic_build/rcbasic4_changes.ods
index 596a787218fceaff5b7f49838057344627994648..9ab6dd9fa2c5b018aa5569e92137ed08cd579710 100644
GIT binary patch
delta 3694649
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