Hi, i'm parsing the b3d format to built the whole stucture .
But unlucky i can't find where are stored the second Uv set ...
is anyone could help me ?
Here is the main part of the code
But unlucky i can't find where are stored the second Uv set ...
is anyone could help me ?
Here is the main part of the code
;==================================================================================== ; ================== RIPP DU B3D ===================== ;==================================================================================== Const Max_B3DScene%=100 Global LogF%=WriteFile("log.txt") Function LIB_WriteLog(File%,chaine$="",mode%=0) Select mode Case 0 WriteLine(File,chaine) Case 1 WriteString(File,String$(chaine,1)) Case 2 WriteInt(File,Int%(chaine)) Case 3 WriteFloat(File,Float#(chaine)) Case 4 WriteByte(File,chaine) End Select End Function Type BB3D_Structure Field Scene_Root% ; Le Scene Root Field Id% ; Id de la scene Field filename$ ; Nom du fichier Field File% ; Stream du fichier Field Cur_Pos% ; Position actuel de la lecture du fichier Field Reg_Pos[100] ; enregistrement de position interessante du fichier Field HandleBrush%[100] ; handle du type pour les Brushes max :100 brush Field HandleTex%[800] ; handle du type pour les textures max :100 brush* 8 textures Field NbTex%=-1 ; Nombre de textures total Field NbBrush%=-1 ; Nombre de Brushes total Field B3D_Tex.BB3D_TEXS ; Les textures de la scene Field B3D_Brs.BB3D_BRUSH ; Les Brushes de la scene Field NbNODE% ; Nombre de Nodes dans la scene Field NbMesh% ; Nombre de meshs dans la scene Field BGR,BGG,BGB ; background Color (ClsColor) Field AmbR%,AmbG%,AmbB% ; Ambientlight Field FogR%,FogG%,FogB% ; Fog Color Field FogN#,FogF# ; Fog Range Field HandleParent%[10000] Field NbParent%=-1 End Type Type BB3D_TEXS Field Texture% Field tex_id% Field name$ Field flags% Field blend% Field x_pos# Field y_pos# Field x_scl# Field y_scl# Field rot# End Type Type BB3D_BRUSH Field Brush% Field name$ Field red# Field grn# Field blu# Field alp# Field shi# Field blend% Field fx% Field Tex_Id%[8],BrushNbTex% End Type Type BB3D_NODE Field Parent% Field Typ$ Field Name$ Field Entity% Field x_pos#=0,y_pos#=0,z_pos#=0 Field x_scl#=1,y_scl#=1,z_scl#=1 Field w_rot#=0 Field x_rot#=0,y_rot#=0,z_rot#=0 ; case "BONE" Field NbVrt_inBone Field Vrt%[65537] Field Weight#[65537] ;case "MESH" Field Surf.BB3D_SRF Field IdMesh% Field NbSurf% ; case "CAMERA" Field CamFOV# End Type Type BB3D_VRT Field NbVrtx% Field x#[65537] Field y#[65537] Field z#[65537] Field nx#[65537] Field ny#[65537] Field nz#[65537] Field red#[65537] Field grn#[65537] Field blu#[65537] Field alp#[65537] Field u1#[65537] Field v1#[65537] Field u2#[65537] Field v2#[65537] End Type Type BB3D_SRF Field Surface% Field IdMesh% Field brush_id% Field NbTri% Field NbVrtx% Field vt.BB3D_VRT Field Tri%[65537] Field Vrt0%[65537] Field Vrt1%[65537] Field Vrt2%[65537] End Type Function BB3D_LoadAnimMesh(f_name$,parent%=0) For s.BB3D_structure=Each BB3D_Structure NbB3dScene=NbB3dScene+1 Next s.BB3D_structure=New BB3D_Structure LIB_WriteLog(LogF,"=======================================================================================") LIB_WriteLog(LogF," *********************** *********************") LIB_WriteLog(LogF," ----------- DUMP BB3D MESH Version 0.1 -----------") LIB_WriteLog(LogF," *********************** *********************") LIB_WriteLog(LogF,"=======================================================================================") s\Id=NbB3dScene s\file=ReadFile( f_name$ ) s\filename$=f_name If parent=0 s\Scene_Root=CreatePivot() parent=s\Scene_Root EndIf If Not s\file RuntimeError "Unable to open b3d file" If BB3D_Decode_TAG$(s)<>"BB3D" RuntimeError "Invalid b3d file" If ReadInt(s\file)/100>0 RuntimeError "Invalid b3d file version" BB3D_Ripp_B3D(s,"",parent) CloseFile s\file If s\Scene_Root=0 s\Scene_Root=CreateMesh() NameEntity s\Scene_Root,Handle(s) BB3D_CreateMesh(s,Parent) Return s\Scene_Root End Function Function BB3D_CreateMesh(s.BB3D_Structure,Parent%=0) ; creation des textures For s\B3D_Tex.BB3D_TEXS = Each BB3D_TEXS s\B3D_Tex\Texture=LoadTexture(s\B3D_Tex\name,s\B3D_Tex\flags) If s\B3D_Tex\Texture<>0 TextureBlend s\B3D_Tex\texture,s\B3D_Tex\blend PositionTexture s\B3D_Tex\texture,s\B3D_Tex\x_pos,s\B3D_Tex\y_pos ScaleTexture s\B3D_Tex\texture,s\B3D_Tex\x_scl,s\B3D_Tex\y_scl RotateTexture s\B3D_Tex\texture,s\B3D_Tex\rot EndIf Next ; Creation des brushes For s\B3D_Brs.BB3D_BRUSH = Each BB3D_BRUSH s\B3D_Brs\Brush=CreateBrush() If s\B3D_Brs\Brush<>0 BrushColor s\B3D_Brs\Brush,s\B3D_Brs\red*255,s\B3D_Brs\grn*255,s\B3D_Brs\blu*255 BrushAlpha s\B3D_Brs\brush,s\B3D_Brs\alp BrushShininess s\B3D_Brs\brush,s\B3D_Brs\shi BrushBlend s\B3D_Brs\brush,s\B3D_Brs\Blend BrushFX s\B3D_Brs\brush,s\B3D_Brs\fx nb=nb+1 For i = 0 To s\B3D_Brs\BrushNbTex-1 TexHandle=s\B3D_Brs\Tex_Id[i] If TexHandle<>0 TexHandle=s\HandleTex[TexHandle] s\B3D_Tex.BB3D_TEXS=Object.BB3D_TEXS(TexHandle) If s\B3D_Tex\texture<>0 BrushTexture s\B3D_Brs\Brush,s\B3D_Tex\texture,0,i EndIf Next EndIf Next ; Si pas de scene root, on en crée un ! For n.BB3D_NODE=Each BB3D_NODE If n\name="Scene Root" Scene_Root_Present=True n\Typ="Scene Root" EndIf Next If Scene_Root_Present=0 EndIf ; Creation des Nodes de la Scene n.BB3D_NODE=First BB3D_NODE For NbNode=1 To s\NbNODE Select n\Typ$ Case "Scene Root" If Parent=0 s\Scene_Root=CreatePivot() Else s\Scene_Root=CreatePivot(Parent) EndIf n\Entity=s\Scene_Root NameEntity s\Scene_Root,"Scene Root" Case "MESH" n\Entity=CreateMesh(s\Scene_Root);n\Parent) For n\surf.BB3D_SRF=Each BB3D_SRF If n\IdMesh=n\surf\IdMesh n\surf\surface=CreateSurface(n\Entity) Color 0,255,0 For vrt=0 To n\surf\vt\NbVrtx-1 ;vrtx%=0 vn=vrt+1 vpx#=n\surf\vt\x[vn]:vpy#=n\surf\vt\y[vn]:vpz#=n\surf\vt\z[vn] vpu#=n\surf\vt\u1[vn]:vpv#=n\surf\vt\v1[vn] vpr#=n\surf\vt\red[vn]:vpg#=n\surf\vt\grn[vn]:vpb#=n\surf\vt\blu[vn]:vpal#=n\surf\vt\alp[vn] vpnx#=n\surf\vt\nx[vn]:vpny#=n\surf\vt\ny[vn]:vpnz#=n\surf\vt\nz[vn] vrtx=AddVertex (n\surf\surface,vpx,vpy,vpz,vpu,vpv) VertexColor n\surf\surface,vrtx,vpnr,vpng,vpnb,vpal VertexNormal n\surf\surface,vrtx,vpnx,vpny,vpnz Next For tri= 0 To n\surf\NbTri-1 v0=n\surf\Vrt0[tri] v1=n\surf\Vrt1[tri] v2=n\surf\Vrt2[tri] AddTriangle (n\surf\surface,v0,v1,v2) Next If n\surf\brush_id>-1 s\B3D_Brs.BB3D_BRUSH=Object.BB3D_BRUSH(s\HandleBrush[n\surf\brush_id+1]) If s\B3D_Brs\Brush<>0 PaintSurface n\surf\surface,s\B3D_Brs\Brush EndIf UpdateNormals n\Entity EndIf Next Print "Mesh "+n\name+" - pX#:"+n\x_pos+"pY#:"+n\y_pos+"pZ#:"+n\z_pos Print " "+"sX#:"+n\x_scl+"sY#:"+n\y_scl+"sZ#:"+n\z_scl Print " "+"rX#:"+n\x_rot+"rY#:"+n\y_rot+"rZ#:"+n\z_rot PositionEntity n\Entity,n\x_pos,n\y_pos,n\z_pos,0 ScaleEntity n\Entity,n\x_scl,n\y_scl,n\z_scl,0 RotateEntity n\Entity,n\x_rot,n_y_rot,n\z_rot,0 ;WaitKey Case "BONE" ; PositionEntity n\Entity,n\x_pos,n\y_pos,n\z_pos,0 ; ScaleEntity n\Entity,n\x_scl,n\y_scl,n\z_scl,0 ; RotateEntity n\Entity,n\x_rot,n_y_rot,n\z_rot,0 Case "B3DEXT_BGCOLOR" s\BGR%=Float(n\x_pos)*255 s\BGG%=Float(n\y_pos)*255 s\BGB%=Float(n\z_pos)*255 Case "B3DEXT_AMBIENT" s\AmbR%=Float(n\x_pos)*255 s\AmbG%=Float(n\y_pos)*255 s\AmbB%=Float(n\z_pos)*255 AmbientLight s\AmbR,s\AmbG,s\AmbB Case "B3DEXT_FOGCOLOR" s\FogR%=n\x_pos s\FogG%=n\y_pos s\FogB%=n\z_pos Case "B3DEXT_FOGRANGE" s\FogN#=n\x_pos s\FogF#=n\z_pos Case "CAMERA" n\Entity=CreateCamera(s\Scene_Root) PositionEntity n\Entity,n\x_pos,n\y_pos,n\z_pos n\CamFov=Float(45) CameraClsColor n\Entity,s\BGR,s\BGG,s\BGB CameraZoom n\Entity,n\CamFOV If s\FogF<>0 CameraFogMode n\Entity,1 CameraFogRange n\Entity,s\FogN,s\FogF CameraFogColor n\Entity,s\FogR,s\FogG,s\FogB EndIf End Select n=After n Next Return s\Scene_Root End Function Function BB3D_Ripp_B3D( s.BB3D_structure,tab$="",Parent%=0 ) tt$=tab$ tab$=tab$+" " s\NbParent=s\NbParent+1 While ( s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) b3d_TAG$=BB3D_Decode_TAG$(s) Select b3d_TAG$ Case "MESH" LIB_WriteLog(LogF,tab+"MESH============================================================================") s\NbMesh=s\NbMesh+1 brush_id=ReadInt(s\file) n.BB3D_NODE=Last BB3D_NODE n\Typ="MESH" n\IdMesh=s\NbMesh Case "NODE" BB3D_Parse_Nodes(s,tab) Case "TEXS" BB3D_Parse_Texs(s,tab) Case "BRUS" BB3D_Parse_Brushes(s,tab) Case "VRTS" BB3D_Parse_Vertex(s,tab) Case "TRIS" BB3D_Parse_Tris(s,tab) Case "BONE" n.BB3D_NODE=Last BB3D_NODE BB3D_Parse_Bone(s,n,tab) Case "ANIM" BB3D_Parse_Anims(s,tab) Case "KEYS" BB3D_Parse_Keys(s,tab) Default DebugLog tab$+"Tag mmm...non supporté..." End Select BB3D_Ripp_B3D( s,tab$,CurParent ) ;enfant de cette branche SeekFile s\file,s\Reg_Pos[s\Cur_Pos]:s\Cur_Pos=s\Cur_Pos-1 ;cloture de la branche Wend End Function ;==================================================================================== ; ================== Fonctions PRIVEES ===================== ;==================================================================================== ; ======= ;***** functions for reading from B3D files ***** ; ======= ; ======= Function BB3D_Decode_String$(s.BB3D_structure) Repeat ch=ReadByte(s\file) If ch=0 Return t$ t$=t$+Chr$(ch) Forever End Function ; ======= ; ======= Function BB3D_Decode_TAG$(s.BB3D_structure) For k=1 To 4 byt=ReadByte(s\file) tag$=tag$+Chr$(byt) Next offset=ReadInt( s\file) s\Cur_Pos=s\Cur_Pos+1 s\Reg_Pos[s\Cur_Pos]=FilePos( s\file)+offset Return tag$ End Function ; ======= Function BB3D_____________NODES() End Function ; ======= Function BB3D_Parse_Nodes(s.BB3D_Structure,tab$="") Color 255,255,0 LIB_WriteLog(LogF,tab+"NODE============================================================================") s\NbNODE=s\NbNODE+1 n.BB3D_NODE=New BB3D_NODE If s\NbParent>1 s\HandleParent[s\NbParent]=Handle(n) n\Parent=s\NbParent EndIf n\name$ =BB3D_Decode_String$(s) n\x_pos# =ReadFloat(s\file) n\y_pos# =ReadFloat(s\file) n\z_pos# =ReadFloat(s\file) n\x_scl# =ReadFloat(s\file) n\y_scl# =ReadFloat(s\file) n\z_scl# =ReadFloat(s\file) n\w_rot# =ReadFloat(s\file) n\x_rot# =ReadFloat(s\file) n\y_rot# =ReadFloat(s\file) n\z_rot# =ReadFloat(s\file) If n\name="B3DEXT_CAMERA" Fov#=n\x_pos n=Before n n\typ="CAMERA" n\CamFOV#=fov n.BB3D_NODE= Last BB3D_NODE Delete Last BB3D_NODE s\NbNODE=s\NbNODE-1 n.BB3D_NODE= Last BB3D_NODE LIB_WriteLog(LogF,tab$+"name="+n\name$+" : px:"+n\x_pos+"_py:"+n\y_pos+"_pz:"+n\z_pos) ElseIf n\name="B3DEXT_BGCOLOR" n\typ=n\name LIB_WriteLog(LogF,tab$+"ClsColor="+n\name$+" : ClsRed:"+n\x_pos+" ClsGreen:"+n\y_pos+" ClsBlue:"+n\z_pos) ElseIf n\name="B3DEXT_AMBIENT" n\typ=n\name LIB_WriteLog(LogF,tab$+"AmbientLight="+n\name$+" : AmbR:"+n\x_pos+" AmbG:"+n\y_pos+" AmbB:"+n\z_pos) ElseIf n\name="B3DEXT_FOGCOLOR" n\typ=n\name LIB_WriteLog(LogF,tab$+"Fog Color="+n\name$+" : FogR:"+n\x_pos+" FogG:"+n\y_pos+" FogB:"+n\z_pos) ElseIf n\name="B3DEXT_FOGRANGE" n\typ=n\name LIB_WriteLog(LogF,tab$+"Fog Range="+n\name$+" : FogN:"+n\x_pos+" FogF:"+n\z_pos) Else LIB_WriteLog(LogF,tab$+"name="+n\name$) LIB_WriteLog(LogF,tab$+"Pos : "+n\x_pos+"|"+n\y_pos+"|"+n\z_pos) LIB_WriteLog(LogF,tab$+"Scl : "+n\x_scl+"|"+n\y_scl+"|"+n\z_scl) LIB_WriteLog(LogF,tab$+"Rot : "+Int(n\x_rot)+"|"+Int(n\y_rot)+"|"+Int(n\z_rot)) EndIf End Function ; ======= Function BB3D__________TEXTURES() End Function ; ======= Function BB3D_Parse_TexS(s.BB3D_Structure,tab$="") Color 0,255,0 LIB_WriteLog(LogF,tab+"===============TEXS=================================") AllTex=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) While AllTex>0 s\NbTex=s\NbTex+1 s\B3D_Tex.BB3D_TEXS=New BB3D_TEXS s\B3D_Tex\name$=BB3D_Decode_String$(s) s\HandleTex[s\NbTex]=Handle(s\B3D_Tex) LIB_WriteLog(LogF,tab+tab+"tex :"+s\B3D_Tex\name) s\B3D_Tex\flags =ReadInt(s\file) s\B3D_Tex\blend =ReadInt(s\file) s\B3D_Tex\x_pos# =ReadFloat(s\file) s\B3D_Tex\y_pos# =ReadFloat(s\file) s\B3D_Tex\x_scl# =ReadFloat(s\file) s\B3D_Tex\y_scl# =ReadFloat(s\file) s\B3D_Tex\rot# =ReadFloat(s\file) AllTex=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) Wend End Function ; ======= Function BB3D___________BRUSHES() End Function ; ======= Function BB3D_Parse_Brushes(s.BB3D_Structure,tab$="") Color 255,0,0 LIB_WriteLog(LogF,tab+"===============BRUS==================================") n_texs=ReadInt(s\file) AllBrush=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) While AllBrush>0 s\B3D_Brs.BB3D_BRUSH=New BB3D_BRUSH s\B3D_Brs\name$=BB3D_Decode_String$(s) s\B3D_Brs\red#=ReadFloat(s\file) s\B3D_Brs\grn#=ReadFloat(s\file) s\B3D_Brs\blu#=ReadFloat(s\file) s\B3D_Brs\alp#=ReadFloat(s\file) s\B3D_Brs\shi#=ReadFloat(s\file) s\B3D_Brs\blend%=ReadInt(s\file) s\B3D_Brs\fx%=ReadInt(s\file) s\B3D_Brs\BrushNbTex=n_texs-1 Print " Brush Propertys =====================" Print " RGB : "+s\B3D_Brs\red+" - "+s\B3D_Brs\grn+" - "+s\B3D_Brs\blu Print " Alpha : "+s\B3D_Brs\alp Print " Shins : "+s\B3D_Brs\shi Print " blend : "+s\B3D_Brs\blend Print " Fx : "+s\B3D_Brs\fx WaitKey For k=0 To n_texs-1 NumTex%=ReadInt(s\file)+1 s\B3D_Brs\Tex_Id[k]=NumTex If NumTex<>0 s\B3D_Tex.BB3D_TEXS=Object.BB3D_TEXS(s\HandleTex[NumTex]) EndIf Next s\NbBrush=s\NbBrush+1 s\HandleBrush[s\NbBrush]=Handle(s\B3D_Brs) LIB_WriteLog(LogF,tab+tab+s\B3D_Brs\name) AllBrush=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) Wend End Function ; ======= Function BB3D_____________BONES() End Function ; ======= Function BB3D_Parse_Bone(s.BB3D_Structure,n.BB3D_NODE,tab$="") LIB_WriteLog(LogF,tab+"BONE============================================================================") n\NbVrt_inBone=0 n\Typ="BONE" CurParent =n\Entity Print tab+tab+"BONE" sz=8 n_weights=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file ))/sz If n_weights*sz=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) While (s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) n\NbVrt_inBone=n\NbVrt_inBone+1 n\Vrt[n\NbVrt_inBone]=ReadInt(s\file) n\weight#[n\NbVrt_inBone]=ReadFloat(s\file) LIB_WriteLog(LogF,tab+"VrtId:"+n\Vrt[n\NbVrt_inBone]+" w#:"+n\weight#[n\NbVrt_inBone]) Wend Else DebugLog tab$+"***** Illegal number of bone weights *****" EndIf End Function ; ======= Function BB3D__________VERTICES() End Function ; ======= Function BB3D_Parse_Vertex(s.BB3D_structure,tab$="") vt.BB3D_VRT=New BB3D_VRT flags=ReadInt(s\file) tc_sets=ReadInt(s\file) tc_size=ReadInt(s\file) 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=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file ))/sz If n_verts*sz=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) IdVrt=0 While (s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) IdVrt=IdVrt+1 vt\x#[IdVrt]=ReadFloat(s\file) vt\y#[IdVrt]=ReadFloat(s\file) vt\z#[IdVrt]=ReadFloat(s\file) If flags And 1 vt\nx#[IdVrt]=ReadFloat(s\file) vt\ny#[IdVrt]=ReadFloat(s\file) vt\nz#[IdVrt]=ReadFloat(s\file) EndIf If flags And 2 vt\red#[IdVrt]=ReadFloat(s\file) vt\grn#[IdVrt]=ReadFloat(s\file) vt\blu#[IdVrt]=ReadFloat(s\file) vt\alp#[IdVrt]=ReadFloat(s\file) EndIf a=-1 For j=1 To tc_sets*tc_size a=a+1 If a=0 vt\u1#[IdVrt]=ReadFloat(s\file) If a=1 vt\v1#[IdVrt]=ReadFloat(s\file) If a=2 vt\u2#[IdVrt]=ReadFloat(s\file) If a=3 vt\v2#[IdVrt]=ReadFloat(s\file):a=-1 Next LIB_WriteLog(LogF,tab+"Vrt "+IdVrt+" Pos:"+vt\x#[IdVrt]+" "+vt\y#[IdVrt]+" "+vt\z#[IdVrt]) LIB_WriteLog(LogF,tab+tab+"Nrm:"+vt\nx#[IdVrt]+" "+vt\ny#[IdVrt]+" "+vt\nz#[IdVrt]) LIB_WriteLog(LogF,tab+tab+"Clr:"+vt\red#[IdVrt]+" "+vt\grn#[IdVrt]+" "+vt\blu#[IdVrt]+" "+vt\alp#[IdVrt]) LIB_WriteLog(LogF,tab+tab+"UV#: u "+vt\u1#[IdVrt]+" "+vt\u2#[IdVrt]+" v "+vt\v1#[IdVrt]+" "+vt\v2#[IdVrt]) Wend vt\NbVrtx=IdVrt Else LIB_WriteLog(LogF,tab$+"***** Illegal number of vertices *****") EndIf End Function ; ======= Function BB3D_________TRIANGLES() End Function ; ======= Function BB3D_Parse_Tris(s.BB3D_Structure,tab$="") n.BB3D_NODE= Last BB3D_NODE n\NbSurf=n\NbSurf+1 n\surf.BB3D_SRF=New BB3D_SRF n\surf\IdMesh=n\IdMesh n\surf\vt.BB3D_VRT=Last BB3D_VRT n\surf\brush_id=ReadInt(s\file) sz=12 n_tris=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file ))/sz Print n_tris If n_tris*sz=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) ntri=0 While (s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) ntri=ntri+1 n\surf\vrt0[ntri]=ReadInt(s\file) n\surf\vrt1[ntri]=ReadInt(s\file) n\surf\vrt2[ntri]=ReadInt(s\file) Wend n\surf\NbTri=ntri LIB_WriteLog(LogF,tab+tab+"Surface créée - "+ntri+" tris créés") Else LIB_WriteLog(LogF,tab$+"***** Illegal number of triangles *****") EndIf End Function ; ======= Function BB3D_______________KEYS() End Function ; ======= Function BB3D_Parse_Keys(s.BB3D_Structure,tab$="") LIB_WriteLog(LogF,tab+"=>clé <=") flags=ReadInt(s\file) sz=4 If flags And 1 sz=sz+12 If flags And 2 sz=sz+12 If flags And 4 sz=sz+16 n_keys= (s\Reg_Pos[s\Cur_Pos]-FilePos( s\file ))/sz If n_keys*sz=(s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) While (s\Reg_Pos[s\Cur_Pos]-FilePos( s\file )) frame=ReadInt(s\file) If flags And 1 key_px#=ReadFloat(s\file) key_py#=ReadFloat(s\file) key_pz#=ReadFloat(s\file) EndIf If flags And 2 key_sx#=ReadFloat(s\file) key_sy#=ReadFloat(s\file) key_sz#=ReadFloat(s\file) EndIf If flags And 4 key_rw#=ReadFloat(s\file) key_rx#=ReadFloat(s\file) key_ry#=ReadFloat(s\file) key_rz#=ReadFloat(s\file) EndIf LIB_WriteLog(LogF," - pos :"+key_px+" "+key_py+" "+key_pz,1) LIB_WriteLog(LogF," - scl :"+key_sx+" "+key_sy+" "+key_sz,1) LIB_WriteLog(LogF," - rot :"+key_rx+" "+key_ry+" "+key_rz) Wend Else LIB_WriteLog(LogF,tab$+"***** Illegal number of keys *****") EndIf End Function ; ======= Function BB3D______________ANIMS() End Function ; ======= Function BB3D_Parse_Anims(s.BB3D_Structure,tab$="") LIB_WriteLog(LogF,tab+"ANIM============================================================================") flags=ReadInt(s\file) n_frames=ReadInt(s\file) fps=ReadFloat(s\file) LIB_WriteLog(LogF,tab+tab$+flags+" "+n_frames+" "+fps) End Function ; =======