For those of you who missed the post in the gile[s] forums, here it is the .gls exporter:
Save this file as gls.export in the Plugins folder of BSP Factory (only works with the full version).
Global lightIntensity# Global lightToon Global lightToonShades Function ExportFormat$() Return "Gile[s] Scene (*.gls)|*.gls" End Function ;------------------------------------------------- ;Tells BSP Factory not to save the lightmap Function ExportLightmap() Return False End Function ;------------------------------------------------- Function Export() ;Get settings GadgetList "gile[s] Exporter Settings:", 200 AddText "Light intensity multiplier (multiplies range):" AddString "0.01" AddCheckBox "Export lights as toon lights", 0 AddText "Toon shades:" AddSpin 1, 1024, 3 OpenGadgetList lightIntensity = GadgetListResult(1) lightToon = GadgetListResult(2) lightToonShades = GadgetListResult(3) ;Write header FileInt $FFFF ;HEADER chunk HEADER_begin=FileGetPos() ;Offset to the size info FileInt 0 ;TmpSize FileString "gile[s]" FileFloat 1.0 ;Version ;Write author comments FileInt $F000 ;AUTHOR Chunk FileInt Len("Exported by BSP Factory")+1 ;Size of the chunk (len of string + 1) FileString "Exported by BSP Factory" ;Comment ;Write lightmaps WriteGLSLightmaps ;Write textures WriteGLSTextures ;Write materials WriteGLSMaterials ;Write models WriteGLSModels ;End of HEADER HEADER_end=FileGetPos() FileSetPos HEADER_begin FileInt HEADER_end-HEADER_begin-4 FileSetPos HEADER_end End Function ;------------------------------------------------- Function WriteGLSLightmaps() ;Begin FileInt $7000 ;LIGHTMAPS Chunk LIGHTMAPS_begin=FileGetPos() FileInt 0 ;TmpSize ;Texture Begin FileInt $7001 ;LIGHTMAP Chunk LIGHTMAP_begin=FileGetPos() FileInt 0 ;TmpSize ;Name FileInt $7002 FileInt Len("Default Lightmap")+1 FileString "Default Lightmap" ;File FileInt $7003 FileInt 1 FileByte 0 ;Width FileInt $7004 FileInt 2 FileShort 512 ;Height FileInt $7005 FileInt 2 FileShort 512 ;Non uniform ;FileInt $7006 ;FileInt 1 ;FileByte 1 ;Use custom texel ;FileInt $7007 ;FileInt 1 ;FileByte 0 ;Custom texel ;FileInt $7008 ;FileInt 4 ;FileFloat 0.0;1.17063 ;Repack ;FileInt $7009 ;FileInt 1 ;FileByte 1 ;Data (completely white) FileInt $700A FileInt 512*512*3 For c=1 To 512*512*3 FileByte 255 Next ;Size LIGHTMAP_end=FileGetPos() FileSetPos LIGHTMAP_begin FileInt LIGHTMAP_end-LIGHTMAP_begin-4 FileSetPos LIGHTMAP_end ;Size LIGHTMAPS_end=FileGetPos() FileSetPos LIGHTMAPS_begin FileInt LIGHTMAPS_end-LIGHTMAPS_begin-4 FileSetPos LIGHTMAPS_end End Function ;------------------------------------------------- Function WriteGLSTextures() ;Begin FileInt $6000 ;TEXTURES Chunk TEXTURES_begin=FileGetPos() FileInt 0 ;TmpSize ;Textures For c=1 To MapSurfaces() WriteGLSTex c Next ;Size TEXTURES_end=FileGetPos() FileSetPos TEXTURES_begin FileInt TEXTURES_end-TEXTURES_begin-4 FileSetPos TEXTURES_end End Function ;------------------------------------------------- Function WriteGLSTex(surf) ;Begin FileInt $6001 ;TEX Chunk TEX_begin=FileGetPos() FileInt 0 ;TmpSize ;File FileInt $6002 FileInt Len(SurfaceTextureName$(surf))+1 FileString SurfaceTextureName$(surf) ;Scale U FileInt $6003 FileInt 4 FileFloat 1.0 ;Scale V FileInt $6004 FileInt 4 FileFloat 1.0 ;Offset U FileInt $6005 FileInt 4 FileFloat -1.0 ;Offset V FileInt $6006 FileInt 4 FileFloat -1.0 ;Angle FileInt $6007 FileInt 4 FileFloat 0.0 ;Flags FileInt $6008 FileInt 4 FileInt SurfaceTextureFlags(surf) ;Blend FileInt $6009 FileInt 4 FileInt 2 ;Size TEX_end=FileGetPos() FileSetPos TEX_begin FileInt TEX_end-TEX_begin-4 FileSetPos TEX_end End Function ;------------------------------------------------- Function WriteGLSMaterials() ;Begin FileInt $5000 ;MATERIALS Chunk MATERIALS_begin=FileGetPos() FileInt 0 ;TmpSize ;Textures For c=1 To MapSurfaces() WriteGLSMat c Next ;Size MATERIALS_end=FileGetPos() FileSetPos MATERIALS_begin FileInt MATERIALS_end-MATERIALS_begin-4 FileSetPos MATERIALS_end End Function ;------------------------------------------------- Function WriteGLSMat(surf) ;Begin FileInt $5001 ;MAT Chunk MAT_begin=FileGetPos() FileInt 0 ;TmpSize ;Name FileInt $5002 FileInt Len(SurfaceTextureName$(surf))+1 FileString SurfaceTextureName$(surf) ;Red FileInt $5003 FileInt 4 FileFloat 1.0 ;Green FileInt $5004 FileInt 4 FileFloat 1.0 ;Blue FileInt $5005 FileInt 4 FileFloat 1.0 ;Alpha FileInt $5006 FileInt 4 FileFloat 1.0 ;Self Illumination FileInt $5007 FileInt 4 FileFloat 0.0 ;Shininess FileInt $5008 FileInt 4 If (SurfaceTextureFlags(surf) And 4096)=4096 Then FileFloat 0.0 Else FileFloat SpecularPower()/100.0 ;FX FileInt $5009 FileInt 4 FileInt 1 ;Blend FileInt $500A FileInt 4 FileInt 1 ;Light method FileInt $500B FileInt 1 If (SurfaceTextureFlags(surf) And 2)=2 Or (SurfaceTextureFlags(surf) And 2048)=2048 FileByte 0 Else FileByte 2 ;Lightmap FileInt $500C FileInt 2 FileShort 1 End If ;Tex layer FileInt $5012 FileInt 3 FileByte 0 FileShort surf-1 ;Size MAT_end=FileGetPos() FileSetPos MAT_begin FileInt MAT_end-MAT_begin-4 FileSetPos MAT_end End Function ;------------------------------------------------- Function WriteGLSModels() ;Begin FileInt $1000 ;MODELS Chunk MODELS_begin=FileGetPos() FileInt 0 ;TmpSize ;Write mesh WriteGLSMap ;Write all the entities For c=1 To MapEntities() WriteGLSEntity c Next ;Size MODELS_end=FileGetPos() FileSetPos MODELS_begin FileInt MODELS_end-MODELS_begin-4 FileSetPos MODELS_end End Function ;------------------------------------------------- Function WriteGLSMap() ;Begin FileInt $1001 ;MODEL Chunk MODEL_begin=FileGetPos() FileInt 0 ;TmpSize ;Name FileInt $1002 ;MODEL_NAME Chunk FileInt Len(MapProperties$())+1 FileString MapProperties$() ;Position FileInt $1003 ;MODEL_POSITION Chunk FileInt 12 FileFloat 0 FileFloat 0 FileFloat 0 ;Rotation FileInt $1004 ;MODEL_ROTATION Chunk FileInt 12 FileFloat 0 FileFloat 0 FileFloat 0 ;Scale FileInt $1005 ;MODEL_SCALE Chunk FileInt 12 FileFloat 1.0 FileFloat 1.0 FileFloat 1.0 ;Custom props FileInt $1006 ;CUSTOM_PROPS Chunk FileInt 1 FileByte 0 ;Hidden FileInt $1008 ;HIDDEN Chunk FileInt 1 FileByte 0 WriteGLSMesh ;Size MODEL_end=FileGetPos() FileSetPos MODEL_begin FileInt MODEL_end-MODEL_begin-4 FileSetPos MODEL_end End Function ;------------------------------------------------- Function WriteGLSEntity(model) ;Begin FileInt $1001 ;MODEL Chunk MODEL_begin=FileGetPos() FileInt 0 ;TmpSize ;Name FileInt $1002 ;MODEL_NAME Chunk FileInt Len(MapEntityProperties$(model))+1 FileString MapEntityProperties$(model) ;Position FileInt $1003 ;MODEL_POSITION Chunk FileInt 12 FileFloat MapEntityX#(model) FileFloat MapEntityY#(model) FileFloat MapEntityZ#(model) ;Rotation FileInt $1004 ;MODEL_ROTATION Chunk FileInt 12 FileFloat 0 FileFloat 0 FileFloat 0 ;Scale FileInt $1005 ;MODEL_SCALE Chunk FileInt 12 FileFloat 1.0 FileFloat 1.0 FileFloat 1.0 ;Custom props FileInt $1006 ;CUSTOM_PROPS Chunk FileInt 1 FileByte 0 ;Hidden FileInt $1008 ;HIDDEN Chunk FileInt 1 FileByte 0 If MapEntityProperty$(model, "classname")="light" WriteGLSLight model Else WriteGLSPivot model End If ;Size MODEL_end=FileGetPos() FileSetPos MODEL_begin FileInt MODEL_end-MODEL_begin-4 FileSetPos MODEL_end End Function ;------------------------------------------------- Function WriteGLSMesh() ;Begin FileInt $2000 ;MESH Chunk MESH_begin=FileGetPos() FileInt 0 ;TmpSize ;OVERRIDE FileInt $2001 FileInt 1 FileByte 0 ;BACKLIGHT FileInt $2002 FileInt 1 FileByte 0 ;RECEIVESHADOW FileInt $2003 FileInt 1 FileByte 1 ;CASTSHADOW FileInt $2004 FileInt 1 FileByte 1 ;RECEIVEGI FileInt $2005 FileInt 1 FileByte 1 ;AFFECTGI FileInt $2006 FileInt 1 FileByte 1 ;Write mesh surfaces WriteGLSSurfaces ;Size MESH_end=FileGetPos() FileSetPos MESH_begin FileInt MESH_end-MESH_begin-4 FileSetPos MESH_end End Function ;------------------------------------------------- Function WriteGLSSurfaces() ;Begin FileInt $2100 ;MESH_SURFACES Chunk MESH_SURFACES_begin=FileGetPos() FileInt 0 ;TmpSize For c=1 To MapSurfaces() WriteGLSSurf c Next ;Size MESH_SURFACES_end=FileGetPos() FileSetPos MESH_SURFACES_begin FileInt MESH_SURFACES_end-MESH_SURFACES_begin-4 FileSetPos MESH_SURFACES_end End Function ;------------------------------------------------- Function WriteGLSSurf(surf) ;Begin FileInt $2101 ;MESH_SURF Chunk MESH_SURF_begin=FileGetPos() FileInt 0 ;TmpSize ;Number of vertices FileInt $2102 ;MESH_SURFVERTS Chunk FileInt 2 FileShort SurfaceVertices(surf) ;Number of polygons FileInt $2103 ;MESH_SURFPOLYS Chunk FileInt 2 FileShort SurfaceTriangles(surf) ;Material index FileInt $2104 ;MESH_SURFMATERIAL Chunk FileInt 4 FileInt surf-1 ;Vertex format FileInt $2105 ;MESH_SURFVERTFORMAT Chunk FileInt 4 FileInt 1+16 ;Vertex data FileInt $2106 ;MESH_SURFVERTDATA Chunk FileInt 32 For c=0 To SurfaceVertices(surf)-1 FileFloat SurfaceVertexX#(surf,c) FileFloat SurfaceVertexY#(surf,c) FileFloat SurfaceVertexZ#(surf,c) FileFloat SurfaceVertexNX#(surf,c) FileFloat SurfaceVertexNY#(surf,c) FileFloat SurfaceVertexNZ#(surf,c) FileFloat SurfaceVertexU#(surf,c,0) FileFloat SurfaceVertexV#(surf,c,0) Next ;Poly data FileInt $2107 ;MESH_SURFPOLYDATA Chunk FileInt 6 For c=0 To SurfaceTriangles(surf)-1 FileShort SurfaceTriangle(surf,c,0) FileShort SurfaceTriangle(surf,c,1) FileShort SurfaceTriangle(surf,c,2) Next ;Size MESH_SURF_end=FileGetPos() FileSetPos MESH_SURF_begin FileInt MESH_SURF_end-MESH_SURF_begin-4 FileSetPos MESH_SURF_end End Function ;------------------------------------------------- Function WriteGLSPivot(pivot) FileInt $3000 FileInt 0 End Function ;------------------------------------------------- Function WriteGLSLight(light) ;Begin FileInt $4000 LIGHT_begin=FileGetPos() FileInt 0 ;TmpSize ;LIGHT_TYPE FileInt $4001 FileInt 1 FileByte 2 ;LIGHT_ACTIVE ;FileInt $4002 ;FileInt 1 ;FileByte 1 ;LIGHT_CASTSHADOWS ;FileInt $4003 ;FileInt 1 ;FileByte 1 ;LIGHT_INFINITE FileInt $4004 FileInt 1 FileByte 0 ;Not infinite ;RED FileInt $4007 FileInt 4 FileFloat Float#(StringField$(MapEntityProperty$(light,"_light"),1))/255.0 ;GREEN FileInt $4008 FileInt 4 FileFloat Float#(StringField$(MapEntityProperty$(light,"_light"),2))/255.0 ;BLUE FileInt $4009 FileInt 4 FileFloat Float#(StringField$(MapEntityProperty$(light,"_light"),3))/255.0 ;INTENSITY FileInt $400A FileInt 4 FileFloat Float#(StringField$(MapEntityProperty$(light,"_light"),4)) * lightIntensity# ;LIGHT_NEAR ;FileInt $400B ;FileInt 4 ;FileFloat 0 ;LIGHT_FAR FileInt $400C FileInt 4 FileFloat Float#(StringField$(MapEntityProperty$(light,"_light"),4))*2 ;LIGHT_TOON FileInt $400F FileInt 1 FileByte lightToon ;LIGHT_TOON_SHADES FileInt $4010 FileInt 1 FileByte lightToonShades ;Size LIGHT_end=FileGetPos() FileSetPos LIGHT_begin FileInt LIGHT_end-LIGHT_begin-4 FileSetPos LIGHT_end End Function
Save this file as gls.export in the Plugins folder of BSP Factory (only works with the full version).