*.B3D doesn't work with masked textures!

Blitz3D Forums/Blitz3D Programming/*.B3D doesn't work with masked textures!

For people who have the know-how of b3d-files, here's the code: (you can be shure that the functions ChunkEnd, Chunkbegin, WriteStringC are working correctly)

Dim ChunkStart(100) :Global chunkebene=0

function ExportIt(mesh)         ;I call this function
name$="sample.b3d"
file=WriteFile(name$)
If file=0 Then Return

ChunkBegin(file,"BB3D")
  WriteInt(file,1)      ;version
  ChunkBegin(file,"TEXS")              ;-----Textures-------------
  For i=1 To texanz                      ;there are about 3 textures
    WriteStringC(file,texname$(i))            ;name  (a field of texturenames)
    masked=4+1
    WriteInt(file,masked)                ;flags (alpha..)
    WriteInt(file,1)                     ;blend 1
    WriteFloat(file,0)                   ;X    ;def:0
    WriteFloat(file,0)                   ;Y
    WriteFloat(file,1)                   ;X Scale ;def:1
    WriteFloat(file,1)                   ;Y Scale
    WriteFloat(file,0)                   ;Rotation
  Next
  ChunkEnd(file)                       ;-----Textures end---------
  ChunkBegin(file,"BRUS")              ;+++++Brush++++++++++++++++
  WriteInt(file,1)                     ;1 textures per brush
  WriteStringC(file,"Default")         ;Dname
  WriteFloat(file,1)		       ;Dred
  WriteFloat(file,0.3)       	       ;Dgreen
  WriteFloat(file,0.3)	               ;Dblue
  WriteFloat(file,1)		       ;Dalpha
  WriteFloat(file,0)   		       ;Dshininess
  WriteInt(file,0)		       ;Dblend
  WriteInt(file,0)		       ;DFX
  WriteInt(file,-1)                    ;DTextureNr (-1=no?)
  For i=1 To texanz
    WriteStringC(file,"Brush"+i)      ;name
    WriteFloat(file,0)	              ;red
    WriteFloat(file,0)                ;green
    WriteFloat(file,0)	              ;blue
    WriteFloat(file,1)                ;alpha
    WriteFloat(file,0)                ;shininess
    WriteInt(file,0)                  ;blend
    WriteInt(file,0)                  ;FX
    WriteInt(file,i-1)                 ;TextureNr (from 0)
  End If
  Next
  ChunkEnd(file)                    ;End of BRUS chunk
  ChunkBegin(file,"NODE" )          ;+++++Entities+++++++++++++
    WriteStringC(file,"TheEntity")     ;name
    WriteFloat(file,0)                 ;x
    WriteFloat(file,0)    	       ;y
    WriteFloat(file,0)                 ;z
    WriteFloat(file,1)	               ;x_scale
    WriteFloat(file,1)	               ;y_scale
    WriteFloat(file,1)	               ;z_scale
    WriteFloat(file,1)	               ;rot_w
    WriteFloat(file,0)	               ;rot_x
    WriteFloat(file,0)	               ;rot_y
    WriteFloat(file,0)	               ;rot_z
    ChunkBegin(file,"MESH")         ;+++++Meshes+++++++++++++++
      WriteInt(file,-1)		      ;no 'entity' brush
      ChunkBegin(file,"VRTS" )      ;+++++Vertexes+++++++++++++
        WriteInt(file,1 )			;flags - 0=no 1=with normals / 2=with color
        WriteInt(file,1 )			;1 tex_coord sets
        WriteInt(file,2 )			;2 coords per set
        surfaceanz=CountSurfaces(mesh)
        For k=1 To surfaceanz
          surf=GetSurface(mesh,k )
          vertexanz=CountVertices( surf )-1
          For j=0 To vertexanz
            TFormPoint VertexX(surf,j),VertexY(surf,j),VertexZ(surf,j),stone(i),0
            WriteFloat(file,TFormedX() )       ;X
            WriteFloat(file,TFormedY() )       ;Y
            WriteFloat(file,TFormedZ() )       ;Z
            WriteFloat(file,-1);VertexNX#(surf,j))     ;NormalX
            WriteFloat(file,0);VertexNY#(surf,j))      ;NormalY
            WriteFloat(file,0);VertexNZ#(surf,j))      ;NormalZ
            WriteFloat(file,VertexU( surf,j ) );TextureU
            WriteFloat(file,VertexV( surf,j ) );TextureV
          Next
        Next
      ChunkEnd(file)                ;-----Vertexes end---------
      first_vert=0
      surfaceanz=CountSurfaces(mesh)
      For k=1 To surfaceanz
        surf=GetSurface( mesh,k )
        trisanz=CountTriangles( surf )-1
        ChunkBegin(file,"TRIS" )    ;++++++Tris++++++++++++++++
        WriteInt(file,SurfaceTexNr(k) )	        ;The Textur Nr corresponds to the brush number (they go from 1 to texquantity)
        For j=0 To trisanz
          WriteInt(file,first_vert+TriangleVertex( surf,j,0 ) )
          WriteInt(file,first_vert+TriangleVertex( surf,j,1 ) )
          WriteInt(file,first_vert+TriangleVertex( surf,j,2 ) )
        Next
        ChunkEnd(file)              ;-----Tris end------------
        first_vert=first_vert+CountVertices( surf )
      Next
    ChunkEnd(file)                  ;-----Mesh end------------
  ChunkEnd(file)                    ;-----Entity end----------                  
ChunkEnd(file)	                    ;-----BB3D end------------
CloseFile file
End Function

;***********************************
Function ChunkBegin(file,tag$)
	chunkebene=chunkebene+1
	For k=1 To 4
		WriteByte(file,Asc(Mid$( tag$,k,1 )))
	Next
	WriteInt(file,0)
	ChunkStart(ChunkEbene)=FilePos(file)
End Function
;**********************************
Function ChunkEnd(file)
    aha=ChunkStart(ChunkEbene)
	n=FilePos(file)
	SeekFile file,ChunkStart(ChunkEbene)-4
	WriteInt(file,n-ChunkStart(ChunkEbene))
	SeekFile file,n
	ChunkEbene=ChunkEbene-1
End Function
;*********************************
Function WriteStringC(file,t$)
	For k=1 To Len( t$ )
		ch=Asc(Mid$(t$,k,1))
		WriteByte(file,ch)
		If ch=0 Return
	Next
	WriteByte(file,0)
End Function



;I've shortened the code a bit for you, so there could be
some typing errors. The Exportfunktion does it's stuff very
well, it even exports the right textures and right
coordinates, except the problem, that masking doesn't work
and that Vertex Normals don't work with Textured Surfaces.

;(To write this I used Marks makeb3d.bb)