Shape files (.s) format Jeffrey Kraus support@digital-rails.com 2015-01-12 Credit: Okrasa Ghia for Archibald which aided in understanding the format. The syntax of shape files (.s) is described in shape.bnf. This document is an attempt to describe the semantic constraints of this format. count is an integer that counts the number of sub-elements contained index is an integer from 0 to count-1 hex is an 8 character hexidecimal string Locations with a shape file are described using XPath, http://www.w3.org/standards/techs/xpath#w3c_all /shape/ /shape/shape header/ /shape/shape header/@flag1 hex constant 00000000 /shape/shape header/@flag2 hex constant 00000000 /shape/volumes/ /shape/volumes/@numVols count of /shape/volumes/vol_sphere/ /shape/volumes/vol_sphere/ /shape/volumes/vol_sphere/vector/ /shape/volumes/vol_sphere/vector/@x float /shape/volumes/vol_sphere/vector/@y float /shape/volumes/vol_sphere/vector/@z float /shape/volumes/vol_sphere/@radius float /shape/shader_names/ /shape/shader_names/@numShaders count of /shape/shader_names/named_shader/ /shape/shader_names/named_shader/ string /shape/texture_filter_names/ /shape/texture_filter_names/@numFilters count of /shape/texture_filter_names/named_filter_mode/ /shape/texture_filter_names/named_filter_mode/ string /shape/points/ /shape/points/@numPoints count of /shape/points/point/ /shape/points/point/ /shape/points/point/@pX float /shape/points/point/@pY float /shape/points/point/@pZ /shape/uv_points/ /shape/uv_points/@numUVPoints count of /shape/uv_points/uv_point/ /shape/uv_points/uv_point/ /shape/uv_points/uv_point/@u float /shape/uv_points/uv_point/@v float expect @u and @v between 0 and 1 /shape/normals/ /shape/normals/@numVectors count of /shape/normals/vector/ /shape/normals/vector/ /shape/normals/vector/@x float /shape/normals/vector/@y float /shape/normals/vector/@z float expect square of @x plus square of @y plus square of @z to equal 1 /shape/sort_vectors/ /shape/sort_vectors/@numVectors count of /shape/sort_vectors/vector/ /shape/sort_vectors/vector/ /shape/sort_vectors/vector/@x float /shape/sort_vectors/vector@y float /shape/sort_vectors/vector@z float /shape/colours/ /shape/colours/@numColors count constant 0 /shape/matrices/ /shape/matrices/@numMatrices count of /shape/matrices/matrix/ /shape/matrices/matrix/ /shape/matrices/matrix/@Name string place after name and not within parenthesis /shape/matrices/matrix/@m11 float /shape/matrices/matrix/@m12 float /shape/matrices/matrix/@m13 float /shape/matrices/matrix/@m21 float /shape/matrices/matrix/@m22 float /shape/matrices/matrix/@m23 float /shape/matrices/matrix/@m31 float /shape/matrices/matrix/@m32 float /shape/matrices/matrix/@m33 float /shape/matrices/matrix/@m41 float /shape/matrices/matrix/@m42 float /shape/matrices/matrix/@m43 float m11, m12 and m13 are x-axis scaling m21, m22 and m23 are y-axis scaling m31, m32 and m33 are z-axis scaling m41 is x-axis translation m42 is y-axis translation m43 is z-axis translation /shape/images/ /shape/images/@numImages count of /shape/images/image/ /shape/images/image/ string, name of .ace file /shape/textures/ /shape/textures/@numTextures count of /shape/textures/texture/ /shape/textures/texture/ /shape/textures/texture/@imageIdx index of /shape/images/image/ /shape/textures/texture/@filterMode int /shape/textures/texture/@mipMapLODBias int /shape/textures/texture/@borderColour hex constant FF000000 /shape/light_materials/ /shape/light_materials/@numMaterials count constant 0 /shape/light_model_cfgs/ /shape/light_model_cfgs/@numCfgs count of /shape/light_model_cfgs/light_model_cfg/ /shape/light_model_cfgs/light_model_cfg/ /shape/light_model_cfgs/light_model_cfg/@flags hex constant 00000000 /shape/light_model_cfgs/light_model_cfg/uv_ops/ /shape/light_model_cfgs/light_model_cfg/uv_ops/@numUVOps count of /shape/light_model_cfgs/light_model_cfg/uv_op_copy/ /shape/light_model_cfgs/light_model_cfg/Uv_op_copy/ /shape/light_model_cfgs/light_model_cfg/uv_op_copy/@texAddrMode int constant 1 /shape/light_model_cfgs/light_model_cfg/uv_op_copy/@srcUVIdx int constant 0 /shape/vtx_states/ /shape/vtx_states/@numVtxStates count of /shape/vtx_states/vtx_state /shape/vtx_states/vtx_state/ /shape/vtx_states/vtx_state/@flags hex constant 00000000 /shape/vtx_states/vtx_state/@matrixIdx index of /shape/matrices/matrix/ /shape/vtx_states/vtx_state/@lightMatIdx negative, index of /material_palette/light_materials/light_material/ in file lightmat.pal /shape/vtx_states/vtx_state/@lightcfgIdx index of /shape/light_model_cfgs/light_model_cfg/ /shape/vtx_state/vtx_state/@lightFlags hex constant 00000002 /shape/lod_controls/ /shape/lod_controls/@numLODControls count of /shape/lod_controls/lod_control/ constant 1 /shape/lod_controls/lod_control/ /shape/lod_controls/lod_control/distance_levels_header/ /shape/lod_controls/lod_control/distance_levels_header/@dLvlBias int constant 0 /shape/lod_controls/lod_control/distance_levels/ /shape/lod_controls/lod_control/distance_levels/@numDLevs count of /shape/lod_controls/lod_controls/distance_levels/distance_level/ /shape/lod_controls/lod_control/distance_levels/distance_level/ /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/ /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/@dlevel_selection int /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/hierarchy/ /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/hierarchy/@numItems count of /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/hierarchy/item/ should match /shape/matrices/@numMatrices /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/hierarchy/item/ index of /shape/matrices/matrix/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/@numSubObjects count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@flags hex constant 00000400 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@sortVectorIdx index to /shape/sort_vectors/sort_vector/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@volIdx index to /shape/volumes/vol_sphere/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@srcVtxFmtFlags hex constant 000001D2 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@dstVtxFmtFlags hex constant 000001C4 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@faceNormals sum of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/@numNormalIdxs /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@txLightCommands count of /shape/vtx_states/vtx_state/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@nodeXTxLightCmds constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@trilistIdxs sum of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/@numBertexIdxs /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@lineListIdxs constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@nodeXTrilistsIdxs constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@Trilists count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_object/sub_object/primitives/indexed_trilist/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@lineLists constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@ptLists constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/@nodeXTrilists constant int 0 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_nodes/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_nodes/@numGeomNodes count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_heaer/geometry_info/geometry_nodes/geometry_node/ match value of /shape/matrices/@numMatrices /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/@txLightCmds int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/@nodeXTxLightCmds int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/@triLists int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/@lineLists int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/@ptLists int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/cullable_prims/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/cullable_prims/@numPrims int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/cullable_prims/@numFlatSections int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/cullable_prims/@numPrimIdxs int /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node_map/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node_map/@numEntries count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node_map/entry/ match value of /shape/matrices/@numMatrices /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node_map/entry index of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node/geometry_node/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_shaders/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_shaders/@numShaders count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_shaders/sharderIdx/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_shaders/shaderIdx/ index of /shape/shader_names/named_shader/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_light_cfgs/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/sub_object_light_cfgs/@numLightCfgs count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/subobject_light_cfgs/lightCfgIdx/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/subobject_light_cfgs/lightCfgIdx/ index of /shape/light_model_cfgs/light_model_cfg/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/@numVerts count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@flags hex constant 00000000 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@pointIdx index of /shape/points/point/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@normalIdx index of /shape/normals/normal/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@colour1 hex constant FFFFFFFF /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@colour2 hex constant FF000000 /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/vertex_uvs/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/vertex_uvs/@numSrcUVIdxs count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/vertex_uvs/uvIdx/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/vertex_uvs/uvIdx/ index of /shape/uv_points/uv_point/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/@numVtxSets count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/vertex_set/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/vertex_set/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/vertex_set/@vtxStateIdx index of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/vertex_set/@startVtxIdx index of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertex_sets/vertex_set/@vtxCount /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/@numPrims twice count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/prim_state_idx/ index of /shape/prim_states/prim_state/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/@numVertexIdx count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/vertexIdx/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/vertexIdx/ index of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/@numNormalIdxs count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/normalIdx/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/normalIdx/ index of /shape/normal/vector/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/flags/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/flags/@numFaceFlags count of /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/flags/faceFlag/ /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/flags/faceFlag/ hex constant 00000000 Referred listing /shape/volumes/vol_sphere referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@volIdx /shape/shader_names/named_shader referred from /shape/prim_states/prim_state/@shaderIdx /shape/texture_filter_names/named_filter_mode referred from /shape/textures/texture/@filterMode /shape/points/point referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/@pointIdx /shape/uv_points/uv_point referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/vertex_uvs/@uvIdx /shape/normals/vector referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex/ for point normals and from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/normal_idxs/@normalIdx1a for face normals /shape/sort_vectors/vector referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/@sortVectorIdx /shape/matrices/matrix referred from /shape/vtx_states/vtx_state/@matrixId and from /shape/lod_controls/lod_control/distance_levels/distance_level/distance_level_header/hierarchy/@item /shape/images/image referred from /shape/textures/texture/@imageIdx /shape/textures/texture referred from /shape/prim_states/prim_state/tex_idxs/@texIdxs /shape/light_model_cfgs/light_model_cfg referred from /shape/vtx_states/vtx_state/@lightCfgIdx /shape/vtx_states/vtx_state referred from /shape/prim_states/prim_state/@vertStateIdx /shape/prim_states/prim_state referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/@prim_state_idx /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_nodes/geometry_node referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/sub_object_header/geometry_info/geometry_node_map/@entry /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/vertices/vertex referred from /shape/lod_controls/lod_control/distance_levels/distance_level/sub_objects/sub_object/primitives/indexed_trilist/vertex_idxs/@vertexIdx