diff --git a/engine/common/com_mesh.c b/engine/common/com_mesh.c index 38aa77491..4949f4036 100644 --- a/engine/common/com_mesh.c +++ b/engine/common/com_mesh.c @@ -1394,7 +1394,7 @@ static void *Q1_LoadSkins_GL (daliasskintype_t *pskintype, qboolean alpha) } //but only preload it if we have no replacement. - if (!texture) + if (!texture || (loadmodel->engineflags & MDLF_NOTREPLACEMENTS)) { //we're not using 24bits texnums = Hunk_Alloc(sizeof(*texnums)+s); @@ -1403,18 +1403,21 @@ static void *Q1_LoadSkins_GL (daliasskintype_t *pskintype, qboolean alpha) memcpy(saved, pskintype+1, s); Mod_FloodFillSkin(saved, outskin->skinwidth, outskin->skinheight); -//the extra underscore is to stop - snprintf(skinname, sizeof(skinname), "%s__%i", loadname, i); - texture = R_LoadTexture8(skinname, outskin->skinwidth, outskin->skinheight, saved, true, alpha); - if (r_fb_models.value) +//the extra underscore is to stop + if (!texture) { - snprintf(skinname, sizeof(skinname), "%s__%i_luma", loadname, i); - fbtexture = R_LoadTextureFB(skinname, outskin->skinwidth, outskin->skinheight, saved, true, true); - } - if (gl_bump.value) - { - snprintf(skinname, sizeof(skinname), "%s__%i_bump", loadname, i); - bumptexture = R_LoadTexture8Bump(skinname, outskin->skinwidth, outskin->skinheight, saved, true, true); + snprintf(skinname, sizeof(skinname), "%s__%i", loadname, i); + texture = R_LoadTexture8(skinname, outskin->skinwidth, outskin->skinheight, saved, true, alpha); + if (r_fb_models.value) + { + snprintf(skinname, sizeof(skinname), "%s__%i_luma", loadname, i); + fbtexture = R_LoadTextureFB(skinname, outskin->skinwidth, outskin->skinheight, saved, true, true); + } + if (gl_bump.value) + { + snprintf(skinname, sizeof(skinname), "%s__%i_bump", loadname, i); + bumptexture = R_LoadTexture8Bump(skinname, outskin->skinwidth, outskin->skinheight, saved, true, true); + } } } else diff --git a/engine/gl/gl_alias.c b/engine/gl/gl_alias.c index cd22bc91f..32f9d1b78 100644 --- a/engine/gl/gl_alias.c +++ b/engine/gl/gl_alias.c @@ -1008,7 +1008,7 @@ static galiastexnum_t *GL_ChooseSkin(galiasinfo_t *inf, char *modelname, int sur int tc, bc; qboolean forced; - if ((e->model->engineflags & MDLF_NOTREPLACEMENTS) && ruleset_allow_sensative_texture_replacements.value) + if ((e->model->engineflags & MDLF_NOTREPLACEMENTS) && !ruleset_allow_sensative_texture_replacements.value) forced = true; else forced = false; @@ -1039,18 +1039,29 @@ static galiastexnum_t *GL_ChooseSkin(galiasinfo_t *inf, char *modelname, int sur char hashname[512]; cc = (tc<<4)|bc; - if (e->scoreboard && e->scoreboard->skin) + if (forced) { - snprintf(hashname, sizeof(hashname), "%s$%s$%i", modelname, e->scoreboard->skin->name, surfnum); - skinname = hashname; - } - else if (surfnum) - { - snprintf(hashname, sizeof(hashname), "%s$%i", modelname, surfnum); + if (e->scoreboard && e->scoreboard->skin) + snprintf(hashname, sizeof(hashname), "%s$%s$%i", modelname, e->scoreboard->skin->name, surfnum); + else + snprintf(hashname, sizeof(hashname), "%s$%i", modelname, surfnum); skinname = hashname; } else - skinname = modelname; + { + if (e->scoreboard && e->scoreboard->skin) + { + snprintf(hashname, sizeof(hashname), "%s$%s$%i", modelname, e->scoreboard->skin->name, surfnum); + skinname = hashname; + } + else if (surfnum) + { + snprintf(hashname, sizeof(hashname), "%s$%i", modelname, surfnum); + skinname = hashname; + } + else + skinname = modelname; + } if (!skincolourmapped.numbuckets) Hash_InitTable(&skincolourmapped, 256, BZ_Malloc(Hash_BytesForBuckets(256)));