diff --git a/src/p_mobj.c b/src/p_mobj.c
index 8f89ed0b0dca0cbf32d22a47e8f8fb8bd5cd1e02..39adbc5ab9b0bd82c90cb1d3b06c138b99f20083 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1689,7 +1689,7 @@ static void P_PushableCheckBustables(mobj_t *mo)
 				if (!(rover->flags & FF_BUSTUP)) continue;
 
 				// Bustable by pushables?
-				if (!(rover->master->args[3] & 1)) continue;
+				if (!(rover->master->args[3] & TMFB_PUSHABLES)) continue;
 
 				if (!rover->master->frontsector->crumblestate)
 				{
diff --git a/src/p_setup.c b/src/p_setup.c
index a09b2d6595a85b8b7101c78338e8eb5c4402c4ef..e9df4eecdd3afc99c929ee2c74dddf9da012078e 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2810,24 +2810,24 @@ static void P_ConvertBinaryMap(void)
 
 			//Visibility
 			if (lines[i].special == 105)
-				lines[i].args[1] = 3;
+				lines[i].args[1] = TMFV_NOPLANES|TMFV_NOSIDES;
 			else if (lines[i].special == 104)
-				lines[i].args[1] = 2;
+				lines[i].args[1] = TMFV_NOSIDES;
 			else if (lines[i].special == 103)
-				lines[i].args[1] = 1;
+				lines[i].args[1] = TMFV_NOPLANES;
 
 			//Tangibility
 			if (lines[i].flags & ML_EFFECT1)
-				lines[i].args[2] |= 8;
+				lines[i].args[2] |= TMFT_DONTBLOCKOTHERS;
 			if (lines[i].flags & ML_EFFECT2)
-				lines[i].args[2] |= 4;
+				lines[i].args[2] |= TMFT_DONTBLOCKPLAYER;
 
 			//Translucency
 			if (lines[i].special == 102)
 			{
-				lines[i].args[3] |= 1;
+				lines[i].args[3] |= TMFA_TRANSLUCENT;
 				if (lines[i].flags & ML_NOCLIMB)
-					lines[i].args[1] |= 4;
+					lines[i].args[1] |= TMFV_TOGGLEINSIDES;
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
 					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
 				else
@@ -2836,7 +2836,7 @@ static void P_ConvertBinaryMap(void)
 
 			//Shadow?
 			if (lines[i].special != 100 && (lines[i].special != 104 || !(lines[i].flags & ML_NOCLIMB)))
-				lines[i].args[3] |= 1;
+				lines[i].args[3] |= TMFA_NOSHADE;
 
 			lines[i].special = 100;
 			break;
@@ -2850,7 +2850,7 @@ static void P_ConvertBinaryMap(void)
 
 			//Opaque?
 			if (lines[i].special == 120 || lines[i].special == 122)
-				lines[i].args[1] |= 1;
+				lines[i].args[1] |= TMFW_OPAQUE;
 			else
 			{
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
@@ -2861,19 +2861,19 @@ static void P_ConvertBinaryMap(void)
 
 			//No sides?
 			if (lines[i].special == 122 || lines[i].special == 123 || lines[i].special == 125)
-				lines[i].args[1] |= 2;
+				lines[i].args[1] |= TMFW_NOSIDES;
 
 			//Flags
 			if (lines[i].flags & ML_NOCLIMB)
-				lines[i].args[1] |= 4;
+				lines[i].args[1] |= TMFW_DOUBLESHADOW;
 			if (lines[i].flags & ML_EFFECT4)
-				lines[i].args[1] |= 8;
+				lines[i].args[1] |= TMFW_COLORMAPONLY;
 			if (!(lines[i].flags & ML_EFFECT5))
-				lines[i].args[1] |= 16;
+				lines[i].args[1] |= TMFW_NORIPPLE;
 
 			//Goo?
 			if (lines[i].special >= 124)
-				lines[i].args[1] |= 32;
+				lines[i].args[1] |= TMFW_GOOWATER;
 
 			lines[i].special = 120;
 			break;
@@ -2888,29 +2888,29 @@ static void P_ConvertBinaryMap(void)
 
 			//Visibility
 			if (lines[i].special == 142 || lines[i].special == 145)
-				lines[i].args[1] = 2;
+				lines[i].args[1] = TMFV_NOSIDES;
 			else if (lines[i].special == 146)
-				lines[i].args[1] = 1;
+				lines[i].args[1] = TMFV_NOPLANES;
 
 			//Tangibility
 			if (lines[i].special <= 142)
-				lines[i].args[2] |= 2;
+				lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM;
 			else if (lines[i].special <= 145)
-				lines[i].args[2] |= 1;
+				lines[i].args[2] |= TMFT_INTANGIBLETOP;
 			else
-				lines[i].args[2] |= 3;
+				lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM|TMFT_INTANGIBLETOP;
 
 			if (lines[i].flags & ML_EFFECT1)
-				lines[i].args[2] |= 8;
+				lines[i].args[2] |= TMFT_DONTBLOCKOTHERS;
 			if (lines[i].flags & ML_EFFECT2)
-				lines[i].args[2] |= 4;
+				lines[i].args[2] |= TMFT_DONTBLOCKPLAYER;
 
 			//Translucency
 			if (lines[i].special == 141 || lines[i].special == 142 || lines[i].special == 144 || lines[i].special == 145)
 			{
-				lines[i].args[3] |= 1;
+				lines[i].args[3] |= TMFA_TRANSLUCENT;
 				if (lines[i].flags & ML_NOCLIMB)
-					lines[i].args[1] |= 4;
+					lines[i].args[1] |= TMFV_TOGGLEINSIDES;
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
 					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
 				else
@@ -2919,7 +2919,7 @@ static void P_ConvertBinaryMap(void)
 
 			//Shadow?
 			if (lines[i].special != 146 && (lines[i].flags & ML_NOCLIMB))
-				lines[i].args[3] |= 2;
+				lines[i].args[3] |= TMFA_NOSHADE;
 
 			lines[i].special = 100;
 			break;
@@ -2937,24 +2937,24 @@ static void P_ConvertBinaryMap(void)
 			lines[i].args[0] = lines[i].tag;
 			if (lines[i].special >= 172 && lines[i].special <= 175)
 			{
-				lines[i].args[1] |= 2; //Intangible from below
+				lines[i].args[1] |= TMFT_INTANGIBLEBOTTOM;
 				if (lines[i].flags & ML_NOCLIMB)
-					lines[i].args[2] |= 2; //Don't cast shadow
+					lines[i].args[2] |= TMFC_NOSHADE;
 			}
 			if (lines[i].special >= 174 && lines[i].special <= 175)
 			{
-				lines[i].args[2] |= 1; //Translucent
+				lines[i].args[2] |= TMFC_TRANSLUCENT;
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
 					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
 				else
 					lines[i].alpha = FRACUNIT/2;
 			}
 			if (lines[i].special % 2 == 1)
-				lines[i].args[2] |= 4; //Don't respawn
+				lines[i].args[2] |= TMFC_NORETURN;
 			if (lines[i].special == 176 || lines[i].special == 177 || lines[i].special == 180)
-				lines[i].args[2] |= 8; //Air bobbing
+				lines[i].args[2] |= TMFC_AIRBOB;
 			if (lines[i].special >= 176 && lines[i].special <= 179)
-				lines[i].args[2] |= 16; //Float on water
+				lines[i].args[2] |= TMFC_FLOATBOB;
 			lines[i].special = 170;
 			break;
 		case 200: //FOF: Light block
@@ -2975,30 +2975,30 @@ static void P_ConvertBinaryMap(void)
 
 			//Visibility
 			if (lines[i].special == 222)
-				lines[i].args[1] |= 1; //Don't render planes
+				lines[i].args[1] |= TMFV_NOPLANES;
 			if (lines[i].special == 221)
-				lines[i].args[1] |= 4; //Don't render insides
+				lines[i].args[1] |= TMFV_TOGGLEINSIDES;
 
 			//Appearance
 			if (lines[i].special == 221)
 			{
-				lines[i].args[2] |= 1; //Translucent
+				lines[i].args[2] |= TMFA_TRANSLUCENT;
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
 					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
 				else
 					lines[i].alpha = FRACUNIT/2;
 			}
 			if (lines[i].special != 220 && !(lines[i].flags & ML_NOCLIMB))
-				lines[i].args[2] |= 2; //Don't cast shadow
+				lines[i].args[2] |= TMFA_NOSHADE;
 
 			lines[i].special = 220;
             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;
+			if (lines[i].flags & ML_NOCLIMB)
+				lines[i].args[1] |= TMFM_BRICK;
+			if (lines[i].flags & ML_EFFECT1)
+				lines[i].args[1] |= TMFM_INVISIBLE;
 			break;
 		case 251: //FOF: Thwomp block
 			lines[i].args[0] = lines[i].tag;
@@ -3029,18 +3029,18 @@ static void P_ConvertBinaryMap(void)
 
 			//Bustable type
 			if (lines[i].special <= 253)
-				lines[i].args[1] = 0;
+				lines[i].args[1] = TMFB_TOUCH;
 			else if (lines[i].special >= 255)
-				lines[i].args[1] = 1;
+				lines[i].args[1] = TMFB_SPIN;
 			else if (lines[i].flags & ML_NOCLIMB)
-				lines[i].args[1] = 3;
+				lines[i].args[1] = TMFB_STRONG;
 			else
-				lines[i].args[1] = 2;
+				lines[i].args[1] = TMFB_REGULAR;
 
 			//Translucency
 			if (lines[i].special == 253 || lines[i].special == 256)
 			{
-				lines[i].args[2] = 1;
+				lines[i].args[2] = TMFC_TRANSLUCENT;
 				if (sides[lines[i].sidenum[0]].toptexture > 0)
 					lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255;
 				else
@@ -3048,14 +3048,14 @@ static void P_ConvertBinaryMap(void)
 			}
 
 			if (lines[i].flags & ML_EFFECT4)
-				lines[i].args[3] |= 1; //Bustable by pushables
+				lines[i].args[3] |= TMFB_PUSHABLES;
 			if (lines[i].flags & ML_EFFECT5)
 			{
-				lines[i].args[3] |= 2; //Trigger linedef executor
+				lines[i].args[3] |= TMFB_EXECUTOR;
 				lines[i].args[4] = P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS;
 			}
 			if (lines[i].special == 252 && lines[i].flags & ML_NOCLIMB)
-				lines[i].args[4] |= 4; //Bust only from below
+				lines[i].args[4] |= TMFB_ONLYBOTTOM;
 
 			lines[i].special = 254;
 			break;
diff --git a/src/p_spec.c b/src/p_spec.c
index ff6275889ff7a47d5ecdadafa76093d2ccaee7be..9f5eed74a42c738af9c9166de0534b445dd98e19 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -6736,11 +6736,11 @@ void P_SpawnSpecials(boolean fromnetsave)
 				ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL;
 
 				//Visibility settings
-				if (lines[i].args[1] & 1) //Don't render planes
+				if (lines[i].args[1] & TMFV_NOPLANES)
 					ffloorflags &= ~FF_RENDERPLANES;
-				if (lines[i].args[1] & 2) //Don't render sides
+				if (lines[i].args[1] & TMFV_NOSIDES)
 					ffloorflags &= ~FF_RENDERSIDES;
-				if (lines[i].args[1] & 4) //Render insides
+				if (lines[i].args[1] & TMFV_TOGGLEINSIDES)
 				{
 					if (ffloorflags & FF_RENDERPLANES)
 						ffloorflags |= FF_BOTHPLANES;
@@ -6749,26 +6749,26 @@ void P_SpawnSpecials(boolean fromnetsave)
 				}
 
 				//Tangibility settings
-				if (lines[i].args[2] & 1) //Intangible from top
+				if (lines[i].args[2] & TMFT_INTANGIBLETOP)
 					ffloorflags |= FF_REVERSEPLATFORM;
-				if (lines[i].args[2] & 2) //Intangible from bottom
+				if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM)
 					ffloorflags |= FF_PLATFORM;
-				if (lines[i].args[2] & 4) //Don't block player
+				if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER)
 					ffloorflags &= ~FF_BLOCKPLAYER;
-				if (lines[i].args[2] & 8) //Don't block others
+				if (lines[i].args[2] & TMFT_DONTBLOCKOTHERS)
 					ffloorflags &= ~FF_BLOCKOTHERS;
 
 				//Appearance settings
-				if ((lines[i].args[3] & 1) && (ffloorflags & FF_RENDERALL)) //Translucent
+				if ((lines[i].args[3] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) //Translucent
 					ffloorflags |= FF_TRANSLUCENT;
-				if (lines[i].args[3] & 2) //Don't cast shadow
+				if (lines[i].args[3] & TMFA_NOSHADE)
 					ffloorflags |= FF_NOSHADE;
 
 				//Cutting options
 				if (ffloorflags & FF_RENDERALL)
 				{
 					//If translucent or player can enter it, cut inner walls
-					if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & 7))
+					if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & TMFT_VISIBLEFROMINSIDE))
 						ffloorflags |= FF_CUTEXTRA|FF_EXTRA;
 					else
 						ffloorflags |= FF_CUTLEVEL;
@@ -6779,17 +6779,17 @@ 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] & 1))
+				if (!(lines[i].args[1] & TMFW_OPAQUE))
 					ffloorflags |= FF_TRANSLUCENT;
-				if (!(lines[i].args[1] & 2))
+				if (!(lines[i].args[1] & TMFW_NOSIDES))
 					ffloorflags |= FF_RENDERSIDES|FF_ALLSIDES;
-				if (lines[i].args[1] & 4)
+				if (lines[i].args[1] & TMFW_DOUBLESHADOW)
 					ffloorflags |= FF_DOUBLESHADOW;
-				if (lines[i].args[1] & 8)
+				if (lines[i].args[1] & TMFW_COLORMAPONLY)
 					ffloorflags |= FF_COLORMAPONLY;
-				if (!(lines[i].args[1] & 16))
+				if (!(lines[i].args[1] & TMFW_NORIPPLE))
 					ffloorflags |= FF_RIPPLE;
-				if (lines[i].args[1] & 32)
+				if (lines[i].args[1] & TMFW_GOOWATER)
 					ffloorflags |= FF_GOOWATER;
 				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
 				break;
@@ -6819,33 +6819,33 @@ void P_SpawnSpecials(boolean fromnetsave)
 				ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_CRUMBLE;
 
 				//Tangibility settings
-				if (lines[i].args[1] & 1) //Intangible from top
+				if (lines[i].args[1] & TMFT_INTANGIBLETOP)
 					ffloorflags |= FF_REVERSEPLATFORM;
-				if (lines[i].args[1] & 2) //Intangible from bottom
+				if (lines[i].args[1] & TMFT_INTANGIBLEBOTTOM)
 					ffloorflags |= FF_PLATFORM;
-				if (lines[i].args[1] & 4) //Don't block player
+				if (lines[i].args[1] & TMFT_DONTBLOCKPLAYER)
 					ffloorflags &= ~FF_BLOCKPLAYER;
-				if (lines[i].args[1] & 8) //Don't block others
+				if (lines[i].args[1] & TMFT_DONTBLOCKOTHERS)
 					ffloorflags &= ~FF_BLOCKOTHERS;
 
 				//Flags
-				if (lines[i].args[2] & 1) //Translucent
+				if (lines[i].args[2] & TMFC_TRANSLUCENT)
 					ffloorflags |= FF_TRANSLUCENT;
-				if (lines[i].args[2] & 2) //Don't cast shadow
+				if (lines[i].args[2] & TMFC_NOSHADE)
 					ffloorflags |= FF_NOSHADE;
-				if (lines[i].args[2] & 4) //Don't respawn
+				if (lines[i].args[2] & TMFC_NORETURN)
 					ffloorflags |= FF_NORETURN;
-				if (lines[i].args[2] & 16) //Float on water
+				if (lines[i].args[2] & TMFC_FLOATBOB)
 					ffloorflags |= FF_FLOATBOB;
 
 				//If translucent or player can enter it, cut inner walls
-				if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[1] & 7))
+				if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[1] & TMFT_VISIBLEFROMINSIDE))
 					ffloorflags |= FF_CUTEXTRA|FF_EXTRA;
 				else
 					ffloorflags |= FF_CUTLEVEL;
 
 				//If player can enter it, render insides
-				if (lines[i].args[1] & 7)
+				if (lines[i].args[1] & TMFT_VISIBLEFROMINSIDE)
 				{
 					if (ffloorflags & FF_RENDERPLANES)
 						ffloorflags |= FF_BOTHPLANES;
@@ -6854,7 +6854,7 @@ void P_SpawnSpecials(boolean fromnetsave)
 				}
 
 				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
-				if (lines[i].args[2] & 8) //Air bobbing
+				if (lines[i].args[2] & TMFC_AIRBOB)
 					P_AddAirbob(lines[i].frontsector, lines + i, 16*FRACUNIT, false, false, false);
 				break;
 
@@ -6918,11 +6918,11 @@ void P_SpawnSpecials(boolean fromnetsave)
 				ffloorflags = FF_EXISTS|FF_RENDERALL|FF_CUTEXTRA|FF_EXTRA|FF_CUTSPRITES;
 
 				//Visibility settings
-				if (lines[i].args[1] & 1) //Don't render planes
+				if (lines[i].args[1] & TMFV_NOPLANES)
 					ffloorflags &= ~FF_RENDERPLANES;
-				if (lines[i].args[1] & 2) //Don't render sides
+				if (lines[i].args[1] & TMFV_NOSIDES)
 					ffloorflags &= ~FF_RENDERSIDES;
-				if (!(lines[i].args[1] & 4)) //Render insides
+				if (!(lines[i].args[1] & TMFV_TOGGLEINSIDES))
 				{
 					if (ffloorflags & FF_RENDERPLANES)
 						ffloorflags |= FF_BOTHPLANES;
@@ -6931,9 +6931,9 @@ void P_SpawnSpecials(boolean fromnetsave)
 				}
 
 				//Appearance settings
-				if ((lines[i].args[2] & 1) && (ffloorflags & FF_RENDERALL)) //Translucent
+				if ((lines[i].args[2] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL))
 					ffloorflags |= FF_TRANSLUCENT;
-				if (lines[i].args[2] & 2) //Don't cast shadow
+				if (lines[i].args[2] & TMFA_NOSHADE)
 					ffloorflags |= FF_NOSHADE;
 
 				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
@@ -6945,9 +6945,9 @@ void P_SpawnSpecials(boolean fromnetsave)
 
 			case 250: // Mario Block
 				ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL|FF_CUTLEVEL|FF_MARIO;
-				if (lines[i].args[1] & 1) //Brick block
+				if (lines[i].args[1] & TMFM_BRICK)
 					ffloorflags |= FF_SHATTERBOTTOM;
-				if (lines[i].args[1] & 2) // Invisible
+				if (lines[i].args[1] & TMFM_INVISIBLE)
 					ffloorflags &= ~(FF_SOLID|FF_RENDERALL|FF_CUTLEVEL);
 
 				P_AddFakeFloorsByLine(i, ffloorflags, secthinkers);
@@ -6969,13 +6969,13 @@ void P_SpawnSpecials(boolean fromnetsave)
 				//Bustable type
 				switch (lines[i].args[1])
 				{
-					case 0:
+					case TMFB_TOUCH:
 						ffloorflags |= FF_SHATTER;
 						break;
-					case 1:
+					case TMFB_SPIN:
 						ffloorflags |= FF_SPINBUST;
 						break;
-					case 3:
+					case TMFB_STRONG:
 						ffloorflags |= FF_STRONGBUST;
 						break;
 					default:
@@ -6985,7 +6985,7 @@ void P_SpawnSpecials(boolean fromnetsave)
 				if (lines[i].args[2])
 					ffloorflags |= FF_TRANSLUCENT;
 
-				if (lines[i].args[2] & 4)
+				if (lines[i].args[3] & TMFB_ONLYBOTTOM)
 					ffloorflags |= FF_SHATTERBOTTOM;
 
 				if (!(ffloorflags & FF_SHATTER) || ffloorflags & FF_SHATTERBOTTOM)
diff --git a/src/p_spec.h b/src/p_spec.h
index d756f1942cd5df09d580fed144ba56e7202445db..6d13e9da7416ee1212e598519491ef0fcd903c86 100644
--- a/src/p_spec.h
+++ b/src/p_spec.h
@@ -21,6 +21,69 @@ extern mobj_t *skyboxmo[2]; // current skybox mobjs: 0 = viewpoint, 1 = centerpo
 extern mobj_t *skyboxviewpnts[16]; // array of MT_SKYBOX viewpoint mobjs
 extern mobj_t *skyboxcenterpnts[16]; // array of MT_SKYBOX centerpoint mobjs
 
+//FOF flags
+typedef enum
+{
+	TMFV_NOPLANES      = 1,
+	TMFV_NOSIDES       = 1<<1,
+	TMFV_TOGGLEINSIDES = 1<<2,
+} textmapfofvisibility_t;
+
+typedef enum
+{
+	TMFT_INTANGIBLETOP    = 1,
+	TMFT_INTANGIBLEBOTTOM = 1<<1,
+	TMFT_DONTBLOCKPLAYER  = 1<<2,
+	TMFT_VISIBLEFROMINSIDE = (TMFT_INTANGIBLETOP|TMFT_INTANGIBLEBOTTOM|TMFT_DONTBLOCKPLAYER),
+	TMFT_DONTBLOCKOTHERS  = 1<<3,
+} textmapfoftangibility_t;
+
+typedef enum
+{
+	TMFA_TRANSLUCENT = 1,
+	TMFA_NOSHADE     = 1<<1,
+} textmapfofappearance_t;
+
+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,
+} textmapfofwater_t;
+
+typedef enum
+{
+	TMFC_TRANSLUCENT = 1,
+	TMFC_NOSHADE     = 1<<1,
+	TMFC_NORETURN    = 1<<2,
+	TMFC_AIRBOB      = 1<<3,
+	TMFC_FLOATBOB    = 1<<4,
+} textmapfofcrumbling_t;
+
+typedef enum
+{
+	TMFM_BRICK     = 1,
+	TMFM_INVISIBLE = 1<<1,
+} textmapfofmario_t;
+
+typedef enum
+{
+	TMFB_TOUCH,
+	TMFB_SPIN,
+	TMFB_REGULAR,
+	TMFB_STRONG,
+} textmapfofbusttype_t;
+
+typedef enum
+{
+	TMFB_PUSHABLES   = 1,
+	TMFB_EXECUTOR    = 1<<1,
+	TMFB_ONLYBOTTOM  = 1<<2,
+} textmapfofbustflags_t;
+
 // GETSECSPECIAL (specialval, section)
 //
 // Pulls out the special # from a particular section.
diff --git a/src/p_user.c b/src/p_user.c
index c1dc2676d5e8f2ee8234db7be3389b5ffc638a77..8accce238de7af8421adc30b6a91197cd20a6131 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -2663,7 +2663,7 @@ static void P_CheckBustableBlocks(player_t *player)
 					EV_CrumbleChain(NULL, rover); // node->m_sector
 
 					// Run a linedef executor??
-					if (rover->master->args[3] & 2)
+					if (rover->master->args[3] & TMFB_EXECUTOR)
 						P_LinedefExecute((INT16)(rover->master->args[4]), player->mo, node->m_sector);
 
 					goto bustupdone;
@@ -12213,7 +12213,7 @@ void P_PlayerThink(player_t *player)
 		player->powers[pw_nocontrol]--;
 	else
 		player->powers[pw_nocontrol] = 0;
-	
+
 	//pw_super acts as a timer now
 	if (player->powers[pw_super]
 	&& (player->mo->state < &states[S_PLAY_SUPER_TRANS1]