diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index cdf9bdd409cd567c8ecb50b87e2c84e0af03290d..884865f9527d98195422a05e2d0d9158e4cd6963 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -1794,17 +1794,22 @@ udmf
 				type = 13;
 			}
 			arg1
+			{
+				title = "Alpha";
+				default = 128;
+			}
+			arg2
 			{
 				title = "Flags";
 				type = 12;
 				enum
 				{
-				    1 = "Opaque";
-					2 = "Don't render sides";
-					4 = "Render separate light level";
-					8 = "Use target light level";
-					16 = "No ripple effect";
-					32 = "Goo physics";
+					1 = "Don't render sides";
+					2 = "Render separate light level";
+					4 = "Use target light level";
+					8 = "No ripple effect";
+					16 = "Goo physics";
+					32 = "Cut cyan flat pixels";
 				}
 			}
 		}
diff --git a/src/p_setup.c b/src/p_setup.c
index 26132251c352a4ea2aa947e3bfeaf6587fcc3cd1..0ef1a9793a0fe13172e241bb15df51429c0ec2e7 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3056,32 +3056,36 @@ static void P_ConvertBinaryMap(void)
 		case 125: //FOF: goo water, translucent, no sides
 			lines[i].args[0] = lines[i].tag;
 
-			//Opaque?
+			//Alpha
 			if (lines[i].special == 120 || lines[i].special == 122)
-				lines[i].args[1] |= TMFW_OPAQUE;
+				lines[i].args[1] = 255;
 			else
 			{
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
-					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
+					lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
 				else
-					lines[i].alpha = FRACUNIT/2;
+					lines[i].args[1] = 128;
 			}
 
 			//No sides?
 			if (lines[i].special == 122 || lines[i].special == 123 || lines[i].special == 125)
-				lines[i].args[1] |= TMFW_NOSIDES;
+				lines[i].args[2] |= TMFW_NOSIDES;
 
 			//Flags
 			if (lines[i].flags & ML_NOCLIMB)
-				lines[i].args[1] |= TMFW_DOUBLESHADOW;
+				lines[i].args[2] |= TMFW_DOUBLESHADOW;
 			if (lines[i].flags & ML_EFFECT4)
-				lines[i].args[1] |= TMFW_COLORMAPONLY;
+				lines[i].args[2] |= TMFW_COLORMAPONLY;
 			if (!(lines[i].flags & ML_EFFECT5))
-				lines[i].args[1] |= TMFW_NORIPPLE;
+				lines[i].args[2] |= TMFW_NORIPPLE;
 
 			//Goo?
 			if (lines[i].special >= 124)
-				lines[i].args[1] |= TMFW_GOOWATER;
+				lines[i].args[2] |= TMFW_GOOWATER;
+
+			//Splat rendering?
+			if (lines[i].flags & ML_EFFECT6)
+				lines[i].args[2] |= TMFW_SPLAT;
 
 			lines[i].special = 120;
 			break;
diff --git a/src/p_spec.c b/src/p_spec.c
index b39594ee7d5bce143c2fd78380effae671759a21..84d399a55c3df22afbbc7f48929f34cd156ed36c 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -5747,7 +5747,7 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, I
 	}
 
 	fflr->alpha = max(0, min(0xff, alpha));
-	if (fflr->alpha == 0xff)
+	if (fflr->alpha < 0xff)
 	{
 		fflr->flags |= FF_TRANSLUCENT;
 		fflr->spawnflags = fflr->flags;
@@ -6646,19 +6646,19 @@ void P_SpawnSpecials(boolean fromnetsave)
 
 			case 120: // FOF (water)
 				ffloorflags = FF_EXISTS|FF_RENDERPLANES|FF_SWIMMABLE|FF_BOTHPLANES|FF_CUTEXTRA|FF_EXTRA|FF_CUTSPRITES;
-				if (!(lines[i].args[1] & TMFW_OPAQUE))
-					ffloorflags |= FF_TRANSLUCENT;
-				if (!(lines[i].args[1] & TMFW_NOSIDES))
+				if (!(lines[i].args[2] & TMFW_NOSIDES))
 					ffloorflags |= FF_RENDERSIDES|FF_ALLSIDES;
-				if (lines[i].args[1] & TMFW_DOUBLESHADOW)
+				if (lines[i].args[2] & TMFW_DOUBLESHADOW)
 					ffloorflags |= FF_DOUBLESHADOW;
-				if (lines[i].args[1] & TMFW_COLORMAPONLY)
+				if (lines[i].args[2] & TMFW_COLORMAPONLY)
 					ffloorflags |= FF_COLORMAPONLY;
-				if (!(lines[i].args[1] & TMFW_NORIPPLE))
+				if (!(lines[i].args[2] & TMFW_NORIPPLE))
 					ffloorflags |= FF_RIPPLE;
-				if (lines[i].args[1] & TMFW_GOOWATER)
+				if (lines[i].args[2] & TMFW_GOOWATER)
 					ffloorflags |= FF_GOOWATER;
-				P_AddFakeFloorsByLine(i, (ffloorflags & FF_TRANSLUCENT) ? (lines[i].alpha * 0xff) >> FRACBITS : 0xff, ffloorflags, secthinkers);
+				if (lines[i].args[2] & TMFW_SPLAT)
+					ffloorflags |= FF_SPLAT;
+				P_AddFakeFloorsByLine(i, lines[i].args[1], ffloorflags, secthinkers);
 				break;
 
 			case 150: // FOF (Air bobbing)
diff --git a/src/p_spec.h b/src/p_spec.h
index ef69e83ea13a71c6b2630d07551f42fd43098aa6..16f992780bc64bda30b3f8c70b9b10217dc02552 100644
--- a/src/p_spec.h
+++ b/src/p_spec.h
@@ -46,12 +46,12 @@ typedef enum
 
 typedef enum
 {
-	TMFW_OPAQUE       = 1,
-	TMFW_NOSIDES      = 1<<1,
-	TMFW_DOUBLESHADOW = 1<<2,
-	TMFW_COLORMAPONLY = 1<<3,
-	TMFW_NORIPPLE     = 1<<4,
-	TMFW_GOOWATER     = 1<<5,
+	TMFW_NOSIDES      = 1,
+	TMFW_DOUBLESHADOW = 1<<1,
+	TMFW_COLORMAPONLY = 1<<2,
+	TMFW_NORIPPLE     = 1<<3,
+	TMFW_GOOWATER     = 1<<4,
+	TMFW_SPLAT        = 1<<5,
 } textmapfofwater_t;
 
 typedef enum