- // load the skins
- skintemp = Mem_Alloc(tempmempool, skinwidth * skinheight);
- loadmodel->skinscenes = Mem_Alloc(loadmodel->mempool, loadmodel->numskins * sizeof(animscene_t));
- loadmodel->skinframes = Mem_Alloc(loadmodel->mempool, totalskins * sizeof(skinframe_t));
- totalskins = 0;
- datapointer = startskins;
- for (i = 0;i < loadmodel->numskins;i++)
- {
- pinskintype = (daliasskintype_t *)datapointer;
- datapointer += sizeof(daliasskintype_t);
-
- if (pinskintype->type == ALIAS_SKIN_SINGLE)
- {
- groupskins = 1;
- interval = 0.1f;
- }
- else
- {
- pinskingroup = (daliasskingroup_t *)datapointer;
- datapointer += sizeof(daliasskingroup_t);
-
- groupskins = LittleLong (pinskingroup->numskins);
-
- pinskinintervals = (daliasskininterval_t *)datapointer;
- datapointer += sizeof(daliasskininterval_t) * groupskins;
-
- interval = LittleFloat(pinskinintervals[0].interval);
- if (interval < 0.01f)
- Host_Error("Mod_LoadAliasModel: invalid interval\n");
- }
-
- sprintf(loadmodel->skinscenes[i].name, "skin %i", i);
- loadmodel->skinscenes[i].firstframe = totalskins;
- loadmodel->skinscenes[i].framecount = groupskins;
- loadmodel->skinscenes[i].framerate = 1.0f / interval;
- loadmodel->skinscenes[i].loop = true;
-
- for (j = 0;j < groupskins;j++)
- {
- if (groupskins > 1)
- sprintf (name, "%s_%i_%i", loadmodel->name, i, j);
- else
- sprintf (name, "%s_%i", loadmodel->name, i);
- if (!Mod_LoadExternalSkin(name, loadmodel->skinframes + totalskins, i == 0))
- Mod_LoadInternalSkin(name, (qbyte *)datapointer, skintemp, skinwidth, skinheight, loadmodel->skinframes + totalskins, i == 0);
- datapointer += skinwidth * skinheight;
- totalskins++;
- }
- }
- Mem_Free(skintemp);
- // check for skins that don't exist in the model, but do exist as external images
- // (this was added because yummyluv kept pestering me about support for it)
- for (;;)
- {
- sprintf (name, "%s_%i", loadmodel->name, loadmodel->numskins);
- if (Mod_LoadExternalSkin(name, &tempskinframe, loadmodel->numskins == 0))
- {
- // expand the arrays to make room
- tempskinscenes = loadmodel->skinscenes;
- tempskinframes = loadmodel->skinframes;
- loadmodel->skinscenes = Mem_Alloc(loadmodel->mempool, (loadmodel->numskins + 1) * sizeof(animscene_t));
- loadmodel->skinframes = Mem_Alloc(loadmodel->mempool, (totalskins + 1) * sizeof(skinframe_t));
- memcpy(loadmodel->skinscenes, tempskinscenes, loadmodel->numskins * sizeof(animscene_t));
- memcpy(loadmodel->skinframes, tempskinframes, totalskins * sizeof(skinframe_t));
- Mem_Free(tempskinscenes);
- Mem_Free(tempskinframes);
- // store the info about the new skin
- strcpy(loadmodel->skinscenes[loadmodel->numskins].name, name);
- loadmodel->skinscenes[loadmodel->numskins].firstframe = totalskins;
- loadmodel->skinscenes[loadmodel->numskins].framecount = 1;
- loadmodel->skinscenes[loadmodel->numskins].framerate = 10.0f;
- loadmodel->skinscenes[loadmodel->numskins].loop = true;
- loadmodel->skinframes[totalskins] = tempskinframe;
- loadmodel->numskins++;
- totalskins++;
- }
- else
- break;
- }