I've started reverse-engineering the .TER file format that's used in OoW zones and what follows is my progress thus far.
The header is as follows:
Code:
struct Header {
char magic[4]; // Constant at EQGT
uint32 unk1; // Seems constant at 2... version?
uint32 list_length; // This is the size of the object/property list that follows
uint32 object_count; // This is the number of objects in the list (NOT the number of elements total)
uint32 vertex_count; // This seems to be the count of vertices in the mesh.
uint32 poly_count; // Seems to be the count of polygons in the mesh.
};
After the header comes a list of objects and their properties.
Each element is a null-terminated name followed by a null-terminated value.
If the name starts with 'e_' it is a property of the previous object named, otherwise it's naming a new object and its associated base texture.
For example, the list for wall of slaughter is:
colmap01 colmap01.dds
e_TextureDiffuse0 palmap01a.bmp
e_TexturePalette0 HW_rd01_c.dds
e_TextureDetail0 e_fScale0
e_fGrassDensity0 FT_RD2_c.dds
e_TextureDetail1 e_fScale1
e_fGrassDensity1 FT_path01.dds
e_TextureDetail2 e_fScale2
e_fGrassDensity2 FT_plateau01.dds
e_TextureDetail3 e_fScale3
e_fGrassDensity3 FT_grass01.dds
e_TextureDetail4 e_fScale4
e_fGrassDensity4 FT_plateau02.dds
e_TextureDetail5 e_fScale5
e_fGrassDensity5 None
e_TextureDetail6 e_fScale6
e_fGrassDensity6 None
e_TextureDetail7 e_fScale7
e_fGrassDensity7 None
e_TextureDetail8 e_fScale8
e_fGrassDensity8 None
e_TextureDetail9 e_fScale9
e_fGrassDensity9 Opaque_MaxC1DTP.fx
colmap02 colmap02.dds
e_TextureDiffuse0 palmap02a.bmp
e_TexturePalette0 HW_rd01_c.dds
e_TextureDetail0 e_fScale0
e_fGrassDensity0 FT_RD2_c.dds
e_TextureDetail1 e_fScale1
e_fGrassDensity1 FT_path01.dds
e_TextureDetail2 e_fScale2
e_fGrassDensity2 FT_plateau01.dds
e_TextureDetail3 e_fScale3
e_fGrassDensity3 FT_grass01.dds
e_TextureDetail4 e_fScale4
e_fGrassDensity4 FT_plateau02.dds
e_TextureDetail5 e_fScale5
e_fGrassDensity5 None
e_TextureDetail6 e_fScale6
e_fGrassDensity6 None
e_TextureDetail7 e_fScale7
e_fGrassDensity7 None
e_TextureDetail8 e_fScale8
e_fGrassDensity8 None
e_TextureDetail9 e_fScale9
e_fGrassDensity9 Opaque_MaxC1DTP.fx
colmap03 colmap03.dds
e_TextureDiffuse0 palmap03a.bmp
e_TexturePalette0 HW_rd01_c.dds
e_TextureDetail0 e_fScale0
e_fGrassDensity0 FT_RD2_c.dds
e_TextureDetail1 e_fScale1
e_fGrassDensity1 FT_path01.dds
e_TextureDetail2 e_fScale2
e_fGrassDensity2 FT_plateau01.dds
e_TextureDetail3 e_fScale3
e_fGrassDensity3 FT_DRD2_c.dds
e_TextureDetail4 e_fScale4
e_fGrassDensity4 FT_plateau02.dds
e_TextureDetail5 e_fScale5
e_fGrassDensity5 None
e_TextureDetail6 e_fScale6
e_fGrassDensity6 None
e_TextureDetail7 e_fScale7
e_fGrassDensity7 None
e_TextureDetail8 e_fScale8
e_fGrassDensity8 None
e_TextureDetail9 e_fScale9
e_fGrassDensity9 Opaque_MaxC1DTP.fx
colmap04 colmap04.dds
e_TextureDiffuse0 palmap04a.bmp
e_TexturePalette0 HW_rd01_c.dds
e_TextureDetail0 e_fScale0
e_fGrassDensity0 FT_RD2_c.dds
e_TextureDetail1 e_fScale1
e_fGrassDensity1 FT_path01.dds
e_TextureDetail2 e_fScale2
e_fGrassDensity2 FT_plateau01.dds
e_TextureDetail3 e_fScale3
e_fGrassDensity3 FT_DRD2_c.dds
e_TextureDetail4 e_fScale4
e_fGrassDensity4 FT_plateau02.dds
e_TextureDetail5 e_fScale5
e_fGrassDensity5 None
e_TextureDetail6 e_fScale6
e_fGrassDensity6 None
e_TextureDetail7 e_fScale7
e_fGrassDensity7 None
e_TextureDetail8 e_fScale8
e_fGrassDensity8 None
e_TextureDetail9 e_fScale9
e_fGrassDensity9 Opaque_MaxC1DTP.fx
tunn04 sp_tunn04.dds
e_TextureDiffuse0 sp_tunn04_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
tunn05 sp_tunn05.dds
e_TextureDiffuse0 sp_tunn05_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
tunn06 sp_tunn06.dds
e_TextureDiffuse0 sp_tunn06_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
tunn07 tunn07.dds
e_TextureDiffuse0 tunn07_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_wall_T01 sp_ft_wall_high.dds
e_TextureDiffuse0 Di_ent_cinderblock01_mid_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_wall_M01 sp_ft_wall_mid.dds
e_TextureDiffuse0 Di_ent_cinderblock01_mid_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_wall_B01 sp_ft_wall_low.dds
e_TextureDiffuse0 Di_ent_cinderblock01_low_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_arch_T01 ab_arch_T01.dds
e_TextureDiffuse0 Di_ent_metal02_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_arch_M01 ab_arch_M01.dds
e_TextureDiffuse0 Di_ent_metal02_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_arch_B01 ab_arch_B01.dds
e_TextureDiffuse0 Di_ent_metal02_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ab_floor_01 ab_floor_01.dds
e_TextureDiffuse0 sp_ft_floor_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
rock18 av_rock18_c.dds
e_TextureDiffuse0 av_rock18_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
rock10 av_rock10_c.dds
e_TextureDiffuse0 av_rock10_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
rock16 av_rock16_c.dds
e_TextureDiffuse0 Di_ent_wall_crumble01_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
maze01 av_rock12_c.dds
e_TextureDiffuse0 av_rock12_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
maze02 Di_rune_plain_bkg_c.dds
e_TextureDiffuse0 Di_rune_plain_bkg_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
maze03 ab_maze01_c.dds
e_TextureDiffuse0 ab_maze01_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
maze04 Di_floor01_c.dds
e_TextureDiffuse0 Di_floor01_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
maze05 Di_Maze01_Power_c.dds
e_TextureDiffuse0 Di_Maze01_Main_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
ra_pris19 ra_prison19_c.dds
e_TextureDiffuse0 ra_prison19_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
av_pris14high av_prison14_c.dds
e_TextureDiffuse0 av_prison13a_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
av_pris22mid av_prison22_c.dds
e_TextureDiffuse0 av_prison22_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
av_pris15low av_prison15_c.dds
e_TextureDiffuse0 av_prison15_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
av_pris18flr av_prison18_c.dds
e_TextureDiffuse0 av_prison18a_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
dn_path HW_rd01_c.dds
e_TextureDiffuse0 HW_rd01_n.dds
e_TextureNormal0 Opaque_MaxCB1.fx
I'll post more as I figure it out.
Happy Hacking,
Lord Daeken M. BlackBlade
(Cody Brocious)
Edit #1: Added the object_count element to the struct.
Edit #2: Replaced uint32 unk[2]; with the vertex_count and poly_count fields. Put the struct in code brackets.