So here's a short approach on DragonBall online meshes (dff)
Basic knowledge of 3D formats assumed.
Sample
n_hmy_m_b2.dff
May not apply to other samples.So don't be confused.
Skeletal bones being contained ("Bip01 L Foot") not handled here.
First of all the face indices to be found. Maybe BYTE or (unsigned) int.
int as 2 (WORD) or 4 bytes (DWORD)
Faces consisting of 3 (triangles) or 4 indices (quads).
Scrolling through the mesh file using a hexeditor the face index table easily to be found
looking like a swizzled ASCII table (N.Q.R., b.a.c. or something like that).
One table's starting offset to be 0x50B0E (yes, tend to start the search from file's end).
Looks like having 4 indices per faces. It's no quads because the uncommon 00 00 index to be overread.
Each index of WORD size.
For wavefront obj format the faceindices are starting from 1 instead of 0 so a one needs to be added to each index.
First three faces:
f 21/21 58/58 5/5
f 73/73 5/5 74/74
f 22/22 18/18 59/59
The notation says: first face's vertices are vertex 21,58,5
first face's texture coords are tex 21,58,5
Ignored normals because they can be created in blender automatically.
If to be used normals the notation would be f 21/21/21 58/58/58 5/5/5
(But some formats go like this: f 21/15/15 58/16/16 5/17/17 for example)
End of face index table at 0x50EAD. So face count would be 116 (928/8)
928 = 0x3A0 = 0x50EAE - 0x50B0E
Last three faces:
f 12/12 15/15 17/17
f 35/35 1/1 39/39
f 12/12 17/17 1/1
Now searching the vectors of vertices, normals and the texture coords.
Vertices and normals being composed of 3 floats (x,y,z), texture coords of 2 floats.
(square root of) Sum of square of the normals components being one (the length of the vectors). This way normals to be identified easily.
Position of tables in the files may vary. Often the order is vertices, normals, texture coords, faces.
In this case it starts with the table of tex coords then table of face indices follows.
Then vertices/normals table follows at 0x50EAE. (I thought - but was a hoax; true start is at 0x50EC6)
Ends at 0x515E5.
Means we have a block size of 1824. 3 floats occupy 12 bytes. 1824/12=152
In this case it's a vertices and a normals block. So there are 76 vertices followed by 76 normals.
The vertex count 0x4C (= 76 dec.) is 4C 00 00 00 in little endian notation.
Should be found somewhere in the file. In this sample it's at 0x508A6.
(Although there are 21 other findings.)
The first 3 verts:
v 0.206444 -0.003008 0.096340
v 0.197505 0.003211 -0.140815
v 0.143018 0.000008 0.136271
And the last three:
v -0.382032 0.145165 -0.214877
v -0.290796 0.125715 -0.214021
v -0.335196 0.136866 -0.217663
(Vertex block ends at 0x51255. Normals block ends at 0x515E5.)
Last not least the tex coords block. To be found at 0x508AE.
Yes, it's located before the face index block.
Texture coords consist of two floats (2D coords x,y) in the range of 0.0 .. 1.0.
First tex coord pair:
vt 0.300640 0.505262
Last one:
vt 0.085109 0.699195
Other face index blocks in this file containing FF FF.
Usually being a marker for ending of TriStrips.
Not applying in this case imho. Not sure how to handle these blocks.
So this was a crash course only. May contain errors.
Nevertheless: HTH