]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.c
fixed -tenebrae support, added glass and mirror rendering and caulk
[xonotic/darkplaces.git] / model_brush.c
index 3278bcd467722a140210bedcbc1ccc06bee19084..12ae4d6feb9784391354336e78bcf211187b07f3 100644 (file)
@@ -1317,6 +1317,9 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
        unsigned char *data, *mtdata;
        const char *s;
        char mapname[MAX_QPATH], name[MAX_QPATH];
+       unsigned char zero[4];
+
+       memset(zero, 0, sizeof(zero));
 
        loadmodel->data_textures = NULL;
 
@@ -1533,14 +1536,29 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
                        if (tx->name[0] == '*')
                        {
                                // LordHavoc: some turbulent textures should not be affected by wateralpha
-                               if (strncmp(tx->name,"*lava",5)
-                                && strncmp(tx->name,"*teleport",9)
-                                && strncmp(tx->name,"*rift",5)) // Scourge of Armagon texture
-                                       tx->basematerialflags |= MATERIALFLAG_WATERALPHA | MATERIALFLAG_NOSHADOW | MATERIALFLAG_WATERSHADER;
-                               tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW;
+                               if (!strncmp(tx->name, "*glassmirror", 12)) // Tenebrae
+                               {
+                                       // replace the texture with transparent black
+                                       tx->skinframes[0] = R_SkinFrame_LoadInternalBGRA(tx->name, TEXF_MIPMAP | TEXF_PRECACHE, zero, 1, 1);
+                                       tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_NOSHADOW | MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_REFLECTION;
+                               }
+                               else if (!strncmp(tx->name,"*lava",5)
+                                || !strncmp(tx->name,"*teleport",9)
+                                || !strncmp(tx->name,"*rift",5)) // Scourge of Armagon texture
+                                       tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW;
+                               else
+                                       tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW | MATERIALFLAG_WATERALPHA | MATERIALFLAG_WATERSHADER;
+                       }
+                       else if (!strncmp(tx->name, "mirror", 6)) // Tenebrae
+                       {
+                               // replace the texture with transparent black
+                               tx->skinframes[0] = R_SkinFrame_LoadInternalBGRA(tx->name, TEXF_PRECACHE, zero, 1, 1);
+                               tx->basematerialflags |= MATERIALFLAG_WALL | MATERIALFLAG_REFLECTION;
                        }
                        else if (!strncmp(tx->name, "sky", 3))
                                tx->basematerialflags |= MATERIALFLAG_SKY | MATERIALFLAG_NOSHADOW;
+                       else if (!strcmp(tx->name, "caulk"))
+                               tx->basematerialflags = MATERIALFLAG_NODRAW;
                        else
                                tx->basematerialflags |= MATERIALFLAG_WALL;
                        if (tx->skinframes[0] && tx->skinframes[0]->fog)