diff --git a/src/deh_tables.c b/src/deh_tables.c
index 2ccf80e145e775d64b7ba584174b130048a0c364..a3b6f2334d9a04cf3254e61cd5c0d645cf2f675c 100644
--- a/src/deh_tables.c
+++ b/src/deh_tables.c
@@ -5315,11 +5315,6 @@ struct int_const_s const INT_CONST[] = {
 	//// Masks
 	{"DMG_CANHURTSELF",DMG_CANHURTSELF},
 	{"DMG_DEATHMASK",DMG_DEATHMASK},
-	// For P_SuperReady
-	{"SUPERREADY_CLASSIC",SUPERREADY_CLASSIC},
-	{"SUPERREADY_TRANSFORM",SUPERREADY_TRANSFORM},
-	{"SUPERREADY_DETRANSFORM",SUPERREADY_DETRANSFORM},
-	{"NUMSUPERREADY",NUMSUPERREADY},
 
 	// Intermission types
 	{"int_none",int_none},
diff --git a/src/lua_baselib.c b/src/lua_baselib.c
index a5162837efa458e4764320682794e408cf359068..ee5f934a75aacbe455cf8068e79a7bb9964ca61d 100644
--- a/src/lua_baselib.c
+++ b/src/lua_baselib.c
@@ -1712,14 +1712,12 @@ static int lib_pResetCamera(lua_State *L)
 static int lib_pSuperReady(lua_State *L)
 {
 	player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
-	superready_t type = luaL_optinteger(L, 2, SUPERREADY_CLASSIC);
+	boolean transform = (boolean)lua_opttrueboolean(L, 2);
 	//HUDSAFE
 	INLEVEL
 	if (!player)
 		return LUA_ErrInvalid(L, "player_t");
-	if (type < 0 || type >= NUMSUPERREADY)
-		return luaL_error(L, "superready type %d out of range (0 - %d)", type, NUMSUPERREADY-1);
-	lua_pushboolean(L, P_SuperReady(player, type));
+	lua_pushboolean(L, P_SuperReady(player, transform));
 	return 1;
 }
 
diff --git a/src/p_local.h b/src/p_local.h
index da8956ae1783b2289ca621ada9e2b5db2fe174ed..a4ec0262e954a8db2045bf075b792c30dddd4e2c 100644
--- a/src/p_local.h
+++ b/src/p_local.h
@@ -113,14 +113,6 @@ typedef struct camera_s
 	fixed_t momx, momy, momz;
 } camera_t;
 
-typedef enum
-{
-	SUPERREADY_CLASSIC, // Two-button play mode, when Spin and Shield are bound to the same button (pressed on the same tic)
-	SUPERREADY_TRANSFORM,
-	SUPERREADY_DETRANSFORM,
-	NUMSUPERREADY
-} superready_t;
-
 extern camera_t camera, camera2;
 extern consvar_t cv_cam_dist, cv_cam_still, cv_cam_height;
 extern consvar_t cv_cam_speed, cv_cam_rotate, cv_cam_rotspeed, cv_cam_turnmultiplier, cv_cam_orbit, cv_cam_adjust;
@@ -211,7 +203,7 @@ mobj_t *P_LookForEnemies(player_t *player, boolean nonenemies, boolean bullet);
 void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius);
 void P_Earthquake(mobj_t *inflictor, mobj_t *source, fixed_t radius);
 boolean P_HomingAttack(mobj_t *source, mobj_t *enemy); /// \todo doesn't belong in p_user
-boolean P_SuperReady(player_t *player, superready_t type);
+boolean P_SuperReady(player_t *player, boolean transform);
 void P_DoJump(player_t *player, boolean soundandstate, boolean allowflip);
 void P_DoSpinDashDust(player_t *player);
 #define P_AnalogMove(player) (P_ControlStyle(player) == CS_LMAOGALOG)
diff --git a/src/p_user.c b/src/p_user.c
index 30650b5bb7cd39798b9295242d8fdc3aefd024e4..ec8894e6e726f08958fc4435558baf72d043b91c 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -4431,47 +4431,18 @@ static void P_DoSuperStuff(player_t *player)
 //
 // Returns true if player is ready to transform or detransform
 //
-boolean P_SuperReady(player_t *player, superready_t type)
-{
-	switch (type) // Transformation-type-specific checks
-	{
-		case SUPERREADY_CLASSIC:
-			// Pressed Spin and Shield on the same tic? Then you've probably bound them to the same button,
-			// so let's match the earlier Spin-only button behaviour to still support two-button play
-			if (!player->powers[pw_super]
-			&& !player->powers[pw_invulnerability]
-			&& !player->powers[pw_tailsfly]
-			&& (player->charflags & SF_SUPER)
-			&& (player->pflags & PF_JUMPED)
-			&& !(player->powers[pw_shield] & SH_NOSTACK)
-			&& !(maptol & TOL_NIGHTS)
-			&& ALL7EMERALDS(emeralds)
-			&& (player->rings >= 50))
-				return true;
-			else
-				return false;
-			break;
-
-		case SUPERREADY_TRANSFORM:
-			// Turning Super by pressing Shield?
-			if (player->powers[pw_super]
-			|| !ALL7EMERALDS(emeralds)
-			|| !(player->rings >= 50))
-				return false;
-			break;
-
-		case SUPERREADY_DETRANSFORM:
-			// Reverting from Super by pressing Shield?
-			if ((player->powers[pw_super] < TICRATE*3/2) // No spamming the transformation sound!
-			|| !G_CoopGametype()) // No turning back in competitive!
-				return false;
-			break;
-
-		default: // "type" is an enum, so having a case for every enum value pleases the compiler
-			break;
-	}
+boolean P_SuperReady(player_t *player, boolean transform)
+{
+	if (!transform &&
+	(player->powers[pw_super] < TICRATE*3/2
+	|| !G_CoopGametype())) // No turning back in competitive!
+		return false;
+	else if (transform
+	&& (player->powers[pw_super]
+	|| !ALL7EMERALDS(emeralds)
+	|| !(player->rings >= 50)))
+		return false;
 
-	// These checks apply to both SUPERREADY_TRANSFORM and SUPERREADY_DETRANSFORM
 	if (player->mo
 	&& !player->powers[pw_tailsfly]
 	&& !player->powers[pw_carry]
@@ -5335,7 +5306,8 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd, boolean spinshieldhac
 			;
 		else if (cmd->buttons & BT_SPIN)
 		{
-			if (spinshieldhack && !(player->pflags & PF_SPINDOWN) && P_SuperReady(player, SUPERREADY_CLASSIC))
+			if (spinshieldhack && !(player->pflags & PF_SPINDOWN) && P_SuperReady(player, true)
+			&& !player->powers[pw_invulnerability] && !(player->powers[pw_shield] & SH_NOSTACK)) // These two checks are no longer in P_SuperReady
 			{
 				// If you're using two-button play, can turn Super and aren't already,
 				// and you don't have a shield, then turn Super!
@@ -8827,11 +8799,11 @@ void P_MovePlayer(player_t *player)
 		if ((cmd->buttons & BT_SHIELD) && !(player->pflags & PF_SHIELDDOWN) && !spinshieldhack)
 		{
 			// Transform into super if we can!
-			if (P_SuperReady(player, SUPERREADY_TRANSFORM))
+			if (P_SuperReady(player, true))
 				P_DoSuperTransformation(player, false);
 
 			// Detransform from super if we can!
-			else if (P_SuperReady(player, SUPERREADY_DETRANSFORM))
+			else if (P_SuperReady(player, false))
 				P_DoSuperDetransformation(player);
 		}
 	}