]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.c
curl: longer URLs
[xonotic/darkplaces.git] / model_shared.c
index 80c2237982ac56c34887b526d9f57728f1c49ad1..12bcad7b6f5ad6c1246aba6f9c0acd62877c3144 100644 (file)
@@ -1447,6 +1447,7 @@ void Mod_LoadQ3Shaders(void)
                                                                else if (!strcasecmp(parameter[1], "rotate"))          layer->tcmods[tcmodindex].tcmod = Q3TCMOD_ROTATE;
                                                                else if (!strcasecmp(parameter[1], "scale"))           layer->tcmods[tcmodindex].tcmod = Q3TCMOD_SCALE;
                                                                else if (!strcasecmp(parameter[1], "scroll"))          layer->tcmods[tcmodindex].tcmod = Q3TCMOD_SCROLL;
+                                                               else if (!strcasecmp(parameter[1], "page"))            layer->tcmods[tcmodindex].tcmod = Q3TCMOD_PAGE;
                                                                else if (!strcasecmp(parameter[1], "stretch"))
                                                                {
                                                                        layer->tcmods[tcmodindex].tcmod = Q3TCMOD_STRETCH;
@@ -1483,7 +1484,7 @@ void Mod_LoadQ3Shaders(void)
                                        layer->texflags = TEXF_ALPHA | TEXF_PRECACHE;
                                        if (!(shader.surfaceparms & Q3SURFACEPARM_NOMIPMAPS))
                                                layer->texflags |= TEXF_MIPMAP;
-                                       if (!(shader.textureflags & Q3TEXTUREFLAG_NOPICMIP) && (r_picmipworld.integer || (layer->texturename && layer->texturename[0] && strncmp(layer->texturename[0], "textures/", 9))))
+                                       if (!(shader.textureflags & Q3TEXTUREFLAG_NOPICMIP))
                                                layer->texflags |= TEXF_PICMIP | TEXF_COMPRESS;
                                        if (layer->clampmap)
                                                layer->texflags |= TEXF_CLAMP;
@@ -1582,6 +1583,10 @@ void Mod_LoadQ3Shaders(void)
                                        else
                                                Con_DPrintf("%s parsing warning: unknown surfaceparm \"%s\"\n", search->filenames[fileindex], parameter[1]);
                                }
+                               else if (!strcasecmp(parameter[0], "dpshadow"))
+                                       shader.dpshadow = true;
+                               else if (!strcasecmp(parameter[0], "dpnoshadow"))
+                                       shader.dpnoshadow = true;
                                else if (!strcasecmp(parameter[0], "sky") && numparameters >= 2)
                                {
                                        // some q3 skies don't have the sky parm set
@@ -1731,6 +1736,13 @@ qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qbool
                        Con_Printf("%s: loaded shader for %s\n", loadmodel->name, name);
                texture->surfaceparms = shader->surfaceparms;
                texture->textureflags = shader->textureflags;
+
+               // allow disabling of picmip or compression by defaulttexflags
+               if(!(defaulttexflags & TEXF_PICMIP))
+                       texture->textureflags &= ~TEXF_PICMIP;
+               if(!(defaulttexflags & TEXF_COMPRESS))
+                       texture->textureflags &= ~TEXF_COMPRESS;
+
                texture->basematerialflags = 0;
                if (shader->surfaceparms & Q3SURFACEPARM_SKY)
                {
@@ -1811,7 +1823,11 @@ nothing                GL_ZERO GL_ONE
                        texture->skinframerate = primarylayer->framerate;
                        for (j = 0;j < primarylayer->numframes;j++)
                        {
-                               if (!(texture->skinframes[j] = R_SkinFrame_LoadExternal(primarylayer->texturename[j], primarylayer->texflags, false)))
+                               if(cls.state == ca_dedicated)
+                               {
+                                       texture->skinframes[j] = NULL;
+                               }
+                               else if (!(texture->skinframes[j] = R_SkinFrame_LoadExternal(primarylayer->texturename[j], primarylayer->texflags, false)))
                                {
                                        Con_Printf("^1%s:^7 could not load texture ^3\"%s\"^7 (frame %i) for shader ^2\"%s\"\n", loadmodel->name, primarylayer->texturename[j], j, texture->name);
                                        texture->skinframes[j] = R_SkinFrame_LoadMissing();
@@ -1825,13 +1841,21 @@ nothing                GL_ZERO GL_ONE
                        texture->backgroundskinframerate = backgroundlayer->framerate;
                        for (j = 0;j < backgroundlayer->numframes;j++)
                        {
-                               if (!(texture->backgroundskinframes[j] = R_SkinFrame_LoadExternal(backgroundlayer->texturename[j], backgroundlayer->texflags, false)))
+                               if(cls.state == ca_dedicated)
+                               {
+                                       texture->skinframes[j] = NULL;
+                               }
+                               else if (!(texture->backgroundskinframes[j] = R_SkinFrame_LoadExternal(backgroundlayer->texturename[j], backgroundlayer->texflags, false)))
                                {
                                        Con_Printf("^1%s:^7 could not load texture ^3\"%s\"^7 (background frame %i) for shader ^2\"%s\"\n", loadmodel->name, backgroundlayer->texturename[j], j, texture->name);
                                        texture->backgroundskinframes[j] = R_SkinFrame_LoadMissing();
                                }
                        }
                }
+               if (shader->dpshadow)
+                       texture->basematerialflags &= ~MATERIALFLAG_NOSHADOW;
+               if (shader->dpnoshadow)
+                       texture->basematerialflags |= MATERIALFLAG_NOSHADOW;
                memcpy(texture->deforms, shader->deforms, sizeof(texture->deforms));
                texture->reflectmin = shader->reflectmin;
                texture->reflectmax = shader->reflectmax;
@@ -1866,15 +1890,28 @@ nothing                GL_ZERO GL_ONE
                else
                        texture->basematerialflags |= MATERIALFLAG_WALL;
                texture->numskinframes = 1;
-               if (fallback)
+               if(cls.state == ca_dedicated)
                {
-                       if (!(texture->skinframes[0] = R_SkinFrame_LoadExternal(texture->name, defaulttexflags, false)))
-                               success = false;
+                       texture->skinframes[0] = NULL;
                }
                else
-                       success = false;
-               if (!success && warnmissing)
-                       Con_Printf("^1%s:^7 could not load texture ^3\"%s\"\n", loadmodel->name, texture->name);
+               {
+                       if (fallback)
+                       {
+                               qboolean has_alpha;
+                               if ((texture->skinframes[0] = R_SkinFrame_LoadExternal_CheckAlpha(texture->name, defaulttexflags, false, &has_alpha)))
+                               {
+                                       if(has_alpha && (defaulttexflags & TEXF_ALPHA))
+                                               texture->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_NOSHADOW;
+                               }
+                               else
+                                       success = false;
+                       }
+                       else
+                               success = false;
+                       if (!success && warnmissing)
+                               Con_Printf("^1%s:^7 could not load texture ^3\"%s\"\n", loadmodel->name, texture->name);
+               }
        }
        // init the animation variables
        texture->currentframe = texture;