/* =============== Mod_LoadAllSkins =============== */ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype) { int i, j, k; char name[32]; int s; byte *copy; byte *skin; byte *texels; daliasskingroup_t *pinskingroup; int groupskins; daliasskininterval_t *pinskinintervals; skin = (byte *)(pskintype + 1); if (numskins < 1 || numskins > MAX_SKINS) Sys_Error ("Mod_LoadAliasModel: Invalid # of skins: %d\n", numskins); s = pheader->skinwidth * pheader->skinheight; for (i=0 ; i<numskins ; i++) { if (pskintype->type == ALIAS_SKIN_SINGLE) { Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight ); // save 8 bit texels for the player model to remap // if (!strcmp(loadmodel->name,"progs/player.mdl")) { texels = Hunk_AllocName(s, loadname); pheader->texels[i] = texels - (byte *)pheader; memcpy (texels, (byte *)(pskintype + 1), s); // } sprintf (name, "%s_%i", loadmodel->name, i); pheader->gl_texturenum[i][0] = pheader->gl_texturenum[i][1] = pheader->gl_texturenum[i][2] = pheader->gl_texturenum[i][3] = GL_LoadTexture (name, pheader->skinwidth, pheader->skinheight, (byte *)(pskintype + 1), true, false); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); } else { // animating skin group. yuck. pskintype++; pinskingroup = (daliasskingroup_t *)pskintype; groupskins = LittleLong (pinskingroup->numskins); pinskinintervals = (daliasskininterval_t *)(pinskingroup + 1); pskintype = (void *)(pinskinintervals + groupskins); for (j=0 ; j<groupskins ; j++) { Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight ); if (j == 0) { texels = Hunk_AllocName(s, loadname); pheader->texels[i] = texels - (byte *)pheader; memcpy (texels, (byte *)(pskintype), s); } sprintf (name, "%s_%i_%i", loadmodel->name, i,j); pheader->gl_texturenum[i][j&3] = GL_LoadTexture (name, pheader->skinwidth, pheader->skinheight, (byte *)(pskintype), true, false); pskintype = (daliasskintype_t *)((byte *)(pskintype) + s); } k = j; for (/* */; j < 4; j++) pheader->gl_texturenum[i][j&3] = pheader->gl_texturenum[i][j - k]; } } return (void *)pskintype; }
/* =============== Mod_LoadAllSkins =============== */ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype) { int i, j, k; char name[32]; int s; byte *skin; daliasskingroup_t *pinskingroup; int groupskins; daliasskininterval_t *pinskinintervals; skin = (byte *)(pskintype + 1); if (numskins < 1 || numskins > MAX_SKINS) Sys_Error ("Mod_LoadAliasModel: Invalid # of skins: %d\n", numskins); s = pheader->skinwidth * pheader->skinheight; for (i=0 ; i<numskins ; i++) { if (pskintype->type == ALIAS_SKIN_SINGLE) { Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight ); // save 8 bit texels for the player model to remap // save 8 bit texels for the player model to remap if (!strcmp(loadmodel->name,"progs/player.mdl")) { if (s > sizeof(player_8bit_texels)) Sys_Error ("Player skin too large"); memcpy (player_8bit_texels, (byte *)(pskintype + 1), s); } sprintf (name, "%s_%i", loadmodel->name, i); pheader->gx_texturenum[i][0] = pheader->gx_texturenum[i][1] = pheader->gx_texturenum[i][2] = // Mipmaps disabled; pointless for this engine in GX hardware: pheader->gx_texturenum[i][3] = GX_LoadTexture (name, pheader->skinwidth, pheader->skinheight, (byte *)(pskintype + 1), false/*true*/, false); pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s); } else { // animating skin group. yuck. pskintype++; pinskingroup = (daliasskingroup_t *)pskintype; groupskins = LittleLong (pinskingroup->numskins); pinskinintervals = (daliasskininterval_t *)(pinskingroup + 1); pskintype = (void *)(pinskinintervals + groupskins); for (j=0 ; j<groupskins ; j++) { Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight ); sprintf (name, "%s_%i_%i", loadmodel->name, i,j); // Mipmaps disabled; pointless for this engine in GX hardware: pheader->gx_texturenum[i][j&3] = GX_LoadTexture (name, pheader->skinwidth, pheader->skinheight, (byte *)(pskintype), false/*true*/, false); pskintype = (daliasskintype_t *)((byte *)(pskintype) + s); } k = j; for (/* */; j < 4; j++) pheader->gx_texturenum[i][j&3] = pheader->gx_texturenum[i][j - k]; } } return (void *)pskintype; }