diff --git a/src/dehacked.c b/src/dehacked.c
index 9b4656627bc262fa50bd05036af499cbefd3ac1c..dedeeb87f7b0d4fcb22f5b50a08c66d7b5065272 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -8874,6 +8874,7 @@ static const char *const GAMETYPERULE_LIST[] = {
 	"PITYSHIELD",
 	"DEATHPENALTY",
 	"NOSPECTATORSPAWN",
+	"DEATHMATCHSTARTS",
 	"SPECIALSTAGES",
 	"EMERALDTOKENS",
 	"EMERALDHUNT",
diff --git a/src/doomstat.h b/src/doomstat.h
index 6730254a288b22f4c755547c1dcb99d9973dce0a..d24de58f1861cba5beeaad90375e753d8b56416d 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -411,18 +411,19 @@ enum GameTypeRules
 	GTR_PITYSHIELD       = 1<<14, // Award pity shield
 	GTR_DEATHPENALTY     = 1<<15, // Death score penalty
 	GTR_NOSPECTATORSPAWN = 1<<16, // For use with GTR_SPECTATORS - spawn in the map instead of with the spectators
-	GTR_SPECIALSTAGES    = 1<<17, // Allow special stages
-	GTR_EMERALDTOKENS    = 1<<18, // Spawn emerald tokens
-	GTR_EMERALDHUNT      = 1<<19, // Emerald Hunt
-	GTR_SPAWNENEMIES     = 1<<20, // Spawn enemies
-	GTR_ALLOWEXIT        = 1<<21, // Allow exit sectors
-	GTR_CAMPAIGN         = 1<<22, // Linear Co-op map progression. Don't allow random maps.
-	GTR_NOGAMEEND        = 1<<23, // Don't end the game. That is, wrap around the maps instead of starting the ending.
-	GTR_ROUNDENDMESSAGE  = 1<<24, // Prints "The round has ended." into the console
-	GTR_NOTITLECARD      = 1<<25, // Don't show the title card
-	GTR_POINTLIMIT       = 1<<26, // Ringslinger point limit
-	GTR_TIMELIMIT        = 1<<27, // Ringslinger time limit
-	GTR_OVERTIME         = 1<<28, // Allow overtime
+	GTR_DEATHMATCHSTARTS = 1<<17, // Use deathmatch starts
+	GTR_SPECIALSTAGES    = 1<<18, // Allow special stages
+	GTR_EMERALDTOKENS    = 1<<19, // Spawn emerald tokens
+	GTR_EMERALDHUNT      = 1<<20, // Emerald Hunt
+	GTR_SPAWNENEMIES     = 1<<21, // Spawn enemies
+	GTR_ALLOWEXIT        = 1<<22, // Allow exit sectors
+	GTR_CAMPAIGN         = 1<<23, // Linear Co-op map progression. Don't allow random maps.
+	GTR_NOGAMEEND        = 1<<24, // Don't end the game. That is, wrap around the maps instead of starting the ending.
+	GTR_ROUNDENDMESSAGE  = 1<<25, // Prints "The round has ended." into the console
+	GTR_NOTITLECARD      = 1<<26, // Don't show the title card
+	GTR_POINTLIMIT       = 1<<27, // Ringslinger point limit
+	GTR_TIMELIMIT        = 1<<28, // Ringslinger time limit
+	GTR_OVERTIME         = 1<<29, // Allow overtime
 };
 
 // String names for gametypes
diff --git a/src/g_game.c b/src/g_game.c
index 0c085c84e9eae2025988f78935298b5d23e634b1..9c51e474107741ab73063dee671e12e8f47735cf 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -2583,7 +2583,7 @@ void G_SpawnPlayer(INT32 playernum, boolean starpost)
 
 	// -- DM/Tag/CTF-spectator/etc --
 	// Order: DM->CTF->Coop
-	else if (gametype == GT_MATCH || gametype == GT_TEAMMATCH || gametype == GT_CTF
+	else if ((gametyperules & GTR_DEATHMATCHSTARTS) || gametype == GT_MATCH || gametype == GT_TEAMMATCH || gametype == GT_CTF
 	 || ((gametype == GT_TAG || gametype == GT_HIDEANDSEEK) && !(players[playernum].pflags & PF_TAGIT)))
 	{
 		if (!(spawnpoint = G_FindMatchStart(playernum)) // find a DM start