HowTo:Edit BFXM files
From VsWiki
Using animated textures on a model
| HowTos
| Editing XMESH files
|
NOTE: It is generally recommended that you use mesher to convert from BFXM to XMESH and back again for the purposes of editing. However, here is the specification for BFXM files.
Contents |
Format for version 0.2
All data stored in little endian order except for strings.
Visual layout:
<SuperHeader
- <Record header
- <Mesh header,attributes,geometry>
- <Mesh header, attributes,geometry>
- ...
- <Mesh header, attributes,geometry>
- >
- <Record header
- <Mesh header,attributes,geometry>
- <Mesh header, attributes,geometry>
- ...
- <Mesh header, attributes,geometry>
- >
- ...
- <Record header
- <Mesh header,attributes,geometry>
- <Mesh header, attributes,geometry>
- ...
- <Mesh header, attributes,geometry>
- >
>
Per record visual layout:
<Record header
- <Top Mesh header,attributes,geometry>
- <First LOD Mesh header, attributes,geometry>
- ...
- <Last LOD Mesh header, attributes,geometry>
- <First Anim Mesh header, attributes,geometry>
- ...
- <Last Anim Mesh header, attributes,geometry>
>
SuperHeader
Type String:'BFXM'
Version number*100:Integer
File length in bytes: Integer
Superheader Length in bytes: Integer
Number of fields per vertex:integer (8)
Number of fields per polygon structure: integer (1)
Number of fields per referenced vertex: integer (3)
Number of fields per referenced animation: integer (1)
Number of records: integer
Number of fields per animation definition: integer (1)
End SuperHeader
Record Header
for each record:
- Size of record header in bytes: integer
- Size of record in bytes: integer
- number of meshes:integer
End Record Header
For each mesh:
Header
Size of Header in bytes: integer
Size of mesh in bytes: integer
Scale: float
Reverse: integer
Forcetexture: integer
Sharevert: integer
Polygonoffset:float
Blendmode:<bsrc:integer,bdest:integer>
Material<Power:float,Ambient.RGBA:4 floats,Diffuse.RGBA:4 floats,Emissive.RGBA:4 floats,Specular.RGBA:4
floats,Cullface:integer,lighting:integer,reflect:integer,usenormals:integer>
End Header
Arbitrary length attributes
Size of Arbitrary length attributes in bytes: integer
Detail Texture:
- Name Length: integer
- Name: char string
- Word alignment padding: string of bytes (all 0)
Number of Detail Planes: integer
- for each plane:
- <x:float,y:float,z:float>
Number of Textures: integer
- for each texture:
- type: integer
- index: integer
- namelength: integer
- Name: char string
- Word alignment padding: string of bytes (all 0)
Number of Logos: Integer
- for each logo:
- size:float
- offset: float
- rotation: float
- type: integer
- numrefs:integer
- for each ref:
- refnum: integer
- weight: float
Number of LODs: integer (Must be 0 for LOD or animation meshes)
- for each LOD:
- Size: float
- Mesh offset number: integer
Number of animations: integer (Must be 0 for animation mesh)
for each animation:
- length of name: integer
- name: string
- Word alignment padding: string of bytes (all 0)
- FPS: float
- number of frames:integer
- for each frame:
- Mesh offset number: integer
End Arbitrary length attributes
Geometry
Number of vertices: integer
- for each vertex:
- <x:float,y:float,z:float,i:float,j:float,k:float,s:float,t:float>
Number of Lines: integer
- for each line:
- <flatshade:integer,2 <index:integer,s:float,t:float>>
Number of Triangles: integer
- for each triangle:
- <flatshade:integer,3 <index:integer,s:float,t:float>>
Number of Quads: integer
- for each Quad:
- <flatshade:integer,4 <index:integer,s:float,t:float>>
Number of Linestrips:
- for each Linestrip:
- Number of elements in current Linestrip: Integer
- Flatshade: integer (always 0 actually... could optimize out)
- for each element:
- <index:integer,s:float,t:float>
Number of Tristrips:
- for each Tristrip:
- Number of elements in current Tristrip: Integer
- Flatshade: integer (always 0 actually... could optimize out)
- for each element:
- <index:integer,s:float,t:float>
Number of Trifans:
- for each Trifan:
- Number of elements in current Trifan: Integer
- Flatshade: integer (always 0 actually... could optimize out)
- for each element:
- <index:integer,s:float,t:float>
Number of Quadstrips:
- for each:
- Number of elements in current Quadstrip: Integer
- Flatshade: integer (always 0 actually... could optimize out)
- for each element:
- <index:integer,s:float,t:float>
End Geometry
See also
Using animated textures on a model
| HowTos
| Editing XMESH files
|

