diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index 64bc00450f55003a6988c013535c0ac55a610f4b..e7d7b4337d7117356b6900cdde54d7ce6a72a741 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -1584,6 +1584,23 @@ udmf
 		}
 	}
 
+	200
+	{
+		title = "Light Block";
+		prefix = "(200);
+		arg0
+		{
+			title = "Target sector tag";
+			type = 13;
+		}
+		arg1
+		{
+			title = "Expand to bottom?";
+			type = 11;
+			enum = "noyes";
+		}
+	}
+
 	linedefexecmisc
 	{
 		title = "Linedef Executor (misc.)";
diff --git a/src/p_setup.c b/src/p_setup.c
index 6eeeac5cdc117992b1470bcd169f656b546d36fd..4379425df24f953878b0bee10c7247eb5c38b43d 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2920,6 +2920,13 @@ static void P_ConvertBinaryMap(void)
 
 			lines[i].special = 100;
 			break;
+		case 200: //FOF: Light block
+		case 201: //FOF: Half light block
+			lines[i].args[0] = lines[i].tag;
+			if (lines[i].special == 201)
+				lines[i].args[1] = 1;
+			lines[i].special = 200;
+			break;
 		case 443: //Call Lua function
 			if (lines[i].text)
 			{
diff --git a/src/p_spec.c b/src/p_spec.c
index ac45b6d074dba579b7d578937d96c7ecc37dfb94..d10d72a0f06986d98f1a2bc17c02219517fc6cfc 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -6943,12 +6943,11 @@ void P_SpawnSpecials(boolean fromnetsave)
 				P_AddRaiseThinker(lines[i].frontsector, &lines[i]);
 				break;
 
-			case 200: // Double light effect
-				P_AddFakeFloorsByLine(i, FF_EXISTS|FF_CUTSPRITES|FF_DOUBLESHADOW, secthinkers);
-				break;
-
-			case 201: // Light effect
-				P_AddFakeFloorsByLine(i, FF_EXISTS|FF_CUTSPRITES, secthinkers);
+			case 200: // Light block
+				ffloorflags = FF_EXISTS|FF_CUTSPRITES;
+				if (!lines[i].args[1])
+					ffloorflags |= FF_DOUBLESHADOW;
+				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
 				break;
 
 			case 202: // Fog