diff --git a/src/dehacked.c b/src/dehacked.c
index 18c4077beb6a7e53e1692f63aa1becc26496efef..b598d40ac73586dec6ec9d344d3555b8cec4b30d 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -8900,6 +8900,7 @@ static const char *const GAMETYPERULE_LIST[] = {
 	"NOTITLECARD",
 	"OVERTIME",
 	"HURTMESSAGES",
+	"SPAWNINVUL",
 	NULL
 };
 
diff --git a/src/doomstat.h b/src/doomstat.h
index 6a708dc9bad5c6f0c8f31544ecdf17299ffc0cf6..2e3fe9b36a3781e7689d51026ec62319103bec92 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -386,7 +386,7 @@ enum GameType
 };
 // If you alter this list, update dehacked.c, MISC_ChangeGameTypeMenu in m_menu.c, and Gametype_Names in g_game.c
 
-// Game type rules
+// Gametype rules
 enum GameTypeRules
 {
 	GTR_CAMPAIGN         = 1,     // Linear Co-op map progression, don't allow random maps
@@ -417,6 +417,7 @@ enum GameTypeRules
 	GTR_NOTITLECARD      = 1<<25, // Don't show the title card
 	GTR_OVERTIME         = 1<<26, // Allow overtime
 	GTR_HURTMESSAGES     = 1<<27, // Hit and death messages
+	GTR_SPAWNINVUL       = 1<<28, // Babysitting deterrent
 };
 
 // String names for gametypes
diff --git a/src/g_game.c b/src/g_game.c
index 32d69b301b8322385132bb1652cbb9c6b6ab8bbc..b39205f504f02b897240435663607d3c2b768073 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -3197,22 +3197,22 @@ UINT32 gametypedefaultrules[NUMGAMETYPES] =
 	// Co-op
 	GTR_CAMPAIGN|GTR_LIVES|GTR_SPAWNENEMIES|GTR_ALLOWEXIT|GTR_EMERALDHUNT|GTR_EMERALDTOKENS|GTR_SPECIALSTAGES,
 	// Competition
-	GTR_RACE|GTR_LIVES|GTR_SPAWNENEMIES|GTR_EMERALDTOKENS|GTR_ALLOWEXIT,
+	GTR_RACE|GTR_LIVES|GTR_SPAWNENEMIES|GTR_EMERALDTOKENS|GTR_SPAWNINVUL|GTR_ALLOWEXIT,
 	// Race
-	GTR_RACE|GTR_SPAWNENEMIES|GTR_ALLOWEXIT,
+	GTR_RACE|GTR_SPAWNENEMIES|GTR_SPAWNINVUL|GTR_ALLOWEXIT,
 
 	// Match
-	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_MATCHEMERALDS|GTR_PITYSHIELD|GTR_DEATHPENALTY,
+	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_MATCHEMERALDS|GTR_SPAWNINVUL|GTR_PITYSHIELD|GTR_DEATHPENALTY,
 	// Team Match
-	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_TEAMS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_PITYSHIELD,
+	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_TEAMS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_SPAWNINVUL|GTR_PITYSHIELD,
 
 	// Tag
-	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED,
+	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_SPAWNINVUL,
 	// Hide and Seek
-	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED,
+	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_TAG|GTR_SPECTATORS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_HIDETIME|GTR_BLINDFOLDED|GTR_SPAWNINVUL,
 
 	// CTF
-	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_TEAMS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_MATCHEMERALDS|GTR_TEAMFLAGS|GTR_PITYSHIELD,
+	GTR_RINGSLINGER|GTR_FIRSTPERSON|GTR_SPECTATORS|GTR_TEAMS|GTR_POINTLIMIT|GTR_TIMELIMIT|GTR_MATCHEMERALDS|GTR_TEAMFLAGS|GTR_SPAWNINVUL|GTR_PITYSHIELD,
 };
 
 //
diff --git a/src/p_mobj.c b/src/p_mobj.c
index a10e6b3baa256d7c40a9aa1d6efee8770d1d080a..d841ede0542729c85e84ebd169fa6f688580519e 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -11297,7 +11297,7 @@ void P_SpawnPlayer(INT32 playernum)
 			p->skincolor = skincolor_blueteam;
 	}
 
-	if ((netgame || multiplayer) && (gametype != GT_COOP || leveltime) && !p->spectator && !(maptol & TOL_NIGHTS))
+	if ((netgame || multiplayer) && ((gametyperules & GTR_SPAWNINVUL) || leveltime) && !p->spectator && !(maptol & TOL_NIGHTS))
 		p->powers[pw_flashing] = flashingtics-1; // Babysitting deterrent
 
 	mobj = P_SpawnMobj(0, 0, 0, MT_PLAYER);