BSP Factory released !!!

Announce new projects or updates of Irrlicht Engine related tools, games, and applications.
Also check the Wiki
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

BSP Factory released !!!

Post by Jedive »

BSP Factory 1.2 has been finally finished.

BSP Factory loads a BSP file -Quake(TM) or Half-Life(TM) version-, lightmaps it, and exports to several formats.

The new version of BSP Factory, amongst other things, will allow you to write exporters in simple scripts to export to any file format you want. It includes exporters for .b3d and .x formats, although I have written some more. I want to post these exporters on different forums first to ensure that they do work correctly, and then i'll add them to the package. I have exporters for gile[s], OGRE, NeoEngine, Pulsar LMTools, and some more.

All the people who bought it through Binary-People, please send me your Share-It receipt (an e-mail from them which demonstrates that you bought it) to receive the update. I told Binary People to send me the list of people who bought it, but they didn't :P Sorry this is the only way I know to continue giving support to these users.

You can buy it for 12.95€ here: http://tinyurl.com/64dfe

Demo version here: http://tinyurl.com/64gpy

An example written in Blitz: http://tinyurl.com/6pfrb

An example written in DarkBASIC v1.13: http://tinyurl.com/6gbul

Some (old) pics to show what it can do (Blitz3D screens):

Image
Image
Image
Image
Image

Screenshots taken in DarkBASIC Professional:

Image
Image
Image

A screenshot of a Counter Strike map rendered in DarkBASIC v1.13:

Image
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

Post by Jedive »

For those of you who purchase the full version (exporters don't work with demo), here is a PulsarLMTools exporter. Save this file as 'lmts.export' in the 'plugins' folder of BSP Factory:

Code: Select all

Const LMTS_HEADER_SIZE=24
Const LMTS_SUBSET_SIZE=12
Const LMTS_VERTEX_SIZE=28

Const LMTS_SUBSET_TRIOFS=0
Const LMTS_SUBSET_NUMTRIS=4
Const LMTS_SUBSET_TEXINDEX=8
Const LMTS_SUBSET_LMAPINDEX=10

Const LMTS_TRI_VERTEX_X=0
Const LMTS_TRI_VERTEX_Y=4
Const LMTS_TRI_VERTEX_Z=8
Const LMTS_TRI_VERTEX_U1=12
Const LMTS_TRI_VERTEX_V1=16
Const LMTS_TRI_VERTEX_U2=20
Const LMTS_TRI_VERTEX_V2=24
Const LMTS_TRI_SIZE=84

Function ExportFormat$()
	Return "Pulsar LMTools (*.lmts)|*.1.lmts"
End Function

;-------------------------------------------------

Function ExportLightmap()
	Return False
End Function

;-------------------------------------------------

Function Export()

	GadgetList "LMTools Export Settings", 300
	AddCheckBox "Save alpha and masked textures with .tga extension", 1
	OpenGadgetList
	tgaTex = GadgetListResult(1)

	texNum=MapSurfaces()
	subsetNum=MapSurfaces()

	For c=1 To MapSurfaces()
		trisNum = trisNum + SurfaceTriangles(c)
	Next

	;Write header
	FileInt		$53544D4C			;Magic ID ("LMTS")
	FileInt		4					;Version
	FileInt		LMTS_HEADER_SIZE	;Header size (normally 24)
	FileShort	texNum				;Number of textures **
	FileShort	subsetNum			;Number of subsets **
	FileInt		trisNum				;Number of triangles **
	FileShort	LMTS_SUBSET_SIZE	;Size of each subset (normally 12)
	FileShort	LMTS_VERTEX_SIZE	;VertexSize (normally 28)

	;Write texture info
	FileInt	$54584554	;Magic ID ("TEXT")
	For c=1 To texNum		;For each texture
		If (tgaTex = 1) And ((SurfaceTextureFlags(c) And 2) = 2 Or (SurfaceTextureFlags(c) And 4) = 4)
			FileString	RemoveExtension$(SurfaceTextureName$(c))+".tga"
			For c2 = (Len(RemoveExtension$(SurfaceTextureName$(c))+".tga") + 2) To 256
				FileByte 0	;Fills with zeros until the texture name is 256 bytes long
			Next
		Else
			FileString	SurfaceTextureName$(c)
			For c2 = (Len(SurfaceTextureName$(c)) + 2) To 256
				FileByte 0	;Fills with zeros until the texture name is 256 bytes long
			Next
		End If
		FileShort	0	;If '1', the texture is a lightmap
	Next

	;Write subset info
	FileInt	$53425553	;Magic ID ("SUBS")
	For c=1 To subsetNum	;For each subset
		FileInt		triOfs				;Offset to first triangle
		FileInt		SurfaceTriangles(c)	;Numberof triangles
		FileShort	c-1					;Texture index
		FileShort	$FFFF				;Lightmap index (no lightmap)
		triOfs=triOfs + SurfaceTriangles(c)
	Next

	;Write triangle data
	FileInt	$53495254	;Magic ID ("TRIS")
	For s=1 To MapSurfaces()	;For each surface in the map
		For t=0 To SurfaceTriangles(s)-1
			For v=0 To 2
				vtx = SurfaceTriangle(s,t,v)
				FileFloat	SurfaceVertexX(s, vtx)
				FileFloat	SurfaceVertexY(s, vtx)
				FileFloat	SurfaceVertexZ(s, vtx)
				FileFloat	SurfaceVertexU(s, vtx, 0)
				FileFloat	SurfaceVertexV(s, vtx, 0)
				FileFloat	SurfaceVertexU(s, vtx, 1)
				FileFloat	SurfaceVertexV(s, vtx, 1)
			Next
		Next
	Next

End Function
To load .lmts files in IrrLicht, follow this thread:
http://irrlicht.sourceforge.net/phpBB2/ ... php?t=3198
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

Post by Jedive »

Pulsar LMTools .lmts format only contains geometry info. Lighting info is stored in a .scr file. Here is the plugin for .scr:

Code: Select all

Function ExportFormat$()
	Return "Pulsar LMTools Lighting info (*.scr)|*.scr"
End Function

;-------------------------------------------------

Function ExportLightmap()
	Return False
End Function

;-------------------------------------------------

Function Export()

	;Ask for lightmap settings
	GadgetList "LMTools Lightmap Settings", 200
	AddText "Lightmap size:"
	AddSpin 1, 4096, 128
	AddText "Lumel size:"
	AddSpin 1, 4096, 1
	AddText "Ambient color (in R G B format):"
	AddString "0 0 0"
	OpenGadgetList
	lmapSize$ = GadgetListResult$(1)
	lumelSize$ = GadgetListResult$(2)
	ambColor$ = GadgetListResult$(3)

	;Write lightmap settings
	FileLine	"lightmap.max_size=" + lmapSize$
	FileLine	"lightmap.lumel_size=" + lumelSize$
	FileLine	"ambient_global.color=$" + Right$(Hex$(StringField$(ambColor$, 1, " ")), 2) + Right$(Hex$(StringField$(ambColor$, 2, " ")), 2) + Right$(Hex$(StringField$(ambColor$, 3, " ")), 2)
	FileLine	""

	;Writes each light
	For c=1 To MapEntities()
		If MapEntityProperty$(c, "classname") = "light"
			lightcol$ = MapEntityProperty$(c, "_light")
			r$ = Right$(Hex$(StringField$(lightcol$, 1, " ")), 2)
			g$ = Right$(Hex$(StringField$(lightcol$, 2, " ")), 2)
			b$ = Right$(Hex$(StringField$(lightcol$, 3, " ")), 2)
			FileLine	"omni_point.position=" + MapEntityX(c) + ", " + MapEntityY(c) + ", " + MapEntityZ(c)
			FileLine	"omni_point.color=$" + r$ + g$ + b$ ;+ Right$(Hex(ValueField$(PropertyValue$(ent,FindProperty(ent,"_light")),1)),2)+Right$(Hex(ValueField$(PropertyValue$(ent,FindProperty(ent,"_light")),2)),2)+Right$(Hex(ValueField$(PropertyValue$(ent,FindProperty(ent,"_light")),3)),2)
			FileLine	"omni_point.add"
			FileLine	""
		End If
	Next

End Function
afecelis
Admin
Posts: 3075
Joined: Sun Feb 22, 2004 10:44 pm
Location: Colombia
Contact:

Post by afecelis »

quite interesting!

a very cool alternative for lightmaps. great!

is this project yours, Jedive?

if not, remember to ask for a comission, you're giving it a very good exposure :wink:


gonna buy it this week and try out the lmts exporter

thnx for the link!
Image
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

Post by Jedive »

Yes, I am the coder of BSP Factory.
afecelis
Admin
Posts: 3075
Joined: Sun Feb 22, 2004 10:44 pm
Location: Colombia
Contact:

Post by afecelis »

whoa! congrats man. great work.

I'm getting my license on wednesday so wish me luck with your tool!


:D
Image
afecelis
Admin
Posts: 3075
Joined: Sun Feb 22, 2004 10:44 pm
Location: Colombia
Contact:

Post by afecelis »

@Jedive. one question though. This wouldn't release you from using a Quake3 compliant level editor, right? I mean, you'd still need Radiant to compile your bsp but since a bsp is already lightmapped, what's the point of adding more lightmaps with your tools? Or you have to create an unlit bsp to add your stuff in?

One major issue we are all looking for is a Q3 quality-like lightmapper without the Commercial restrictions of ID's bsp format, or level editors.

if possible, please elaborate.

cheers!
Image
vermeer
Posts: 2017
Joined: Wed Jan 21, 2004 3:22 pm
Contact:

Post by vermeer »

qradiant is the map editor. The one to export the map file, not the bsp.

even though, qeradiant is illegal for comercial use also.I'd use Quark instead, which is free.

bsp compiler, as you know, there's no one option free for comercial.Unless I have understood something badly, bsp factory does not compile to bsp. But import an already made bsp. I suppose the tool was initially geared to use bsps traslated to engines like blitz3d, db pro.

But, I would not see th advantage of importing really a bsp... I mean, for irrlicht, ain't it better to import an standard mesh, that would have not the weird bsp imposed limits, lightmap it BSP Factory -for example- , and export then into x, or as he say, use the lmets format, as now it has scripting abilities for exports?

Looks like this tool could be used for comfortably placing objects, etc, generating the lightmap, and exporting.
Finally making games again!
http://www.konekogames.com
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

Post by Jedive »

I know that there is a lot of people who use expensive tools like 3DS Max to model their level, or other people that use other similar cheap / free tools (wings3d, silo, anim8or, etc). But there are people like me who not capable of modelling a simgle room with these tools, and that find editors like Qoole, Hammer, Quark or Radiant very simple to use and intuitive. Most of the 3D engines out there already support Quake3 .BSP maps, soyou can already use Radiant, but commercial use of .bsp maps generated by id's BSP compiler (even if you use a free editor like Quark, you have to use id tools to compile the bsp) is not possible without paying hugue license fees.

Quake1 and Half-Life are a different case. For Quake1, there are toons of tools available on the net. For Half-Life, you have the GPL bsp compiler Zoner's Half-Life Tools. The problem is that there are not many 3D engines that support these .bsp formats, so you can use these tools (which are very great) to make your maps. That's where BSP Factory comes. Writing new exporters for BSPF is really easy, just take a look at the exporter sources I have posted here.

I personally use the Qoole editor. Extremely simple to use, and powerful (it were use as the base for WED, 3D GameStudio's map editor).
afecelis
Admin
Posts: 3075
Joined: Sun Feb 22, 2004 10:44 pm
Location: Colombia
Contact:

Post by afecelis »

Oh, i get your point! So we use a Q1 level editor, create the bsp with no problem (sice it's GPL) and then with your tools make it look fancy! right?

Qoole was also my favorite in the Q1-Q2 days! It would be great to have the chance to use it again for Irrlicht. I'd have to create my wad texture paks again. Can they support 512x512 textures? Is there documentation or tutorials with your tool on how to get a level up an running in an engine?

The best part is that Qoole's source is now free! Another nice editor from those days is Tread3d, it became free with no commercial limitations. Carsten (Ca3de) is modifying it to make it Ca3de's official level editor and stop using Hammer.

Final question: can bsp factory be used commercially?
q1: why did you remove the SS? they look kewl!

cheers!
Image
Jedive
Posts: 146
Joined: Wed Apr 28, 2004 5:51 pm

Post by Jedive »

Of course BSP Factory can be used commercially.

You can find the last version of Qoole here: http://www.volved.com/qsr/

About how to load a map done in BSP Factory inside an engine, you load a .lmts file like you do with any other file format.

Soemthing that I am considering to do is writing a custom .irr format or something, to be able to export the material properties (type, flags, etc) to the file :D
q1: why did you remove the SS? they look kewl!
You mean the screenshots? I have not removed them!
afecelis
Admin
Posts: 3075
Joined: Sun Feb 22, 2004 10:44 pm
Location: Colombia
Contact:

Post by afecelis »

Just got it!

nice

now I'm gonna try its stuff!

:D
Image
house
Posts: 5
Joined: Wed May 17, 2006 1:04 am

Post by house »

Hi, I just found this thread while looking for a decent bsp workflow.

You cannot use ZHLT, nor any other standing Half-Life bsp compilers. They may say they are GPL, but you're denied any rights in conflict with the restrictions of Valve's Half Life SDK EULA:
Whereas, Licensee wishes to develop a modified game running only on the Half-Life engine (a "Mod") for free distribution in object code form only to licensed end users of Half-Life; and ...
Also, using Hammer in this workflow would be illegal. With that in mind, I don't see how you can support any half-life related content. I don't know about any other commercial restrictions you may have missed for the ID-related reverse engineering, but if Valve sees this, you're getting sued.

EDIT: And even worse, if anyone used your tool (as you intended) for their commercial work, they're also liable.
vermeer
Posts: 2017
Joined: Wed Jan 21, 2004 3:22 pm
Contact:

Post by vermeer »

I don't agree.

If you don't use the valve engine, neither any of their tools, you are good to go. BSP format is not protected, is its compilers, the engine, and their own tools, the ones valve made.

ZHLT is made by an independent person, not using valve stuff.

Is like md3, or md2, there are yet ppl out there thinking using th eformat is not legal, while it is even for comercial.


you could certainly use Quark instead of hammer, even for comercial. As Quark is neither an Id or valve tool. This way you have your workflow totally free. And is done in many cases, with zero probs.

There's also another option of a different implementation of BSP format, with a collection of home made tools, editor and compiler, getic3D, available at http://www.zalsoft.com/zalsoft/ .

but maybe that bsp is not as similar to the old bsps, and maybe not able to be loaded with irrlicht loaders, I dunno. i'd go the zhlt+quark route, that is, if I were interested in these old ways instead of plain b3d file with a lightmap.

http://quark.planetquake.gamespy.com/

http://zhlt.info/
http://www.unknownworlds.com/forums/ind ... opic=21248
http://collective.valve-erc.com/index.php?go=mhlt
Finally making games again!
http://www.konekogames.com
house
Posts: 5
Joined: Wed May 17, 2006 1:04 am

Post by house »

ZHLT is made by an independent person, not using valve stuff.
lol, ZHLT is a modified version of valve's qbsp2's source from the goldsrc sdk, which they distribute under the license i mentioned.

Anyway:
II. LICENCE

0) This code is protected by the GPL, a link to the GPL can be found at the end of this page.

1) In addition to the GPL, the Valve SDK 2.3 EULA overrides any rights you may have obtained in the GPL, when needed.

2) The iD Quake 2 Licence overrides portions of both the Valve EULA, and the GPL where needed, please contact iD for information on this subject.

Copy of the GPL
http://www.gnu.org/copyleft/gpl.html

Valve SDK EULA
http://valvesoftware.com/business.html

Quake II Source EULA
http://www.idsoftware.com/business/tech ... I%20Engine
(from zhlt's Terms of Use.txt)

So, you can't use ZHLT like that. On top of that, I've never found any Half-Life 1 map compilers or tools not covered by this license.

So unless you plan reverse engineering their bsp format without using their engine, any tools now available, any of their documentation (there are no format specs published), or any of their content, half-life 1 bsp is not an option whether or not you agree. You can't make assumptions like that and think you can get away with violating licenses because you "didn't know."
Post Reply