+ // copy structs to make them aligned in memory (otherwise we crash on Sparc and PowerPC and others)
+ if (header->num_vertexarrays)
+ {
+ va = (iqmvertexarray_t *)Mem_Alloc(loadmodel->mempool, header->num_vertexarrays * sizeof(iqmvertexarray_t));
+ memcpy(va, pbase + header->ofs_vertexarrays, header->num_vertexarrays * sizeof(iqmvertexarray_t));
+ }
+ if (header->version == 1)
+ {
+ if (loadmodel->num_bones)
+ {
+ joint1 = (iqmjoint1_t *)Mem_Alloc(loadmodel->mempool, loadmodel->num_bones * sizeof(iqmjoint1_t));
+ memcpy(joint1, pbase + header->ofs_joints, loadmodel->num_bones * sizeof(iqmjoint1_t));
+ }
+ if (header->num_poses)
+ {
+ pose1 = (iqmpose1_t *)Mem_Alloc(loadmodel->mempool, header->num_poses * sizeof(iqmpose1_t));
+ memcpy(pose1, pbase + header->ofs_poses, header->num_poses * sizeof(iqmpose1_t));
+ }
+ }
+ else
+ {
+ if (loadmodel->num_bones)
+ {
+ joint = (iqmjoint_t *)Mem_Alloc(loadmodel->mempool, loadmodel->num_bones * sizeof(iqmjoint_t));
+ memcpy(joint, pbase + header->ofs_joints, loadmodel->num_bones * sizeof(iqmjoint_t));
+ }
+ if (header->num_poses)
+ {
+ pose = (iqmpose_t *)Mem_Alloc(loadmodel->mempool, header->num_poses * sizeof(iqmpose_t));
+ memcpy(pose, pbase + header->ofs_poses, header->num_poses * sizeof(iqmpose_t));
+ }
+ }
+ if (header->num_anims)
+ {
+ anim = (iqmanim_t *)Mem_Alloc(loadmodel->mempool, header->num_anims * sizeof(iqmanim_t));
+ memcpy(anim, pbase + header->ofs_anims, header->num_anims * sizeof(iqmanim_t));
+ }
+ if (header->num_framechannels)
+ {
+ framedata = (unsigned short *)Mem_Alloc(loadmodel->mempool, sizeof(unsigned short) * header->num_framechannels);
+ memcpy(framedata, pbase + header->ofs_frames, sizeof(unsigned short) * header->num_framechannels);
+ }
+ if (header->ofs_bounds)
+ {
+ bounds = (iqmbounds_t *)Mem_Alloc(loadmodel->mempool, header->num_frames*sizeof(iqmbounds_t));
+ memcpy(bounds, pbase + header->ofs_bounds, header->num_frames*sizeof(iqmbounds_t));
+ }
+ if (header->num_triangles)
+ memcpy(loadmodel->surfmesh.data_element3i, pbase + header->ofs_triangles, sizeof(unsigned int[3]) * header->num_triangles);
+ if (header->ofs_neighbors && loadmodel->surfmesh.data_neighbor3i)
+ memcpy(loadmodel->surfmesh.data_neighbor3i, pbase + header->ofs_neighbors, sizeof(int[3]) * header->num_triangles);
+ if (header->num_meshes)
+ {
+ mesh = Mem_Alloc(loadmodel->mempool, header->num_meshes * sizeof(iqmmesh_t));
+ memcpy(mesh, pbase + header->ofs_meshes, header->num_meshes * sizeof(iqmmesh_t));
+ }
+