diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index 1bd5055e2a7e23c2558199b3b5b1224cc8af8d59..528690dc4f9d02fe153a02985f18c14e5938c136 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -1623,6 +1623,27 @@ udmf
 		}
 	}
 
+	250
+	{
+		title = "Mario Block";
+		prefix = "(250);
+		arg0
+		{
+			title = "Target sector tag";
+			type = 13;
+		}
+		arg1
+		{
+			title = "Block type";
+			type = 12;
+			enum
+			{
+				1 = "Brick";
+				2 = "Invisible";
+			}
+		}
+	}
+
 	linedefexecmisc
 	{
 		title = "Linedef Executor (misc.)";
diff --git a/src/p_setup.c b/src/p_setup.c
index cf5dbcbc796e4f6fd0aea21e20feb64c129b703d..92eaff4b58e0493797a921c3050a5a21fc593796 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2931,6 +2931,13 @@ static void P_ConvertBinaryMap(void)
 		case 223: //FOF: Intangible, invisible
 			lines[i].args[0] = lines[i].tag;
 			break;
+		case 250: //FOF: Mario block
+			lines[i].args[0] = lines[i].tag;
+			if (lines[i].flags & ML_NOCLIMB) //Brick block
+				lines[i].args[1] |= 1;
+			if (lines[i].flags & ML_EFFECT1) //Invisible
+				lines[i].args[1] |= 2;
+			break;
 		case 443: //Call Lua function
 			if (lines[i].text)
 			{
diff --git a/src/p_spec.c b/src/p_spec.c
index d10d72a0f06986d98f1a2bc17c02219517fc6cfc..94e6aa936b5d358189d91475740295f41687c6fc 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -6987,9 +6987,9 @@ void P_SpawnSpecials(boolean fromnetsave)
 
 			case 250: // Mario Block
 				ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_CUTLEVEL|FF_MARIO;
-				if (lines[i].flags & ML_NOCLIMB)
+				if (lines[i].args[1] & 1) //Brick block
 					ffloorflags |= FF_SHATTERBOTTOM;
-				if (lines[i].flags & ML_EFFECT1)
+				if (lines[i].args[1] & 2) // Invisible
 					ffloorflags &= ~(FF_SOLID|FF_RENDERALL|FF_CUTLEVEL);
 
 				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);