The source code you requested, ckob :)
Strict
Framework Usr.ColdSteel
Import BRL.Retro
Import BRL.System
Type Settings
Global path$ = Replace$(CurrentDir$(), "", "/") + "/"
Global mat_path$ = "materials/"
Global part_path$ = "particles/"
Global driver = 0
Global screen_res[] = [640, 480, 16]
Global fullscreen = False
Global antialias = False
Global vsync = False
Global stencil = False
End Type
'Init lib
If Not csLibInit("", "") Then Notify "Invalid serial"; End
'Parse settings file, and initialize the engine
ParseSettings()
'Device
csDeviceCaption "ColdSteel Temple Example - BlitzMax"
csMouseHide True
'Ambient light
csSceneAmbient csGetColor(255, 255, 255, 255)
'Fog
csSceneFog csGetColor(0,20,20,120), 0, 12500
'Load skybox
Local top = csTextureLoad("skybox/rocky_up.jpg", True)
Local bottom = csTextureLoad("skybox/rocky_dn.jpg", True)
Local left_ = csTextureLoad("skybox/rocky_lf.jpg", True)
Local right_ = csTextureLoad("skybox/rocky_rt.jpg", True)
Local front = csTextureLoad("skybox/rocky_ft.jpg", True)
Local back = csTextureLoad("skybox/rocky_bk.jpg", True)
csSceneSkybox top, bottom, left_, right_, front, back
'Load map
csSceneTexturePath "maps/temple01/"
Local mesh = csMeshLoad("maps/temple01/temple01.my3d")
Local map = csMeshOctreeNode(mesh, 0, CSCI_OCTREE, False)
csMeshFree mesh
'Load skydome
mesh = csMeshLoad("maps/temple01/skydome.my3d")
Local skydome = csMeshNode(mesh, 0, 0, 0)
csNodeSetMaterial skydome, csMaterialFind("clouds"), 0
csMeshFree mesh
'Load particles
Local partdata = csParticleDataFind("flare")
Local emitter = csEmitterNode(partdata, 0)
csEmitterAddFadeOutAffector emitter, 0, 1000
csEmitterAddGravityAffector emitter, 0, 0.3, 0, 2400
'csNodeSetMaterialFast emitter, 0, CSMT_ADD, CSMF_FULLBRIGHT, texture, 0
csNodePosition emitter, -5200, 850, 2000
csNodeScale emitter, 50, 50, 50
'Create sun billboard
Local sun = csBillboardNode(0)
csBillboardResize sun, 30000, 30000
csNodeSetMaterial sun, csMaterialFind("particle_white"), 0
csNodePosition sun, 25000, 25000, 0
'Create camera
Local cam = csCameraNode(0)
csCameraRange cam, 1, 50000
csCameraFov cam, 1.1
csNodePosition cam, 240, 305, 2150
csNodeRotate cam, 0, 90, 0
csNodeCollision cam, map, 32, 128, 32
'Move mouse to screen center
csMousePosition csDeviceWidth()/2, csDeviceHeight()/2
Local mx = csMouseX()
Local my = csMouseY()
Local mxs = 0
Local mys = 0
Local lastframe = MilliSecs()
Local frametime
Local elapsed#
While Not csKeyHit(CSKEY_ESC)
frametime = MilliSecs() - lastframe
lastframe = MilliSecs()
elapsed# = frametime / 1000.0
'Check if we must exit
If csDeviceClosed() = True Then Exit
'Get mouse movement
mxs = csMouseX() - mx
mys = csMouseY() - my
csMousePosition csDeviceWidth()/2, csDeviceHeight()/2
mx = csMouseX() ; my = csMouseY()
'Rotate camera
Local pitch# = csNodePitch(cam) + (mys * 0.4)
If pitch < -80 Then pitch = -80
If pitch > 80 Then pitch = 80
csNodeRotate cam, pitch, csNodeYaw(cam) + (mxs * 0.4), 0
'Move camera
If csKeyDown(CSKEY_UP) = 1 Then csNodeMove cam, 0, 0, 512 * elapsed
If csKeyDown(CSKEY_DOWN) = 1 Then csNodeMove cam, 0, 0, -512 * elapsed
If csKeyDown(CSKEY_LEFT) = 1 Then csNodeMove cam, -512 * elapsed, 0, 0
If csKeyDown(CSKEY_RIGHT) = 1 Then csNodeMove cam, 512 * elapsed, 0, 0
csNodePosition cam, csNodeX(cam,0), csNodeY(cam,0) - (512 * elapsed), csNodeZ(cam,0)
'Rotate skydome
csNodeTurn skydome, 0, 3 * elapsed, 0
csSceneBegin CSCF_BACKBUFFER + CSCF_ZBUFFER, csGetColor(0, 0, 0, 0)
csSceneRender cam
csSceneEnd
Wend
csLibFinish
End
Function ParseSettings()
Local xml = csXMLRead("temple.xml")
If xml
Local element$ = ""
While csXMLReadNode(xml)
If csXMLNodeType(xml) = CSXML_ELEMENT
If csXMLNodeName(xml) = "settings" Then element$ = "settings"
If csXMLNodeName(xml) = "path" And element$ = "settings" Then csXMLReadNode(xml); Settings.path$ = csXMLNodeData$(xml)
If csXMLNodeName(xml) = "materials_path" And element$ = "settings" Then csXMLReadNode(xml); Settings.mat_path$ = csXMLNodeData$(xml)
If csXMLNodeName(xml) = "particles_path" And element$ = "settings" Then csXMLReadNode(xml); Settings.part_path$ = csXMLNodeData$(xml)
If csXMLNodeName(xml) = "driver" And element$ = "settings" Then csXMLReadNode(xml); If csXMLNodeData$(xml) = "opengl" Then Settings.driver = CSDF_OPENGL
If csXMLNodeName(xml) = "screen_res" And element$ = "settings"
csXMLReadNode(xml)
Settings.screen_res[0] = csStringField$(csXMLNodeData$(xml), ",", 1).ToInt()
Settings.screen_res[1] = csStringField$(csXMLNodeData$(xml), ",", 2).ToInt()
Settings.screen_res[2] = csStringField$(csXMLNodeData$(xml), ",", 3).ToInt()
End If
If csXMLNodeName(xml) = "fullscreen" And element$ = "settings" Then csXMLReadNode(xml); If csXMLNodeData$(xml) = "true" Then Settings.fullscreen = CSDF_FULLSCREEN
If csXMLNodeName(xml) = "antialias" And element$ = "settings" Then csXMLReadNode(xml); If csXMLNodeData$(xml) = "true" Then Settings.antialias = CSDF_ANTIALIAS
If csXMLNodeName(xml) = "vsync" And element$ = "settings" Then csXMLReadNode(xml); If csXMLNodeData$(xml) = "true" Then Settings.vsync = CSDF_VSYNC
If csXMLNodeName(xml) = "stencil" And element$ = "settings" Then csXMLReadNode(xml); If csXMLNodeData$(xml) = "true" Then Settings.stencil = CSDF_STENCILBUFFER
End If
Wend
csXMLClose xml
End If
ChangeDir Settings.path$
csDeviceOpen Settings.screen_res[0], Settings.screen_res[1], Settings.screen_res[2], Settings.fullscreen | Settings.antialias | Settings.vsync | Settings.stencil, 0
ParseMaterials()
ParseParticles()
End Function
Function ParseMaterials()
Local dir = ReadDir(Settings.path$ + Settings.mat_path$)
If dir
Repeat
Local file$ = NextFile$(dir)
If file$ = "" Then Exit
If FileType(Settings.path$ + Settings.mat_path$ + file$) = FILETYPE_FILE And Lower$(ExtractExt$(file$)) = "mat" Then csMaterialLoad(Settings.path$ + Settings.mat_path$ + file$)
Forever
CloseDir dir
End If
End Function
Function ParseParticles()
Local dir = ReadDir(Settings.path$ + Settings.part_path$)
If dir
Repeat
Local file$ = NextFile$(dir)
If file$ = "" Then Exit
If FileType(Settings.path$ + Settings.part_path$ + file$) = FILETYPE_FILE And Lower$(ExtractExt$(file$)) = "par" Then csParticleDataLoad(Settings.path$ + Settings.part_path$ + file$)
Forever
CloseDir dir
End If
End FunctionThis wouldn't work as the user and serial passed to csLibInit are empty strings :)