- mod->name, version, MD2ALIAS_VERSION);
-
- mod->type = mod_alias;
- mod->aliastype = ALIASTYPE_MD2;
-
- framesize = sizeof(md2framesize_t) + LittleLong(pinmodel->num_xyz) * sizeof(trivertx_t);
- // LordHavoc: calculate size for in memory version
- size = sizeof(md2mem_t)
- + LittleLong(pinmodel->num_st) * sizeof(md2stvert_t)
- + LittleLong(pinmodel->num_tris) * sizeof(md2triangle_t)
- + LittleLong(pinmodel->num_frames) * framesize
- + LittleLong(pinmodel->num_glcmds) * sizeof(int);
- if (size <= 0 || size >= MD2MAX_SIZE)
- Host_Error ("%s is not a valid model", mod->name);
- pheader = Hunk_AllocName (size, va("%s Quake2 model", loadname));
-
- mod->flags = 0; // there are no MD2 flags
- mod->numframes = LittleLong(pinmodel->num_frames);
- mod->synctype = ST_RAND;
- mod->numtris = LittleLong(pinmodel->num_tris); // LordHavoc: to simplify renderer decisions
-
- if (LittleLong(pinmodel->num_skins) >= 1 && (LittleLong(pinmodel->ofs_skins <= 0) || LittleLong(pinmodel->ofs_skins) >= LittleLong(pinmodel->ofs_end)))
- Host_Error ("%s is not a valid model", mod->name);
- if (LittleLong(pinmodel->ofs_st <= 0) || LittleLong(pinmodel->ofs_st) >= LittleLong(pinmodel->ofs_end))
- Host_Error ("%s is not a valid model", mod->name);
- if (LittleLong(pinmodel->ofs_tris <= 0) || LittleLong(pinmodel->ofs_tris) >= LittleLong(pinmodel->ofs_end))
- Host_Error ("%s is not a valid model", mod->name);
- if (LittleLong(pinmodel->ofs_frames <= 0) || LittleLong(pinmodel->ofs_frames) >= LittleLong(pinmodel->ofs_end))
- Host_Error ("%s is not a valid model", mod->name);
- if (LittleLong(pinmodel->ofs_glcmds <= 0) || LittleLong(pinmodel->ofs_glcmds) >= LittleLong(pinmodel->ofs_end))
- Host_Error ("%s is not a valid model", mod->name);
-
- if (LittleLong(pinmodel->num_tris < 1) || LittleLong(pinmodel->num_tris) > MD2MAX_TRIANGLES)
- Host_Error ("%s has invalid number of triangles: %i", mod->name, LittleLong(pinmodel->num_tris));
- if (LittleLong(pinmodel->num_xyz < 1) || LittleLong(pinmodel->num_xyz) > MD2MAX_VERTS)
- Host_Error ("%s has invalid number of vertices: %i", mod->name, LittleLong(pinmodel->num_xyz));
- if (LittleLong(pinmodel->num_frames < 1) || LittleLong(pinmodel->num_frames) > MD2MAX_FRAMES)
- Host_Error ("%s has invalid number of frames: %i", mod->name, LittleLong(pinmodel->num_frames));
- if (LittleLong(pinmodel->num_skins < 0) || LittleLong(pinmodel->num_skins) > MAX_SKINS)
- Host_Error ("%s has invalid number of skins: %i", mod->name, LittleLong(pinmodel->num_skins));
-
- pheader->framesize = framesize;
- pheader->num_skins = LittleLong(pinmodel->num_skins);
- pheader->num_xyz = LittleLong(pinmodel->num_xyz);
- pheader->num_st = LittleLong(pinmodel->num_st);
- pheader->num_tris = LittleLong(pinmodel->num_tris);
- pheader->num_frames = LittleLong(pinmodel->num_frames);
- pheader->num_glcmds = LittleLong(pinmodel->num_glcmds);
-
-// load the skins
- if (pheader->num_skins)
+ loadmodel->name, version, MD2ALIAS_VERSION);
+
+ loadmodel->type = mod_alias;
+ loadmodel->alias.aliastype = ALIASTYPE_ALIAS;
+ loadmodel->DrawSky = NULL;
+ loadmodel->Draw = R_Model_Alias_Draw;
+ loadmodel->DrawFakeShadow = R_Model_Alias_DrawFakeShadow;
+ loadmodel->DrawShadowVolume = R_Model_Alias_DrawShadowVolume;
+ loadmodel->DrawLight = R_Model_Alias_DrawLight;
+
+ if (LittleLong(pinmodel->num_tris < 1) || LittleLong(pinmodel->num_tris) > (65536 / 3))
+ Host_Error ("%s has invalid number of triangles: %i", loadmodel->name, LittleLong(pinmodel->num_tris));
+ if (LittleLong(pinmodel->num_xyz < 1) || LittleLong(pinmodel->num_xyz) > 65536)
+ Host_Error ("%s has invalid number of vertices: %i", loadmodel->name, LittleLong(pinmodel->num_xyz));
+ if (LittleLong(pinmodel->num_frames < 1) || LittleLong(pinmodel->num_frames) > 65536)
+ Host_Error ("%s has invalid number of frames: %i", loadmodel->name, LittleLong(pinmodel->num_frames));
+ if (LittleLong(pinmodel->num_skins < 0) || LittleLong(pinmodel->num_skins) > 256)
+ Host_Error ("%s has invalid number of skins: %i", loadmodel->name, LittleLong(pinmodel->num_skins));
+
+ end = LittleLong(pinmodel->ofs_end);
+ if (LittleLong(pinmodel->num_skins) >= 1 && (LittleLong(pinmodel->ofs_skins <= 0) || LittleLong(pinmodel->ofs_skins) >= end))
+ Host_Error ("%s is not a valid model", loadmodel->name);
+ if (LittleLong(pinmodel->ofs_st <= 0) || LittleLong(pinmodel->ofs_st) >= end)
+ Host_Error ("%s is not a valid model", loadmodel->name);
+ if (LittleLong(pinmodel->ofs_tris <= 0) || LittleLong(pinmodel->ofs_tris) >= end)
+ Host_Error ("%s is not a valid model", loadmodel->name);
+ if (LittleLong(pinmodel->ofs_frames <= 0) || LittleLong(pinmodel->ofs_frames) >= end)
+ Host_Error ("%s is not a valid model", loadmodel->name);
+ if (LittleLong(pinmodel->ofs_glcmds <= 0) || LittleLong(pinmodel->ofs_glcmds) >= end)
+ Host_Error ("%s is not a valid model", loadmodel->name);
+
+ loadmodel->alias.aliasnum_meshes = 1;
+ loadmodel->alias.aliasdata_meshes = Mem_Alloc(loadmodel->mempool, sizeof(aliasmesh_t));
+
+ loadmodel->numskins = LittleLong(pinmodel->num_skins);
+ numxyz = LittleLong(pinmodel->num_xyz);
+ numst = LittleLong(pinmodel->num_st);
+ loadmodel->alias.aliasdata_meshes->num_triangles = LittleLong(pinmodel->num_tris);
+ loadmodel->numframes = LittleLong(pinmodel->num_frames);
+ loadmodel->alias.aliasdata_meshes->num_frames = loadmodel->numframes;
+ loadmodel->animscenes = Mem_Alloc(loadmodel->mempool, loadmodel->numframes * sizeof(animscene_t));
+
+ loadmodel->flags = 0; // there are no MD2 flags
+ loadmodel->synctype = ST_RAND;
+
+ // load the skins
+ inskin = (void*)(base + LittleLong(pinmodel->ofs_skins));
+ if ((skinfiles = Mod_LoadSkinFiles()))