diff --git a/Source/d_main.c b/Source/d_main.c index c3551470..990ee47c 100644 --- a/Source/d_main.c +++ b/Source/d_main.c @@ -1773,6 +1773,11 @@ void D_DoomMain(void) if (M_CheckParm ("-deathmatch")) deathmatch = 1; + // Start a deathmatch 3.0 game. Weapons stay in place and all items respawn + // after 30 seconds. + if (M_CheckParm ("-dm3")) + deathmatch = 3; + switch ( gamemode ) { case retail: diff --git a/Source/p_mobj.c b/Source/p_mobj.c index 7487fff5..773480ec 100644 --- a/Source/p_mobj.c +++ b/Source/p_mobj.c @@ -1005,7 +1005,8 @@ void P_RespawnSpecials (void) mapthing_t* mthing; int i; - if (deathmatch != 2 || // only respawn items in deathmatch + // AX: deathmatch 3 is a Crispy-specific change + if ((deathmatch != 2 && deathmatch != 3) || // only respawn items in deathmatch iquehead == iquetail || // nothing left to respawn? leveltime - itemrespawntime[iquetail] < 30*35) // wait 30 seconds return; diff --git a/setup/multiplayer.c b/setup/multiplayer.c index 4b8147d0..40a013f5 100644 --- a/setup/multiplayer.c +++ b/setup/multiplayer.c @@ -91,7 +91,7 @@ static const char *rekkr_skills[] = }; static const char *gamemodes[] = { "Co-operative", "Deathmatch", - "Deathmatch 2.0" }; + "Deathmatch 2.0", "Deathmatch 3.0" }; static char *wads[NUM_WADS]; static char *extra_params[NUM_EXTRA_PARAMS]; @@ -223,6 +223,10 @@ static void StartGame(int multiplayer) { AddCmdLineParameter(exec, "-altdeath"); } + else if (deathmatch == 3) // AX: this is a Crispy-specific change + { + AddCmdLineParameter(exec, "-dm3"); + } if (timer > 0) { @@ -618,7 +622,7 @@ static txt_window_action_t *WadWindowAction(void) static txt_dropdown_list_t *GameTypeDropdown(void) { - return TXT_NewDropdownList(&deathmatch, gamemodes, 3); + return TXT_NewDropdownList(&deathmatch, gamemodes, 4); } // "Start game" menu. This is used for the start server window