SDK 1.14 is out.
Features:
-Bump mapping with specular highlights on any surface, with any lighting style.
-New collision system lets you control which objects collide with which. Use collision on any mesh (like Blitz3D).
-Fast built-in lightmapper.
-No more BuildWorld(). You can collapse brushes to meshes and set up collision any way you like.
-More stable than any version to date. I've run a lot of memory tests and loaded/deleted entire worlds in a loop. It's very good.
-30 pages of documentation in a CHM help file.
-Experimental dll support.

Here is an example program:
This gives you an idea of what the docs and API are like:
Features:
-Bump mapping with specular highlights on any surface, with any lighting style.
-New collision system lets you control which objects collide with which. Use collision on any mesh (like Blitz3D).
-Fast built-in lightmapper.
-No more BuildWorld(). You can collapse brushes to meshes and set up collision any way you like.
-More stable than any version to date. I've run a lot of memory tests and loaded/deleted entire worlds in a loop. It's very good.
-30 pages of documentation in a CHM help file.
-Experimental dll support.

Here is an example program:
Import leadwerks.engine SetAudioDriver "OpenALEx" SetGraphicsDriver GLGraphicsDriver() Graphics 800,600,0,60 'Create a new world world:TWorld=CreateWorld() 'Create a camera camera:TCamera=CreateCamera() CameraClsColor camera,0,0,255 CameraFogColor camera,128,128,128,128 CameraFogRange camera,1000,4000 CameraFogMode camera,True CameraClsMode camera,0,1 'Load a scene LoadWorld("maps\testscene.3dw") 'Calculate lightmaps BuildLighting() 'Bodies-bodies collision Collisions 1,1,1 'Bodies-world collision Collisions 1,2,1 'Collapse scene brushes into a single mesh collapsedbrushes:TMesh=CollapseBrushes() EntityType collapsedbrushes,2 UpdateCollision collapsedbrushes 'Process the scene For entity:TEntity=EachIn CurrentWorld().entities Select EntityClass(entity) Case "terrain" EntityType entity,2 Case "brush" If EntityHidden(entity) EntityType entity,2 Case "body" EntityType entity,1 End Select Next 'Create a player player:TPlayer=CreatePlayer() EntityType player,1 PositionEntity player,0,200,-600 'Enable tri-linear filter TFilter 1 'AFilter MaxAFilter()' Anisotropic filter 'Load footstep sounds footstep_1:TSound=LoadSound("sound\footsteps\stone1.wav") footstep_2:TSound=LoadSound("sound\footsteps\stone2.wav") footstep_3:TSound=LoadSound("sound\footsteps\stone3.wav") footstep_4:TSound=LoadSound("sound\footsteps\stone4.wav") If EAXSupported() EnableEAX EAXEffect EAX_ALLEY EndIf 'Load some music music:TSound=LoadSound("sound\new_horizons.ogg") channel:TChannel=CueSound(music) SetChannelVolume channel,0.25 ResumeChannel channel HideMouse MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 Repeat 'Player input to exit program If KeyHit(KEY_ESCAPE) End If AppTerminate() End 'Player controls strafe=KeyDown(KEY_W)-KeyDown(KEY_S) move=KeyDown(KEY_D)-KeyDown(KEY_A) jump=KeyHit(KEY_SPACE) 'Player footsteps If player.onground timeonground#=timeonground#+AppSpeed() If move<>0 Or strafe<>0 If timeonground>25.0 Select Rand(1,4) Case 1 PlaySound footstep_1 Case 2 PlaySound footstep_2 Case 3 PlaySound footstep_3 Case 4 PlaySound footstep_4 End Select timeonground=0 EndIf EndIf EndIf 'Set user input to move the player object UpdatePlayer player,strafe,move,jump 'Mouse input dx#=Curve(MouseX()-GraphicsWidth()/2,dx#,2.0) dy#=Curve(MouseY()-GraphicsHeight()/2,dy#,2.0) pitch#=EntityPitch(camera)+dy*0.25 yaw#=EntityYaw(camera)-dx*0.25 RotateEntity camera,pitch,yaw,0 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 RotateEntity player,0,yaw,0 'Update physics, sound, etc. UpdateWorld() 'Position the camera PositionEntity camera,player.position.x,Curve(player.position.y+180,camera.position.y,4),player.position.z 'Render the world RenderWorld() 'Display the framerate lwSetBlend BLEND_ALPHA lwSetColor 255,255,255,192 lwDrawText "FPS: "+UPS(),0,0 'Flip the graphics buffer Flip 1 Forever
This gives you an idea of what the docs and API are like: