ColdSteel release date announced

Miscellaneous Forums/General Discussion/ColdSteel release date announced

ColdSteel SDK Early Adopter 1 will be released on Dec 20, 2005.

Price: 39.95€

There is only one week left until the release. These days, I will be finishing the documentation, finishing the collision system, updating the webpage, and adding the community forums to it.

Sounds good Jedive. I wish you every success.

I'm planning to purchasing one, how's it comparing to CSP Engine?

I haven't tried the CSP Engine, but it looks like a template for making FPS games in Blitz3D, isn't it?

ColdSteel is not limited to FPS. You can do any type of 3D game with it.

Anyway, as soon as the physics, audio, networking, and Scene Editor are finished, I'll write a "Write a FPS" tutorial with a sample game.

Waiting to get my hands on it ;)

can this be used with blitzmax?

Of course :D

It supports Blitz3D, BlitzMax, BlitzPlus, C / C++, IBasic Professional, PlayBasic and PureBasic.

Jedive... is it OSX cross platform compatible (seeing that part of it is irrlicht based)... and, is there any shader functionality built in?

--Mike

Only Windows for now, an yes, it support HLSL, GLSL, and ASM shaders, up to version 3.0.

now will there be a usable demo or trial we can try with blitzmax? and could you show some example blitzmax code of it being used? Thanks

thx Jed... will be looking intently...

--Mike

Sounds VERRRY nice. Please don't let this go the way of other recent engines ie. disappear without a trace

I miss GameBench..

Anyways, congrats. on getting this far, Jedive.

Edit: Oh, and don't forget to throw Irrlicht/AngelScript in the credits, y'lazy git ;)

@ckob,

as i understand it the lite version is free and you can try it out in any of the languages. There was a code example recently for blitz3d.

Looking forward as usual.

I didn't add the authors of the 3rd-party libraries I've used because I didn't updated the page since I uploaded it :S They are credited on the help though, and of course they will be credited on the webpage. But as the SDK version does not support AngelScript, I'll only add the libraries currently used, and will add the others as I release updates that use them.

@ckob: I am updating the Temple demo right now, reading the setting from a config file, and loading the particles, materials, and such from disk, instead of creating them on the fly. I will post the source here when it is finished, I guess tomorrow :)

The Lite version is a cut-down version of ColdSteel Professional, not of ColdSteel SDK, so you can only program in AngelScript with it. It won't be released next week. What I plan to release is a demo version of the SDK, which will be a .dll that will work for 10 minutes or so, and its editors won't be able to save anything.

Can I use .b3d files (with bones etc) with ColdSteel?

Just tried the temple demo - it runs really slow on my work machine which is a fast P4 with an integrated graphics controller. This is not the best but I have no problems running other 3d stuff on it at a fairly decent framerate.
What would be the recommended spec to use this engine and what would be the minimun required spec to run games made with it ?

Maybe your PC does not have decent OpenGL drivers isntalled? I'll upload a new demo in which you'll be able to choose between DX and OpenGL.

No, you cannot use .b3d files with ColdSteel. In a future update, when you will be able to create bone animated meshes on the fly, it would be possible to make a .b3d importer.

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 Function

This wouldn't work as the user and serial passed to csLibInit are empty strings :)

This looks great! I may be editing the command names though, if i can? Obviously i'll be getting the SDK. Will i be able to say, replace csMeshLoad with LoadMesh? Would be pretty handy, but it wont matter either way :)

Yes, you can rename the functions.

Fantastic. I'm picky about function names :) I'll probrably just remove the cs prefix.

Great work btw, Can't wait to grab it!

Is the coldsteel engine based on irrlicht ?

One more time everybody:


"Yeah!"

Ohhh, so we'll have an SDK demo version? I see. Well, try not to make it easily crackable or anything. It will be worth the effort (even tho you will have lots of updates).

Will it support sticky collisions? (e.g rotating entity = character sticking on the entity) just like Nuclear Glory collisions.

Yes it will support sticky collisions.

Just tried the demo on my home machine - runs really well.
This looks like being a real alternative to waiting for the official Max 3d module. I'll be very interested in seeing what animation features it has.
ODE as the physics engine is a very good choice - its fast stable and very flexible.

Jedive, why did you choose HawkNL over Rakknet? I heared Rakknet is better overall. (?)

Because of its license, but I'll probably end up using winsockets for the networking.

I really wanna know does ColdSteel supports unicode in core, at least double-byte words like CJK.

By surfing around many 3D engines I found there's very few support in double-byte words, but I really need this coz my target audience is Cihnese/Japanese.

If ColdSteel support this I'll buy it without consideration, I hope the engine supports it internally, I'm suck at C++ coding and might not be able to use a SDK style programming.

No, sorry, as ColdSteel SDK is a standard dll, all the strings are "char*". I may add it in the future if you are really interested.

Which version of irrlicht will the first release have?

Dec-01-2005 Irrlicht 0.14.0 released!

Will it be 0.14 ?

Will you update it every single time irrlicht updates?

How much will irrlicht updates change the commands within CS, and will you update the docs regularily?

Yes, it will contains version 0.14.

When a new version of IrrLicht appears, I'll update ColdSteel, and if nothing gets broken, I'll release a new update.

ColdSteel and IrrLicht commands are very different. ColdSteel looks a lot like Blitz3D. If a command changes in IrrLicht, I won't probably need to change ColdSteel external face.

Docs will be updated each time a command changes or is added.

Money is not the problem as it has such feature, I'll buy it.

Or I can buy it then you add it in later version.

I heard that there should be a problem with rotating and moving a texture in Irrlicht(Stuff like PositionTexture tex,x,y). Is this also the case with coldsteel? For me this is an very important feature to make , for instance, an glittering object by moving a stripe texture on one layer.

There doesnt seem to be any mention of mesh formats or skinning support.

Hello Jedive
this should be a fix for the mentioned irrlicht issue(texture transformation matrix) :
http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?p=88230&sid=1f008221c0be56505169528412459260

or

http://parsys.informatik.uni-oldenburg.de/~hybrid/irrlicht/patch.1.1/features/textureMatrix.patch

(I dont have seen a position command in the coldsteel help...)