S3D
Simglide format (continuing from Dimakrator2's work)
3DMD (4 bytes) DWORD (size of the file most of the time)
HEAD (4 bytes) DWORD (size of HEAD area including the header) WORD (major version | Critical to file parse) (1) WORD (minor version | Critical to file parse) (5 IE 1.5)
(4 bytes) VERT
DWORD (size of VERT area including the header) DWORD (number of vertices groups in VERT area)
(vertices group (header and vertices)):
WORD - Unused WORD (number of vertices in group) DWORD - Format of Vertices (80004001 for known s3d's)
(vertices 80004001):
float, float, float, float, float (x, y, z, u, v for each vertex) (x, y, z - space coordinates in meters,) (u, v - texture coordinates) (0< u <1, 0< v <1,) (0,0 - top-left corner of texture) ...
INDX (4 bytes)
DWORD (size of INDX area including the header) DWORD (number of vertices groups in INDX area)
(vertices group (header and triangles)):
WORD - Unused WORD - Index data format (always 2) WORD (number of vertices in group)
triangles:
WORD, WORD, WORD (indices of vertices in VERT area.) (It is counter-clockwise triangle) ...
PRIM (4 bytes)
DWORD (size of PRIM area including the header) DWORD (number of groups in PRIM area)
vertices group:
DWORD - Unknown 1 (Appears to always be 1) WORD - 00 00 (never seen filled in) DWORD - Unknown 2 (only seen filled in once) DWORD - Unknown 3 ( I saw no reference to vertice groups, so I've declassified it for the moment) ...
MATS (4 bytes)
DWORD (size of mats area including header) DWORD (number of Materials groups)
(Materials group:) DWORD -? DWORD -? DWORD -? DWORD -? DWORD - Instance ID for this material DWORD -? DWORD -? BYTE - Length of materials name including the 00 ending byte Material Name BYTE - 00 (end materials name)
(((SPECIFICATION 1)))
ANIM (4 bytes)
(Header 20 bytes): DWORD - length of anim area including the header (only most of the time) WORD Number of Material Assignments in Indexes WORD Type Specifier or Exclusion Flag (known values: 0x00, 0x1e, 0x0A) WORD Unknown 1 (0x03 always) DWORD Unknown 2 DWORD Unknown 3 WORD Number of Assignment Groups
(Assigning Group): WORD - Length of animation name including the 00 ending byte Animation name BYTE - 00 (end of animation name) WORD Material Index Number WORD X Adjustment WORD Y Adjustment WORD Z Adjustment ...
The other theory on the animation group besides it containing actual data relating to moving the object is the following: "Textures are referenced by the Materials tab and then related to the correct 3D groupings via the Anim(ation)? tab; this contains the material number as specified in the materials tab and the X,Y,Z group axis it applies to (pretty much stays with it's own groupings). In an example, frame 4 is a road texture and (x,y,z)(4,4,4) is the group for the road overpass bridge. " This data provided via krelf
(Prop area is for assignments of clothes and models to advisor animations and possibly other skinning animations)
PROP (4 bytes)
DWORD - Size of the prop area DWORD - Number of property assignment groups
(property assignment group) DWORD - FFFF 0000 (unknown 1) BYTE - size of type field) String - Type of assignment BYTE - 00 (end string) BYTE - size of assigned property name String - assigned value (IE Adult for skeleton type etc) BYTE - 00 (end string)
REGP (4 bytes)
DWORD - Size of regp area including header DWORD - Number of effects in regp area
(Effect): BYTE - Length of Effect name including the 00 ending byte Effect Name ( fx_##_effectname ) BYTE - 00 (end effects name) WORD - number of effects subgroups for this effect
(Effect Subgroup): DWORD -? DWORD -? DWORD -? DWORD -? DWORD -? DWORD -? DWORD -? ... ...