P3D File Format - ODOLV40 Obsolete: Difference between revisions
Categories:
m (P3D File Format - ODOL moved to P3D File Format - ODOLV40: To account for difference with ODOL v7) |
m (wiki syntax correction) |
||
| Line 1: | Line 1: | ||
The following information has been provided by BxBx | The following information has been provided by BxBx and included by Mikero | ||
''Legend'' | ''Legend'' | ||
int 4 bytes | int 4 bytes | ||
ulong 4 byte integer | ulong 4 byte integer | ||
bool8 1 byte bool 0, or 1 | bool8 1 byte bool 0, or 1 | ||
Blocks in Odol V40 are quite similar to Odol v7 but placed in reverse order. | Blocks in Odol V40 are quite similar to Odol v7 but placed in reverse order. | ||
Resolution table, | Resolution table, | ||
LOD tables last to first | LOD tables last to first | ||
The same LZ compression is used for LODs as ODOL v7 | |||
known data: | |||
Beginning of file (Header signature) | |||
struct OdolV40 | |||
{ | |||
struct OdolV40 | |||
{ | |||
char signature[4] //'ODOL' | char signature[4] //'ODOL' | ||
long format // 40 | long format // 40 | ||
long lod_count | long lod_count | ||
float resolutions[lod_count] | float resolutions[lod_count] | ||
{ | { | ||
| Line 31: | Line 31: | ||
byte u5[139]; // unknown data , still same length as v7 | byte u5[139]; // unknown data , still same length as v7 | ||
Asciiz skeleton_name // float | Asciiz skeleton_name // float | ||
if (*skeleton_name) | if (*skeleton_name) | ||
{ | { | ||
| Line 41: | Line 41: | ||
} | } | ||
} | } | ||
char u7[0x26] // unknown data | char u7[0x26] // unknown data | ||
Asciiz modelclass, modelparent // I think purpose this data found values 'house''no' | Asciiz modelclass, modelparent // I think purpose this data found values 'house''no' | ||
| Line 58: | Line 58: | ||
} | } | ||
} | } | ||
unknowdata[unknowlength] // handle seek | unknowdata[unknowlength] // handle seek | ||
struct lod[lod_count] | struct lod[lod_count] | ||
{ | { | ||
| Line 110: | Line 110: | ||
int selected_vertices_count | int selected_vertices_count | ||
ushort selected_vertices[selected_vertices_count] // if selected_vertices_count > 0x100 | ushort selected_vertices[selected_vertices_count] // if selected_vertices_count > 0x100 | ||
// then compresed by LZ | // then compresed by LZ | ||
int u17 | int u17 | ||
char uch[u17]; | char uch[u17]; | ||
| Line 119: | Line 119: | ||
char * name,*value | char * name,*value | ||
} | } | ||
unknowdata[mostly 0x15 , but not every time] | unknowdata[mostly 0x15 , but not every time] | ||
int vertices_count // again same value | int vertices_count // again same value | ||
bool8 ub | bool8 ub | ||
| Line 132: | Line 132: | ||
int vertices_count | int vertices_count | ||
struct vertices_pos[verices_count]{float x,y,z} | struct vertices_pos[verices_count]{float x,y,z} | ||
normals and the other data follow ,but this is in progress | |||
} | |||
I cannot find face.texture_index informations, in M16A4 are only 2 textures and I texture it handly by original UVsets. | |||
====links==== | |||
1st ARMA MLOD [http://www.flashpoint1985.com/cgi-bin/ikonboard311/ikonboard.cgi?s=33da82892e475977188fcee7f913b54f;act=ST;f=76;t=64271 M16A4 on BIForum] | |||
OFP [[ODOL|ODOLv7]] | |||
More about LZ compresion [[ODOL|ODOLv7]] | |||
Revision as of 09:42, 16 June 2007
The following information has been provided by BxBx and included by Mikero
Legend
int 4 bytes
ulong 4 byte integer
bool8 1 byte bool 0, or 1
Blocks in Odol V40 are quite similar to Odol v7 but placed in reverse order.
Resolution table,
LOD tables last to first
The same LZ compression is used for LODs as ODOL v7
known data:
Beginning of file (Header signature)
struct OdolV40
{
char signature[4] //'ODOL'
long format // 40
long lod_count
float resolutions[lod_count]
{
long u1;
float u2,u3,u4
} // unknown data, same data follows on end of ODOL v7
byte u5[139]; // unknown data , still same length as v7
Asciiz skeleton_name // float
if (*skeleton_name)
{
bool u6 // 8bit boolean // value 1 or 0
int bone_count
struct bones[bone_count]
{
Asciiz bone1,bone2;
}
}
char u7[0x26] // unknown data
Asciiz modelclass, modelparent // I think purpose this data found values 'houseno'
//housebuilding',....
char u8[5] // unknown data
bool8 exist_anims
if (exist_anims)
{
int anims_count
struct anims[anims_count]
{
int type // 0,4,9 // rotation,move,.., i dont check it yet
Asciiz name,parent
float tr[6] // transformations values
if (type!=9) int u9
}
}
unknowdata[unknowlength] // handle seek
struct lod[lod_count]
{
int vertices count
bool8 ub1
if (ub1) char uch[11] // unknow data
char uch[0x29] // unknow data
int textures_count
Asciiz texture[textures_count]
int materials_count
struct materials[materials_count]
{
Asciiz name
char uch[0x85] // unknowdata // some float values
int textures_count
struct textures_in_material[textres_count]
{
int u10 // value 3 still
Asciiz t_name
int u11 // self increment value // 0,1,2,3,4,...
}
char uch[0x34*textres_count] // some struct with same length
//as textures_in_material
// I dont work with material now, I skip it.
}
if ( textures_count>0 ) char uch[7];
bool8 ub // unknown value
int faces_count
char u12[6]
struct faces[6]
{
char dot_count
unsigned short dot_vertice_index[dot_count]
}
unknowdata[ubknowlength]
int components_count
struct components[components_count]
{
char *name;
int selected_faces_count
ushort selected_faces[selected_faces_count] // if selected_faces_count > 0x100
// then compresed by LZ
int u14;
ushort u15[u14]
bool8 ub
if (ub) int u16
char uch[3]
bool8 ub2
int selected_vertices_count
ushort selected_vertices[selected_vertices_count] // if selected_vertices_count > 0x100
// then compresed by LZ
int u17
char uch[u17];
}
int named_properties_count
struct named_properties[named_properties_count]
{
char * name,*value
}
unknowdata[mostly 0x15 , but not every time]
int vertices_count // again same value
bool8 ub
if (ub)
{
struct UV[vertices_count] {float u,v} if count > 127 then LZ
}
else char uch[8]
int u[18]
int vertices_count
struct vertices_pos[verices_count]{float x,y,z}
normals and the other data follow ,but this is in progress
}
I cannot find face.texture_index informations, in M16A4 are only 2 textures and I texture it handly by original UVsets.
links
1st ARMA MLOD M16A4 on BIForum OFP ODOLv7 More about LZ compresion ODOLv7