• Welcome to Dark Bit Factory & Gravity.
 

Here's a .B3D(Blitz3D) loader...

Started by Dr_D, December 11, 2006

Previous topic - Next topic

0 Members and 0 Guests are viewing this topic.

Dr_D

It was ported to FreeBASIC as an experiment. We're experimenting with different file formats for our Rogue3D game. When I say we, I mean rdc and I are working on a Rogue3D game. heheheÃ,  :cheers:

I haven't fully tested any models with this yet, but it seems to be printing the correct vertices & stuff. I hope someone gets some use out of it. ;)

Const False = 0, True = Not False

#define Chunk_ID(a,b,c,d) ( ((a)) Or (b Shl(8)) Or (c Shl(16)) Or (d Shl(24)))
#define Chunk_2String(_Chunk) Chr$(_Chunk)+Chr$(_Chunk Shr 8)+Chr$(_Chunk Shr 16)+Chr$(_Chunk Shr 24)
#define ID_BB3DÃ,  Chunk_ID( Asc("B"), Asc("B"), Asc("3"), Asc("D") )
#define ID_TEXSÃ,  Chunk_ID( Asc("T"), Asc("E"), Asc("X"), Asc("S") )
#define ID_VRTSÃ,  Chunk_ID( Asc("V"), Asc("R"), Asc("T"), Asc("S") )
#define ID_ANIMÃ,  Chunk_ID( Asc("A"), Asc("N"), Asc("I"), Asc("M") )
#define ID_KEYSÃ,  Chunk_ID( Asc("K"), Asc("E"), Asc("Y"), Asc("S") )
#define ID_BRUSÃ,  Chunk_ID( Asc("B"), Asc("R"), Asc("U"), Asc("S") )
#define ID_TRISÃ,  Chunk_ID( Asc("T"), Asc("R"), Asc("I"), Asc("S") )
#define ID_MESHÃ,  Chunk_ID( Asc("M"), Asc("E"), Asc("S"), Asc("H") )
#define ID_BONEÃ,  Chunk_ID( Asc("B"), Asc("O"), Asc("N"), Asc("E") )


Declare Sub b3dExitChunk()
Declare Sub Read_String( Byval File_Num As Uinteger, Byref tString As String )
Declare Sub b3dSetFile( Byref file As Uinteger )
Declare Function Dump_B3D() As Integer
Declare Function b3dReadByte() As Byte
Declare Function b3dReadInt() As Integer
Declare Function b3dReadFloat() As Single
Declare Function b3dReadString() As String
Declare Function b3dReadChunk() As String
Declare Function b3dChunkSize() As Integer


Dim Shared As Integer b3d_Stack(100), b3d_file, b3d_tos
Dim As Uinteger File_Num = Freefile
b3dSetFile( File_Num )

Open "Models/B3D/Test_Cylinder.b3d" For Binary As #File_Num

Ã,  Ã,  Dim As String Chunk
Ã,  Ã,  Dim As Integer Version

Ã,  Ã,  If b3dReadChunk()<>"BB3D" Then
Ã,  Ã,  Ã,  Ã,  Print "Invalid b3d file"
Ã,  Ã,  End If
Ã,  Ã,  Version = b3dReadInt()/100
Ã,  Ã,  Print Version
Ã,  Ã,  If Version>0 Then
Ã,  Ã,  Ã,  Ã,  Print "Invalid b3d file version"
Ã,  Ã,  End If

Ã,  Ã,  Dump_B3D( )

Close #File_Num
Sleep





Function Dump_B3D() As Integer
Ã,  Ã,  
Ã,  Ã,  Dim As String tname, Chunk
Ã,  Ã,  Dim As Integer flags, n_frames, n_keys, sz, frame, blend, n_texs, k, j, tex_id
Ã,  Ã,  Dim As Integer tc_sets, tc_size, n_verts, brush_id
Ã,  Ã,  Dim As Integer v0,v1,v2, n_tris, n_weights, vertex_id
Ã,  Ã,  Dim As Single fps = Any, fx = Any, weight = Any
Ã,  Ã,  Dim As Single key_px = Any, key_py = Any, key_pz = Any
Ã,  Ã,  Dim As Single key_sx = Any, key_sy = Any, key_sz = Any
Ã,  Ã,  Dim As Single key_rw = Any, key_rx = Any, key_ry = Any, key_rz = Any
Ã,  Ã,  Dim As Single x_pos = Any, y_pos = Any, z_pos = Any
Ã,  Ã,  Dim As Single x_scl = Any, y_scl = Any, z_scl = Any
Ã,  Ã,  Dim As Single w_rot = Any, x_rot = Any, y_rot = Any, z_rot = Any
Ã,  Ã,  Dim As Single rot = Any, lfa = Any
Ã,  Ã,  Dim As Single red = Any, grn = Any, blu = Any, alp = Any, shi = Any
Ã,  Ã,  Dim As Single x = Any, y = Any, z = Any
Ã,  Ã,  Dim As Single nx = Any, ny = Any, nz = Any
Ã,  Ã,  
Ã,  Ã,  
Ã,  Ã,  Do While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  chunk = b3dReadChunk()
Ã,  Ã,  Ã,  Ã,  Print "Chunk: " & chunk & " size =" & b3dchunksize()
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Select Case chunk
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Case "ANIM"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  flagsÃ,  Ã,  = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_frames = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  fpsÃ,  Ã,  Ã,  = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Animation Flags/fps " & flags & "/" & fps
Ã,  Ã,  Ã,  Ã,  Case "KEYS"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  flags=b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  sz=4
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 1 Then sz=sz+12
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 2 Then sz=sz+12
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 4 Then sz=sz+16
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_keys=b3dChunkSize()/sz
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If n_keys*sz=b3dChunkSize() Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "keys " & n_keys
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read all keys in chunk
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  frame = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 1 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_px = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_py = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_pz = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 2 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_sx = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_sy = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_sz = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 4 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_rw = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_rx = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_ry = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  key_rz = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Else
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Illegal number of keys!!!"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Case "TEXS"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tname = b3dReadString()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  flags = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  blend = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x_pos = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y_pos = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x_scl = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y_scl = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  rotÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print tname
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Case "BRUS"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_texs=b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read all brushes in chunk...
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tname = b3dReadString$()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  redÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  grnÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  bluÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  alpÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  shiÃ,  Ã, = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  blend = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  fxÃ,  Ã,  = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  For k=0 To n_texs-1
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tex_id=b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Next
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print tname
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Case "VRTS"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  flagsÃ,  Ã, = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tc_sets = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tc_size = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  sz=12+tc_sets*tc_size*4
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 1 Then sz = sz + 12
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 2 Then sz = sz + 16
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_verts=b3dChunkSize()/sz
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If n_verts*sz = b3dChunkSize() Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "vertex count: " & n_verts
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read all verts in chunk
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  z = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print x,y,z
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 1 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  nx = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  ny = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  nz = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If flags And 2 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  red = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  grn = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  blu = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  lfa = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read tex coords...
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  For j=1 To tc_sets*tc_size
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Dim As Single t
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  t = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Next
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Else
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Illegal number of vertices!!!"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Case "TRIS"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  brush_id = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  sz=12
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_tris = b3dChunkSize()/sz
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If n_tris * sz = b3dChunkSize() Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Triangle count: " & n_tris
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read all tris in chunk
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  v0 = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  v1 = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  v2 = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Else
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Illegal number of triangles!!!"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Case "MESH"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  brush_id = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Brush ID " & brush_id
Ã,  Ã,  Ã,  Ã,  Case "BONE"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  sz=8
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  n_weights = b3dChunkSize()/sz
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If n_weights * sz = b3dChunkSize() Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'read all weights
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Weights " & n_weights
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  While b3dChunkSize()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  vertex_id = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  weight = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Wend
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Else
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "Illegal number of bone weights!!!"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Case "NODE"
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tname = b3dReadString$()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x_pos = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y_pos = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  z_pos = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x_scl = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y_scl = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  z_scl = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  w_rot = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  x_rot = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  y_rot = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  z_rot = b3dReadFloat()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Print "name = " & tname
Ã,  Ã,  Ã,  Ã,  End Select
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Ã,  Ã,  Dump_B3D()Ã,  Ã,  Ã,  Ã,  Ã,  'load the sub_chunks
Ã,  Ã,  Ã,  Ã,  b3dExitChunk()Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  'exit this chunk
Ã,  Ã,  Ã,  Ã,  
Ã,  Ã,  Loop
Ã,  Ã,  Return True
End Function



Sub b3dSetFile( Byref file As Uinteger )
Ã,  Ã,  Ã,  Ã,  b3d_tos=0
Ã,  Ã,  Ã,  Ã,  b3d_file = file
End Sub

Function b3dReadByte() As Byte
Ã,  Ã,  Dim As Byte rbyte
Ã,  Ã,  Get #b3d_file,, rbyte
Ã,  Ã,  Ã,  Ã,  Return rbyte
End Function

Function b3dReadInt() As Integer
Ã,  Ã,  Dim As Integer rInt
Ã,  Ã,  Get #b3d_file,, rInt
Ã,  Ã,  Return rInt
End Function

Function b3dReadFloat() As Single
Ã,  Ã,  Dim As Single rFloat
Ã,  Ã,  Get #b3d_file,, rFloat
Ã,  Ã,  Return rFloat
End Function

Function b3dReadString() As String
Ã,  Ã,  Dim As String T
Ã,  Ã,  Dim As Byte ch
Ã,  Ã,  Ã,  Ã,  Do
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  ch=b3dReadByte()
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  If ch=0 Then
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Return T
Ã,  Ã,  Ã,  Ã,  End If
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  T+=Chr$(ch)
Ã,  Ã,  Loop
End Function

Function b3dReadChunk() As String
Ã,  Ã,  Dim As Integer k, sz
Ã,  Ã,  Dim As String Tag
Ã,  Ã,  Ã,  Ã,  For k=1 To 4
Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  Ã,  tag+=Chr$(b3dReadByte())
Ã,  Ã,  Next
Ã,  Ã,  Ã,  Ã,  sz = b3dReadInt()
Ã,  Ã,  Ã,  Ã,  b3d_tos+=1
Ã,  Ã,  Ã,  Ã,  b3d_stack(b3d_tos) = Seek(b3d_file)+sz
Ã,  Ã,  Ã,  Ã,  Return Tag
End Function

Sub b3dExitChunk()
Ã,  Ã,  Seek b3d_file, b3d_stack(b3d_tos)
Ã,  Ã,  Ã,  Ã,  b3d_tos-=1
End Sub

Function b3dChunkSize() As Integer
Ã,  Ã,  Dim As Integer rint
Ã,  Ã,  Ã,  Ã,  rint = b3d_stack(b3d_tos)- Seek(b3d_file)
Ã,  Ã,  Return rint
End Function

The Dr. is INsane!!!

Stonemonkey

Nice one Dr_D, something I'm in need of is some kind of loader so this could be handy.

Dr_D

Cool. The only real problem I can see with it, is the recursion. It might hit a stack overflow, if you send a structure in the header repeatedly. But... I haven't tested... hopefully, it wont.  :o
The Dr. is INsane!!!

Clyde

Still Putting The IT Into Gravy
If Only I Knew Then What I Know Now.


Challenge Trophies Won:

Dr_D

Thanks. ;) Anyone tried using it yet? I might have to end up using this. I don't really want to, but I'm having a hell of a time with this Lightwave loader. It seems like every time i port a new function, the loader has some other quirky function that also needs to be ported. It becomes a real pain in the arse when you don't know squat about C++.

A reason for the Lightwave loader? I model in Lightwave, almost exclusively... just because I love it. I've been working with Lightwave for a few years now. I just love the program. Those guys rock! :D

Anyway, I'd like to know if anyone reading this thread has had a successful attempt at loading, displaying, using weight-maps with this code. I haven't really tried yet because I've been working on the Lightwave loader so much. :)
The Dr. is INsane!!!