-// zymlump_t lump_poses; // float pose[numposes][numbones][3][4]; // animation data
- zymswapintblock((void *) (pheader->lump_poses.start + pbase), pheader->lump_poses.length);
-
-// zymlump_t lump_bones; // zymbone_t bone[numbones];
- bone = (void *) (pheader->lump_bones.start + pbase);
- for (i = 0;i < pheader->numbones;i++)
- {
- SWAPLONG(bone[i].flags);
- SWAPLONG(bone[i].parent);
- if (bone[i].parent >= i)
- Host_Error("Mod_LoadZymoticModel: bone[i].parent >= i in %s\n", loadmodel->name);
- }
-
-// zymlump_t lump_vertbonecounts; // int vertbonecounts[numvertices]; // how many bones influence each vertex (separate mainly to make this compress better)
- zymswapintblock((void *) (pheader->lump_vertbonecounts.start + pbase), pheader->lump_vertbonecounts.length);
- bonecount = (void *) (pheader->lump_vertbonecounts.start + pbase);
- for (i = 0;i < pheader->numbones;i++)
- if (bonecount[i] < 1)
- Host_Error("Mod_LoadZymoticModel: bone vertex count < 1 in %s\n", loadmodel->name);
-
-// zymlump_t lump_verts; // zymvertex_t vert[numvertices]; // see vertex struct
- zymswapintblock((void *) (pheader->lump_verts.start + pbase), pheader->lump_verts.length);
-
-// zymlump_t lump_texcoords; // float texcoords[numvertices][2];
- zymswapintblock((void *) (pheader->lump_texcoords.start + pbase), pheader->lump_texcoords.length);
-
-// zymlump_t lump_render; // int renderlist[rendersize]; // sorted by shader with run lengths (int count), shaders are sequentially used, each run can be used with glDrawElements (each triangle is 3 int indices)
- zymswapintblock((void *) (pheader->lump_render.start + pbase), pheader->lump_render.length);
- // validate renderlist and swap winding order of tris
- renderlist = (void *) (pheader->lump_render.start + pbase);
- renderlistend = (void *) ((qbyte *) renderlist + pheader->lump_render.length);
- i = pheader->numshaders * sizeof(int) + pheader->numtris * sizeof(int[3]);
- if (pheader->lump_render.length != i)
- Host_Error("Mod_LoadZymoticModel: renderlist is wrong size in %s (is %i bytes, should be %i bytes)\n", loadmodel->name, pheader->lump_render.length, i);
- for (i = 0;i < pheader->numshaders;i++)
- {
- if (renderlist >= renderlistend)
- Host_Error("Mod_LoadZymoticModel: corrupt renderlist in %s (wrong size)\n", loadmodel->name);
- count = *renderlist++;
- if (renderlist + count * 3 > renderlistend)
- Host_Error("Mod_LoadZymoticModel: corrupt renderlist in %s (wrong size)\n", loadmodel->name);
- while (count--)
+ {
+ int i;
+ float *poses;
+ // zymlump_t lump_poses; // float pose[numposes][numbones][3][4]; // animation data
+ loadmodel->zymdata_poses = Mem_Alloc(loadmodel->mempool, pheader->lump_poses.length);
+ poses = (void *) (pheader->lump_poses.start + pbase);
+ for (i = 0;i < pheader->lump_poses.length / 4;i++)
+ loadmodel->zymdata_poses[i] = BigFloat(poses[i]);
+ }
+
+ {
+ int i;
+ zymbone_t *bone;
+ // zymlump_t lump_bones; // zymbone_t bone[numbones];
+ loadmodel->zymdata_bones = Mem_Alloc(loadmodel->mempool, pheader->numbones * sizeof(zymbone_t));
+ bone = (void *) (pheader->lump_bones.start + pbase);
+ for (i = 0;i < pheader->numbones;i++)