shithub: qk1

Download patch

ref: 57161a86fd06293d116ac687ea9e462c02eb7cbb
parent: a1da754ee85d9f5b17f6f67a61945f4994565c9b
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Oct 16 18:45:29 EDT 2023

add r_lavaalpha and r_slimealpha; leave teleports alone (non-transparent)

--- a/d_edge.c
+++ b/d_edge.c
@@ -144,6 +144,17 @@
 	bbextentt = ((pface->extents[1] << 16) >> miplevel) - 1;
 }
 
+static float
+alphafor(surf_t *s)
+{
+	if((s->flags & (SURF_LAVA|SURF_SLIME|SURF_TELE)) == 0)
+		return r_wateralpha.value;
+	if(s->flags & SURF_LAVA)
+		return r_lavaalpha.value;
+	if(s->flags & SURF_SLIME)
+		return r_slimealpha.value;
+	return 1.0;
+}
 
 /*
 ==============
@@ -234,7 +245,7 @@
 				}
 
 				D_CalcGradients (pface);
-				Turbulent8 (s->spans, r_wateralpha.value);
+				Turbulent8 (s->spans, alphafor(s));
 				D_DrawZSpans (s->spans);
 
 				if (s->insubmodel)
@@ -286,8 +297,6 @@
 
 				if(s->flags & SURF_FENCE)
 					D_DrawSpans16_Fence(s->spans);
-				else if(s->flags & SURF_TRANS)
-					(*d_drawspans) (s->spans, r_wateralpha.value);
 				else
 					(*d_drawspans) (s->spans, 1.0);
 
--- a/model.c
+++ b/model.c
@@ -785,6 +785,12 @@
 				out->extents[i] = 16384;
 				out->texturemins[i] = -8192;
 			}
+			if(strstr(out->texinfo->texture->name, "lava") != nil)
+				out->flags |= SURF_LAVA;
+			if(strstr(out->texinfo->texture->name, "slime") != nil)
+				out->flags |= SURF_SLIME;
+			if(strstr(out->texinfo->texture->name, "tele") != nil)
+				out->flags |= SURF_TELE;
 		}else if(out->texinfo->texture->name[0] == '{')
 			out->flags |= SURF_TRANS | SURF_FENCE;
 	}
--- a/model.h
+++ b/model.h
@@ -64,6 +64,9 @@
 	SURF_DRAWBACKGROUND = 1<<6,
 	SURF_TRANS = 1<<8,
 	SURF_FENCE = 1<<9,
+	SURF_LAVA = 1<<10,
+	SURF_SLIME = 1<<11,
+	SURF_TELE = 1<<12,
 };
 
 // !!! if this is changed, it must be changed in asm_draw.h too !!!
--- a/r_local.h
+++ b/r_local.h
@@ -51,6 +51,8 @@
 extern cvar_t	r_numedges;
 extern cvar_t	r_part_scale;
 extern cvar_t	r_wateralpha;
+extern cvar_t	r_lavaalpha;
+extern cvar_t	r_slimealpha;
 
 #define XCENTERING	(1.0 / 2.0)
 #define YCENTERING	(1.0 / 2.0)
--- a/r_main.c
+++ b/r_main.c
@@ -118,6 +118,8 @@
 cvar_t	r_aliastransadj = {"r_aliastransadj", "100"};
 cvar_t	r_part_scale = {"r_part_scale", "0.75", true};
 cvar_t	r_wateralpha = {"r_wateralpha", "1", true};
+cvar_t	r_lavaalpha = {"r_lavaalpha", "1", true};
+cvar_t	r_slimealpha = {"r_slimealpha", "1", true};
 
 extern cvar_t	scr_fov;
 
@@ -201,6 +203,8 @@
 	Cvar_RegisterVariable (&r_aliastransadj);
 	Cvar_RegisterVariable (&r_part_scale);
 	Cvar_RegisterVariable (&r_wateralpha);
+	Cvar_RegisterVariable (&r_lavaalpha);
+	Cvar_RegisterVariable (&r_slimealpha);
 
 	view_clipplanes[0].leftedge = true;
 	view_clipplanes[1].rightedge = true;