-/* -----------------------------------------------------------------------------\r
-\r
-PicoModel Library\r
-\r
-Copyright (c) 2002, Randy Reddig & seaw0lf\r
-All rights reserved.\r
-\r
-Redistribution and use in source and binary forms, with or without modification,\r
-are permitted provided that the following conditions are met:\r
-\r
-Redistributions of source code must retain the above copyright notice, this list\r
-of conditions and the following disclaimer.\r
-\r
-Redistributions in binary form must reproduce the above copyright notice, this\r
-list of conditions and the following disclaimer in the documentation and/or\r
-other materials provided with the distribution.\r
-\r
-Neither the names of the copyright holders nor the names of its contributors may\r
-be used to endorse or promote products derived from this software without\r
-specific prior written permission.\r
-\r
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-\r
------------------------------------------------------------------------------ */\r
-\r
-// This header file is based from the following:\r
-\r
-/*\r
- FlexModel.H - Header file for FlexModel file structure\r
-\r
- By Chris Burke\r
- serotonin@earthlink.net\r
-*/\r
-\r
-#ifndef __PM_FM_H__\r
-#define __PM_FM_H__\r
-\r
-#include "picointernal.h"\r
-\r
-\r
-//\r
-// Absolute limits (from QData / QMView source)\r
-//\r
-#define MAX_FM_TRIANGLES 2048\r
-#define MAX_FM_VERTS 2048\r
-#define MAX_FM_FRAMES 2048\r
-#define MAX_FM_SKINS 64\r
-#define MAX_FM_SKINNAME 64\r
-#define MAX_FM_MESH_NODES 16\r
-\r
-#define DTRIVERTX_V0 0\r
-#define DTRIVERTX_V1 1\r
-#define DTRIVERTX_V2 2\r
-#define DTRIVERTX_LNI 3\r
-#define DTRIVERTX_SIZE 4\r
-\r
-#define SKINPAGE_WIDTH 640\r
-#define SKINPAGE_HEIGHT 480\r
-\r
-#define ENCODED_WIDTH_X 92\r
-#define ENCODED_WIDTH_Y 475\r
-#define ENCODED_HEIGHT_X 128\r
-#define ENCODED_HEIGHT_Y 475\r
-\r
-#define SCALE_ADJUST_FACTOR 0.96\r
-\r
-#define INFO_HEIGHT 5\r
-#define INFO_Y (SKINPAGE_HEIGHT-INFO_HEIGHT)\r
-\r
-#ifndef byte\r
- #define byte unsigned char\r
-#endif\r
-\r
-\r
-//\r
-// Generic header on every chunk\r
-//\r
-#define FM_MAXCHUNKIDENT 32L\r
-typedef struct\r
-{\r
- char ident[FM_MAXCHUNKIDENT];\r
- unsigned int version;\r
- unsigned int size;\r
-} fm_chunk_header_t;\r
-\r
-//\r
-// The format of the "header" chunk\r
-//\r
-#define FM_HEADERCHUNKNAME "header"\r
-#define FM_HEADERCHUNKVER 2\r
-#define FM_HEADERCHUNKSIZE 40\r
-typedef struct\r
-{\r
- int skinWidth; // in pixels\r
- int skinHeight; // in pixels\r
- int frameSize; // size of each frame (in bytes)\r
- int numSkins; // number of skins\r
- int numXYZ; // number of unique vertices in 3D space\r
- int numST; // number of unique vertices in texture space\r
- int numTris; // number of unique triangles\r
- int numGLCmds; // # 32-bit elements in strip/fan command list\r
- int numFrames; // number of animation frames\r
- int numMeshNodes; // number of mesh nodes\r
-} fm_header_t;\r
-\r
-//\r
-// The format of an entry in the "skin" chunk.\r
-// The number of entries is given in the fmheader chunk\r
-//\r
-#define FM_SKINCHUNKNAME "skin"\r
-#define FM_SKINCHUNKVER 1\r
-#define FM_MAXPATHLENGTH 64L\r
-#define FM_SKINPATHSIZE (FM_MAXPATHLENGTH)\r
-typedef struct\r
-{\r
- char path[FM_SKINPATHSIZE]; // path, relative to 'base'\r
-} fm_skinpath_t;\r
-\r
-//\r
-// The format of the "st coord" chunk. This is a list\r
-// of unique skin texture (u, v) coordinates to be mapped\r
-// to verteces of the model\r
-//\r
-#define FM_STCOORDCHUNKNAME "st coord"\r
-#define FM_STCOORDCHUNKVER 1\r
-#define FM_STCOORDUVSIZE (2L + 2L)\r
-\r
-typedef struct\r
-{\r
- short s;\r
- short t;\r
-} fm_st_t;\r
-\r
-//\r
-// The format of the "tris" chunk. This is a list of vertex indeces\r
-// in 3D space, and the corresponding vertex indeces in texture space.\r
-//\r
-#define FM_TRISCHUNKNAME "tris"\r
-#define FM_TRISCHUNKVER 1\r
-#define FM_TRISINFOSIZE (2L*3 + 2L*3)\r
-\r
-typedef struct\r
-{\r
- short index_xyz[3];\r
- short index_st[3];\r
-} fm_xyz_st_t;\r
-\r
-\r
-//\r
-// The format of the "frames" chunk. This is a list of animation\r
-// frames, each specifying the coordinates and "light normal" index\r
-// of every vertex of the model in 3D space.\r
-//\r
-#define FM_FRAMESCHUNKNAME "frames"\r
-#define FM_FRAMESCHUNKVER 1\r
-\r
-#define FM_NUMVERTEXNORMALS 162\r
-\r
-// Frame info\r
-typedef struct\r
-{\r
- byte v[3]; // scaled by header info\r
- byte lightnormalindex; // index in canned table of closest vertex normal\r
-} fm_vert_normal_t;\r
-\r
-typedef struct\r
-{\r
- float scale[3]; // multiply byte verts by this\r
- float translate[3]; // then add this\r
- char name[16]; // frame name\r
-} fm_framehdr_t;\r
-\r
-typedef struct\r
-{\r
- fm_framehdr_t header; // One header per frame\r
- fm_vert_normal_t verts[1]; // variable number of these\r
-} fm_frame_t;\r
-\r
-typedef struct\r
-{\r
- fm_chunk_header_t *fm_header_hdr;\r
- fm_header_t *fm_header;\r
- fm_chunk_header_t *fm_skin_hdr;\r
- fm_skinpath_t *fm_skin;\r
- fm_chunk_header_t *fm_st_hdr;\r
- fm_st_t *fm_st;\r
- fm_chunk_header_t *fm_tri_hdr;\r
- fm_xyz_st_t *fm_tri;\r
- fm_chunk_header_t *fm_frame_hdr;\r
- fm_frame_t *fm_frame;\r
-} fm_t;\r
-\r
-float fm_normals[FM_NUMVERTEXNORMALS][3] = {\r
- {-0.525731f, 0.000000f, 0.850651f},\r
- {-0.442863f, 0.238856f, 0.864188f},\r
- {-0.295242f, 0.000000f, 0.955423f},\r
- {-0.309017f, 0.500000f, 0.809017f},\r
- {-0.162460f, 0.262866f, 0.951056f},\r
- {0.000000f, 0.000000f, 1.000000f},\r
- {0.000000f, 0.850651f, 0.525731f},\r
- {-0.147621f, 0.716567f, 0.681718f},\r
- {0.147621f, 0.716567f, 0.681718f},\r
- {0.000000f, 0.525731f, 0.850651f},\r
- {0.309017f, 0.500000f, 0.809017f},\r
- {0.525731f, 0.000000f, 0.850651f},\r
- {0.295242f, 0.000000f, 0.955423f},\r
- {0.442863f, 0.238856f, 0.864188f},\r
- {0.162460f, 0.262866f, 0.951056f},\r
- {-0.681718f, 0.147621f, 0.716567f},\r
- {-0.809017f, 0.309017f, 0.500000f},\r
- {-0.587785f, 0.425325f, 0.688191f},\r
- {-0.850651f, 0.525731f, 0.000000f},\r
- {-0.864188f, 0.442863f, 0.238856f},\r
- {-0.716567f, 0.681718f, 0.147621f},\r
- {-0.688191f, 0.587785f, 0.425325f},\r
- {-0.500000f, 0.809017f, 0.309017f},\r
- {-0.238856f, 0.864188f, 0.442863f},\r
- {-0.425325f, 0.688191f, 0.587785f},\r
- {-0.716567f, 0.681718f, -0.147621f},\r
- {-0.500000f, 0.809017f, -0.309017f},\r
- {-0.525731f, 0.850651f, 0.000000f},\r
- {0.000000f, 0.850651f, -0.525731f},\r
- {-0.238856f, 0.864188f, -0.442863f},\r
- {0.000000f, 0.955423f, -0.295242f},\r
- {-0.262866f, 0.951056f, -0.162460f},\r
- {0.000000f, 1.000000f, 0.000000f}, \r
- {0.000000f, 0.955423f, 0.295242f},\r
- {-0.262866f, 0.951056f, 0.162460f},\r
- {0.238856f, 0.864188f, 0.442863f},\r
- {0.262866f, 0.951056f, 0.162460f}, \r
- {0.500000f, 0.809017f, 0.309017f},\r
- {0.238856f, 0.864188f, -0.442863f},\r
- {0.262866f, 0.951056f, -0.162460f},\r
- {0.500000f, 0.809017f, -0.309017f},\r
- {0.850651f, 0.525731f, 0.000000f},\r
- {0.716567f, 0.681718f, 0.147621f},\r
- {0.716567f, 0.681718f, -0.147621f},\r
- {0.525731f, 0.850651f, 0.000000f}, \r
- {0.425325f, 0.688191f, 0.587785f},\r
- {0.864188f, 0.442863f, 0.238856f}, \r
- {0.688191f, 0.587785f, 0.425325f},\r
- {0.809017f, 0.309017f, 0.500000f}, \r
- {0.681718f, 0.147621f, 0.716567f},\r
- {0.587785f, 0.425325f, 0.688191f}, \r
- {0.955423f, 0.295242f, 0.000000f},\r
- {1.000000f, 0.000000f, 0.000000f}, \r
- {0.951056f, 0.162460f, 0.262866f},\r
- {0.850651f, -0.525731f, 0.000000f}, \r
- {0.955423f, -0.295242f, 0.000000f},\r
- {0.864188f, -0.442863f, 0.238856f}, \r
- {0.951056f, -0.162460f, 0.262866f},\r
- {0.809017f, -0.309017f, 0.500000f}, \r
- {0.681718f, -0.147621f, 0.716567f},\r
- {0.850651f, 0.000000f, 0.525731f},\r
- {0.864188f, 0.442863f, -0.238856f}, \r
- {0.809017f, 0.309017f, -0.500000f},\r
- {0.951056f, 0.162460f, -0.262866f}, \r
- {0.525731f, 0.000000f, -0.850651f},\r
- {0.681718f, 0.147621f, -0.716567f},\r
- {0.681718f, -0.147621f, -0.716567f}, \r
- {0.850651f, 0.000000f, -0.525731f},\r
- {0.809017f, -0.309017f, -0.500000f}, \r
- {0.864188f, -0.442863f, -0.238856f},\r
- {0.951056f, -0.162460f, -0.262866f}, \r
- {0.147621f, 0.716567f, -0.681718f},\r
- {0.309017f, 0.500000f, -0.809017f}, \r
- {0.425325f, 0.688191f, -0.587785f},\r
- {0.442863f, 0.238856f, -0.864188f}, \r
- {0.587785f, 0.425325f, -0.688191f},\r
- {0.688191f, 0.587785f, -0.425325f}, \r
- {-0.147621f, 0.716567f, -0.681718f},\r
- {-0.309017f, 0.500000f, -0.809017f}, \r
- {0.000000f, 0.525731f, -0.850651f},\r
- {-0.525731f, 0.000000f, -0.850651f}, \r
- {-0.442863f, 0.238856f, -0.864188f},\r
- {-0.295242f, 0.000000f, -0.955423f}, \r
- {-0.162460f, 0.262866f, -0.951056f},\r
- {0.000000f, 0.000000f, -1.000000f}, \r
- {0.295242f, 0.000000f, -0.955423f},\r
- {0.162460f, 0.262866f, -0.951056f}, \r
- {-0.442863f, -0.238856f, -0.864188f},\r
- {-0.309017f, -0.500000f, -0.809017f}, \r
- {-0.162460f, -0.262866f, -0.951056f},\r
- {0.000000f, -0.850651f, -0.525731f}, \r
- {-0.147621f, -0.716567f, -0.681718f},\r
- {0.147621f, -0.716567f, -0.681718f}, \r
- {0.000000f, -0.525731f, -0.850651f},\r
- {0.309017f, -0.500000f, -0.809017f}, \r
- {0.442863f, -0.238856f, -0.864188f},\r
- {0.162460f, -0.262866f, -0.951056f}, \r
- {0.238856f, -0.864188f, -0.442863f},\r
- {0.500000f, -0.809017f, -0.309017f}, \r
- {0.425325f, -0.688191f, -0.587785f},\r
- {0.716567f, -0.681718f, -0.147621f}, \r
- {0.688191f, -0.587785f, -0.425325f},\r
- {0.587785f, -0.425325f, -0.688191f}, \r
- {0.000000f, -0.955423f, -0.295242f},\r
- {0.000000f, -1.000000f, 0.000000f}, \r
- {0.262866f, -0.951056f, -0.162460f},\r
- {0.000000f, -0.850651f, 0.525731f}, \r
- {0.000000f, -0.955423f, 0.295242f},\r
- {0.238856f, -0.864188f, 0.442863f}, \r
- {0.262866f, -0.951056f, 0.162460f},\r
- {0.500000f, -0.809017f, 0.309017f}, \r
- {0.716567f, -0.681718f, 0.147621f},\r
- {0.525731f, -0.850651f, 0.000000f}, \r
- {-0.238856f, -0.864188f, -0.442863f},\r
- {-0.500000f, -0.809017f, -0.309017f}, \r
- {-0.262866f, -0.951056f, -0.162460f},\r
- {-0.850651f, -0.525731f, 0.000000f}, \r
- {-0.716567f, -0.681718f, -0.147621f},\r
- {-0.716567f, -0.681718f, 0.147621f}, \r
- {-0.525731f, -0.850651f, 0.000000f},\r
- {-0.500000f, -0.809017f, 0.309017f}, \r
- {-0.238856f, -0.864188f, 0.442863f},\r
- {-0.262866f, -0.951056f, 0.162460f}, \r
- {-0.864188f, -0.442863f, 0.238856f},\r
- {-0.809017f, -0.309017f, 0.500000f}, \r
- {-0.688191f, -0.587785f, 0.425325f},\r
- {-0.681718f, -0.147621f, 0.716567f}, \r
- {-0.442863f, -0.238856f, 0.864188f},\r
- {-0.587785f, -0.425325f, 0.688191f}, \r
- {-0.309017f, -0.500000f, 0.809017f},\r
- {-0.147621f, -0.716567f, 0.681718f}, \r
- {-0.425325f, -0.688191f, 0.587785f},\r
- {-0.162460f, -0.262866f, 0.951056f}, \r
- {0.442863f, -0.238856f, 0.864188f},\r
- {0.162460f, -0.262866f, 0.951056f}, \r
- {0.309017f, -0.500000f, 0.809017f},\r
- {0.147621f, -0.716567f, 0.681718f}, \r
- {0.000000f, -0.525731f, 0.850651f},\r
- {0.425325f, -0.688191f, 0.587785f}, \r
- {0.587785f, -0.425325f, 0.688191f},\r
- {0.688191f, -0.587785f, 0.425325f}, \r
- {-0.955423f, 0.295242f, 0.000000f},\r
- {-0.951056f, 0.162460f, 0.262866f}, \r
- {-1.000000f, 0.000000f, 0.000000f},\r
- {-0.850651f, 0.000000f, 0.525731f}, \r
- {-0.955423f, -0.295242f, 0.000000f},\r
- {-0.951056f, -0.162460f, 0.262866f}, \r
- {-0.864188f, 0.442863f, -0.238856f},\r
- {-0.951056f, 0.162460f, -0.262866f}, \r
- {-0.809017f, 0.309017f, -0.500000f},\r
- {-0.864188f, -0.442863f, -0.238856f},\r
- {-0.951056f, -0.162460f, -0.262866f},\r
- {-0.809017f, -0.309017f, -0.500000f}, \r
- {-0.681718f, 0.147621f, -0.716567f},\r
- {-0.681718f, -0.147621f, -0.716567f}, \r
- {-0.850651f, 0.000000f, -0.525731f},\r
- {-0.688191f, 0.587785f, -0.425325f}, \r
- {-0.587785f, 0.425325f, -0.688191f},\r
- {-0.425325f, 0.688191f, -0.587785f}, \r
- {-0.425325f, -0.688191f, -0.587785f},\r
- {-0.587785f, -0.425325f, -0.688191f}, \r
- {-0.688191f, -0.587785f, -0.425325f},\r
-};\r
-\r
-#endif\r
+/* -----------------------------------------------------------------------------
+
+ PicoModel Library
+
+ Copyright (c) 2002, Randy Reddig & seaw0lf
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this list
+ of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ Neither the names of the copyright holders nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ ----------------------------------------------------------------------------- */
+
+// This header file is based from the following:
+
+/*
+ FlexModel.H - Header file for FlexModel file structure
+
+ By Chris Burke
+ serotonin@earthlink.net
+ */
+
+#ifndef __PM_FM_H__
+#define __PM_FM_H__
+
+#include "picointernal.h"
+
+
+//
+// Absolute limits (from QData / QMView source)
+//
+#define MAX_FM_TRIANGLES 2048
+#define MAX_FM_VERTS 2048
+#define MAX_FM_FRAMES 2048
+#define MAX_FM_SKINS 64
+#define MAX_FM_SKINNAME 64
+#define MAX_FM_MESH_NODES 16
+
+#define DTRIVERTX_V0 0
+#define DTRIVERTX_V1 1
+#define DTRIVERTX_V2 2
+#define DTRIVERTX_LNI 3
+#define DTRIVERTX_SIZE 4
+
+#define SKINPAGE_WIDTH 640
+#define SKINPAGE_HEIGHT 480
+
+#define ENCODED_WIDTH_X 92
+#define ENCODED_WIDTH_Y 475
+#define ENCODED_HEIGHT_X 128
+#define ENCODED_HEIGHT_Y 475
+
+#define SCALE_ADJUST_FACTOR 0.96
+
+#define INFO_HEIGHT 5
+#define INFO_Y ( SKINPAGE_HEIGHT - INFO_HEIGHT )
+
+
+//
+// Generic header on every chunk
+//
+#define FM_MAXCHUNKIDENT 32L
+typedef struct
+{
+ char ident[FM_MAXCHUNKIDENT];
+ unsigned int version;
+ unsigned int size;
+} fm_chunk_header_t;
+
+//
+// The format of the "header" chunk
+//
+#define FM_HEADERCHUNKNAME "header"
+#define FM_HEADERCHUNKVER 2
+#define FM_HEADERCHUNKSIZE 40
+typedef struct
+{
+ int skinWidth; // in pixels
+ int skinHeight; // in pixels
+ int frameSize; // size of each frame (in bytes)
+ int numSkins; // number of skins
+ int numXYZ; // number of unique vertices in 3D space
+ int numST; // number of unique vertices in texture space
+ int numTris; // number of unique triangles
+ int numGLCmds; // # 32-bit elements in strip/fan command list
+ int numFrames; // number of animation frames
+ int numMeshNodes; // number of mesh nodes
+} fm_header_t;
+
+//
+// The format of an entry in the "skin" chunk.
+// The number of entries is given in the fmheader chunk
+//
+#define FM_SKINCHUNKNAME "skin"
+#define FM_SKINCHUNKVER 1
+#define FM_MAXPATHLENGTH 64L
+#define FM_SKINPATHSIZE ( FM_MAXPATHLENGTH )
+typedef struct
+{
+ char path[FM_SKINPATHSIZE]; // path, relative to 'base'
+} fm_skinpath_t;
+
+//
+// The format of the "st coord" chunk. This is a list
+// of unique skin texture (u, v) coordinates to be mapped
+// to verteces of the model
+//
+#define FM_STCOORDCHUNKNAME "st coord"
+#define FM_STCOORDCHUNKVER 1
+#define FM_STCOORDUVSIZE ( 2L + 2L )
+
+typedef struct
+{
+ short s;
+ short t;
+} fm_st_t;
+
+//
+// The format of the "tris" chunk. This is a list of vertex indeces
+// in 3D space, and the corresponding vertex indeces in texture space.
+//
+#define FM_TRISCHUNKNAME "tris"
+#define FM_TRISCHUNKVER 1
+#define FM_TRISINFOSIZE ( 2L * 3 + 2L * 3 )
+
+typedef struct
+{
+ short index_xyz[3];
+ short index_st[3];
+} fm_xyz_st_t;
+
+
+//
+// The format of the "frames" chunk. This is a list of animation
+// frames, each specifying the coordinates and "light normal" index
+// of every vertex of the model in 3D space.
+//
+#define FM_FRAMESCHUNKNAME "frames"
+#define FM_FRAMESCHUNKVER 1
+
+#define FM_NUMVERTEXNORMALS 162
+
+// Frame info
+typedef struct
+{
+ byte v[3]; // scaled by header info
+ byte lightnormalindex; // index in canned table of closest vertex normal
+} fm_vert_normal_t;
+
+typedef struct
+{
+ float scale[3]; // multiply byte verts by this
+ float translate[3]; // then add this
+ char name[16]; // frame name
+} fm_framehdr_t;
+
+typedef struct
+{
+ fm_framehdr_t header; // One header per frame
+ fm_vert_normal_t verts[1]; // variable number of these
+} fm_frame_t;
+
+typedef struct
+{
+ fm_chunk_header_t *fm_header_hdr;
+ fm_header_t *fm_header;
+ fm_chunk_header_t *fm_skin_hdr;
+ fm_skinpath_t *fm_skin;
+ fm_chunk_header_t *fm_st_hdr;
+ fm_st_t *fm_st;
+ fm_chunk_header_t *fm_tri_hdr;
+ fm_xyz_st_t *fm_tri;
+ fm_chunk_header_t *fm_frame_hdr;
+ fm_frame_t *fm_frame;
+} fm_t;
+
+float fm_normals[FM_NUMVERTEXNORMALS][3] = {
+ {-0.525731f, 0.000000f, 0.850651f},
+ {-0.442863f, 0.238856f, 0.864188f},
+ {-0.295242f, 0.000000f, 0.955423f},
+ {-0.309017f, 0.500000f, 0.809017f},
+ {-0.162460f, 0.262866f, 0.951056f},
+ {0.000000f, 0.000000f, 1.000000f},
+ {0.000000f, 0.850651f, 0.525731f},
+ {-0.147621f, 0.716567f, 0.681718f},
+ {0.147621f, 0.716567f, 0.681718f},
+ {0.000000f, 0.525731f, 0.850651f},
+ {0.309017f, 0.500000f, 0.809017f},
+ {0.525731f, 0.000000f, 0.850651f},
+ {0.295242f, 0.000000f, 0.955423f},
+ {0.442863f, 0.238856f, 0.864188f},
+ {0.162460f, 0.262866f, 0.951056f},
+ {-0.681718f, 0.147621f, 0.716567f},
+ {-0.809017f, 0.309017f, 0.500000f},
+ {-0.587785f, 0.425325f, 0.688191f},
+ {-0.850651f, 0.525731f, 0.000000f},
+ {-0.864188f, 0.442863f, 0.238856f},
+ {-0.716567f, 0.681718f, 0.147621f},
+ {-0.688191f, 0.587785f, 0.425325f},
+ {-0.500000f, 0.809017f, 0.309017f},
+ {-0.238856f, 0.864188f, 0.442863f},
+ {-0.425325f, 0.688191f, 0.587785f},
+ {-0.716567f, 0.681718f, -0.147621f},
+ {-0.500000f, 0.809017f, -0.309017f},
+ {-0.525731f, 0.850651f, 0.000000f},
+ {0.000000f, 0.850651f, -0.525731f},
+ {-0.238856f, 0.864188f, -0.442863f},
+ {0.000000f, 0.955423f, -0.295242f},
+ {-0.262866f, 0.951056f, -0.162460f},
+ {0.000000f, 1.000000f, 0.000000f},
+ {0.000000f, 0.955423f, 0.295242f},
+ {-0.262866f, 0.951056f, 0.162460f},
+ {0.238856f, 0.864188f, 0.442863f},
+ {0.262866f, 0.951056f, 0.162460f},
+ {0.500000f, 0.809017f, 0.309017f},
+ {0.238856f, 0.864188f, -0.442863f},
+ {0.262866f, 0.951056f, -0.162460f},
+ {0.500000f, 0.809017f, -0.309017f},
+ {0.850651f, 0.525731f, 0.000000f},
+ {0.716567f, 0.681718f, 0.147621f},
+ {0.716567f, 0.681718f, -0.147621f},
+ {0.525731f, 0.850651f, 0.000000f},
+ {0.425325f, 0.688191f, 0.587785f},
+ {0.864188f, 0.442863f, 0.238856f},
+ {0.688191f, 0.587785f, 0.425325f},
+ {0.809017f, 0.309017f, 0.500000f},
+ {0.681718f, 0.147621f, 0.716567f},
+ {0.587785f, 0.425325f, 0.688191f},
+ {0.955423f, 0.295242f, 0.000000f},
+ {1.000000f, 0.000000f, 0.000000f},
+ {0.951056f, 0.162460f, 0.262866f},
+ {0.850651f, -0.525731f, 0.000000f},
+ {0.955423f, -0.295242f, 0.000000f},
+ {0.864188f, -0.442863f, 0.238856f},
+ {0.951056f, -0.162460f, 0.262866f},
+ {0.809017f, -0.309017f, 0.500000f},
+ {0.681718f, -0.147621f, 0.716567f},
+ {0.850651f, 0.000000f, 0.525731f},
+ {0.864188f, 0.442863f, -0.238856f},
+ {0.809017f, 0.309017f, -0.500000f},
+ {0.951056f, 0.162460f, -0.262866f},
+ {0.525731f, 0.000000f, -0.850651f},
+ {0.681718f, 0.147621f, -0.716567f},
+ {0.681718f, -0.147621f, -0.716567f},
+ {0.850651f, 0.000000f, -0.525731f},
+ {0.809017f, -0.309017f, -0.500000f},
+ {0.864188f, -0.442863f, -0.238856f},
+ {0.951056f, -0.162460f, -0.262866f},
+ {0.147621f, 0.716567f, -0.681718f},
+ {0.309017f, 0.500000f, -0.809017f},
+ {0.425325f, 0.688191f, -0.587785f},
+ {0.442863f, 0.238856f, -0.864188f},
+ {0.587785f, 0.425325f, -0.688191f},
+ {0.688191f, 0.587785f, -0.425325f},
+ {-0.147621f, 0.716567f, -0.681718f},
+ {-0.309017f, 0.500000f, -0.809017f},
+ {0.000000f, 0.525731f, -0.850651f},
+ {-0.525731f, 0.000000f, -0.850651f},
+ {-0.442863f, 0.238856f, -0.864188f},
+ {-0.295242f, 0.000000f, -0.955423f},
+ {-0.162460f, 0.262866f, -0.951056f},
+ {0.000000f, 0.000000f, -1.000000f},
+ {0.295242f, 0.000000f, -0.955423f},
+ {0.162460f, 0.262866f, -0.951056f},
+ {-0.442863f, -0.238856f, -0.864188f},
+ {-0.309017f, -0.500000f, -0.809017f},
+ {-0.162460f, -0.262866f, -0.951056f},
+ {0.000000f, -0.850651f, -0.525731f},
+ {-0.147621f, -0.716567f, -0.681718f},
+ {0.147621f, -0.716567f, -0.681718f},
+ {0.000000f, -0.525731f, -0.850651f},
+ {0.309017f, -0.500000f, -0.809017f},
+ {0.442863f, -0.238856f, -0.864188f},
+ {0.162460f, -0.262866f, -0.951056f},
+ {0.238856f, -0.864188f, -0.442863f},
+ {0.500000f, -0.809017f, -0.309017f},
+ {0.425325f, -0.688191f, -0.587785f},
+ {0.716567f, -0.681718f, -0.147621f},
+ {0.688191f, -0.587785f, -0.425325f},
+ {0.587785f, -0.425325f, -0.688191f},
+ {0.000000f, -0.955423f, -0.295242f},
+ {0.000000f, -1.000000f, 0.000000f},
+ {0.262866f, -0.951056f, -0.162460f},
+ {0.000000f, -0.850651f, 0.525731f},
+ {0.000000f, -0.955423f, 0.295242f},
+ {0.238856f, -0.864188f, 0.442863f},
+ {0.262866f, -0.951056f, 0.162460f},
+ {0.500000f, -0.809017f, 0.309017f},
+ {0.716567f, -0.681718f, 0.147621f},
+ {0.525731f, -0.850651f, 0.000000f},
+ {-0.238856f, -0.864188f, -0.442863f},
+ {-0.500000f, -0.809017f, -0.309017f},
+ {-0.262866f, -0.951056f, -0.162460f},
+ {-0.850651f, -0.525731f, 0.000000f},
+ {-0.716567f, -0.681718f, -0.147621f},
+ {-0.716567f, -0.681718f, 0.147621f},
+ {-0.525731f, -0.850651f, 0.000000f},
+ {-0.500000f, -0.809017f, 0.309017f},
+ {-0.238856f, -0.864188f, 0.442863f},
+ {-0.262866f, -0.951056f, 0.162460f},
+ {-0.864188f, -0.442863f, 0.238856f},
+ {-0.809017f, -0.309017f, 0.500000f},
+ {-0.688191f, -0.587785f, 0.425325f},
+ {-0.681718f, -0.147621f, 0.716567f},
+ {-0.442863f, -0.238856f, 0.864188f},
+ {-0.587785f, -0.425325f, 0.688191f},
+ {-0.309017f, -0.500000f, 0.809017f},
+ {-0.147621f, -0.716567f, 0.681718f},
+ {-0.425325f, -0.688191f, 0.587785f},
+ {-0.162460f, -0.262866f, 0.951056f},
+ {0.442863f, -0.238856f, 0.864188f},
+ {0.162460f, -0.262866f, 0.951056f},
+ {0.309017f, -0.500000f, 0.809017f},
+ {0.147621f, -0.716567f, 0.681718f},
+ {0.000000f, -0.525731f, 0.850651f},
+ {0.425325f, -0.688191f, 0.587785f},
+ {0.587785f, -0.425325f, 0.688191f},
+ {0.688191f, -0.587785f, 0.425325f},
+ {-0.955423f, 0.295242f, 0.000000f},
+ {-0.951056f, 0.162460f, 0.262866f},
+ {-1.000000f, 0.000000f, 0.000000f},
+ {-0.850651f, 0.000000f, 0.525731f},
+ {-0.955423f, -0.295242f, 0.000000f},
+ {-0.951056f, -0.162460f, 0.262866f},
+ {-0.864188f, 0.442863f, -0.238856f},
+ {-0.951056f, 0.162460f, -0.262866f},
+ {-0.809017f, 0.309017f, -0.500000f},
+ {-0.864188f, -0.442863f, -0.238856f},
+ {-0.951056f, -0.162460f, -0.262866f},
+ {-0.809017f, -0.309017f, -0.500000f},
+ {-0.681718f, 0.147621f, -0.716567f},
+ {-0.681718f, -0.147621f, -0.716567f},
+ {-0.850651f, 0.000000f, -0.525731f},
+ {-0.688191f, 0.587785f, -0.425325f},
+ {-0.587785f, 0.425325f, -0.688191f},
+ {-0.425325f, 0.688191f, -0.587785f},
+ {-0.425325f, -0.688191f, -0.587785f},
+ {-0.587785f, -0.425325f, -0.688191f},
+ {-0.688191f, -0.587785f, -0.425325f},
+};
+
+#endif