diff --git a/src/doomstat.h b/src/doomstat.h
index 877f5b50b72fda0b81838200562a88bea305c83e..b25f8b846b41f7c863521c9986a3e00f126f4f08 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -466,7 +466,8 @@ extern recorddata_t *mainrecords[NUMMAPS];
 #define MV_ALLEMERALDS  4
 #define MV_ULTIMATE     8
 #define MV_PERFECT     16
-#define MV_MAX         31 // used in gamedata check
+#define MV_PERFECTRA   32
+#define MV_MAX         63 // used in gamedata check, update whenever MV's are added
 #define MV_MP         128
 extern UINT8 mapvisited[NUMMAPS];
 
diff --git a/src/g_game.c b/src/g_game.c
index b754e88ae82c77603abc6c061c6fcf22c9eb9774..9b0e9d408efcc7ddc0f3a9ab5ac0810a38d5b696 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -3233,9 +3233,13 @@ static void G_UpdateVisited(void)
 		// eh, what the hell
 		if (ultimatemode)
 			mapvisited[gamemap-1] |= MV_ULTIMATE;
-		// may seem incorrect but IS possible in what the main game uses as special stages, and nummaprings will be -1 in NiGHTS
+		// may seem incorrect but IS possible in what the main game uses as mp special stages, and nummaprings will be -1 in NiGHTS
 		if (nummaprings > 0 && players[consoleplayer].rings >= nummaprings)
+		{
 			mapvisited[gamemap-1] |= MV_PERFECT;
+			if (modeattacking)
+				mapvisited[gamemap-1] |= MV_PERFECTRA;
+		}
 		if (!spec)
 		{
 			// not available to special stages because they can only really be done in one order in an unmodified game, so impossible for first six and trivial for seventh
diff --git a/src/m_menu.c b/src/m_menu.c
index edba61f30f4db47d750394494e21cb6ba1a18882..ae3204726d460deb8b43bf8fb8dba4e537f365c5 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -9233,7 +9233,7 @@ void M_DrawTimeAttackMenu(void)
 
 		V_DrawString(104-72, 73+lsheadingheight/2, V_YELLOWMAP, "RINGS:");
 
-		V_DrawRightAlignedString(104+64, 73+lsheadingheight/2, V_ALLOWLOWERCASE|((mapvisited[cv_nextmap.value-1] & MV_PERFECT) ? V_YELLOWMAP : 0), beststr);
+		V_DrawRightAlignedString(104+64, 73+lsheadingheight/2, V_ALLOWLOWERCASE|((mapvisited[cv_nextmap.value-1] & MV_PERFECTRA) ? V_YELLOWMAP : 0), beststr);
 
 		V_DrawRightAlignedString(104+72, 83+lsheadingheight/2, V_ALLOWLOWERCASE, reqrings);
 	}