diff --git a/extras/conf/D3R-Config.cfg b/extras/conf/D3R-Config.cfg index 0482dc439..7db8d8d99 100644 --- a/extras/conf/D3R-Config.cfg +++ b/extras/conf/D3R-Config.cfg @@ -139,7 +139,7 @@ skins // Gametypes gametypes { - -1 = "Single Player"; + -1 = "Grand Prix"; 0 = "Race"; 1 = "Battle"; } @@ -5113,6 +5113,7 @@ thingtypes height = 92; } } + waypoints { color = 4; // Red @@ -5161,6 +5162,58 @@ thingtypes fixedrotation = 1; } } + + duel + { + color = 4; // Red + arrow = 1; + title = "Duel-Only"; + sprite = "SPBMA2A8"; + width = 16; + height = 32; + flags1text = "[1] Spawn in all modes"; + + 2050 + { + title = "Duel Bomb"; + } + + 2051 + { + title = "Banana"; + sprite = "BANAA2A8"; + } + + 2052 + { + title = "Eggman Item"; + sprite = "FITMA0"; + } + + 2053 + { + title = "Proximity Mine"; + sprite = "SSMNA0"; + } + + 2054 + { + title = "Land Mine"; + sprite = "LNDMA0"; + } + + 2055 + { + title = "Hyudoro"; + sprite = "HYUUA2A8"; + } + + 2056 + { + title = "Drop Target"; + sprite = "DTRGA0"; + } + } } //Default things filters diff --git a/src/doomstat.h b/src/doomstat.h index dc6370ece..dc94ed0e6 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -669,6 +669,7 @@ extern boolean thwompsactive; extern UINT8 lastLowestLap; extern SINT8 spbplace; extern boolean rainbowstartavailable; +extern boolean inDuel; extern tic_t bombflashtimer; // Used to avoid causing seizures if multiple mines explode close to you :) extern boolean legitimateexit; diff --git a/src/g_game.c b/src/g_game.c index 181aa0697..3e6d3108d 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -312,6 +312,7 @@ boolean thwompsactive; // Thwomps activate on lap 2 UINT8 lastLowestLap; // Last lowest lap, for activating race lap executors SINT8 spbplace; // SPB exists, give the person behind better items boolean rainbowstartavailable; // Boolean, keeps track of if the rainbow start was gotten +boolean inDuel; // Boolean, keeps track of if it is a 1v1 // Client-sided, unsynched variables (NEVER use in anything that needs to be synced with other players) tic_t bombflashtimer = 0; // Cooldown before another FlashPal can be intialized by a bomb exploding near a displayplayer. Avoids seizures. diff --git a/src/info.c b/src/info.c index a5fe03bf2..1d95ad000 100644 --- a/src/info.c +++ b/src/info.c @@ -23310,7 +23310,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_EGGMANITEM - -1, // doomednum + 2052, // doomednum S_EGGMANITEM1, // spawnstate 2, // spawnhealth S_NULL, // seestate @@ -23364,7 +23364,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_BANANA - -1, // doomednum + 2051, // doomednum S_BANANA, // spawnstate 2, // spawnhealth S_NULL, // seestate @@ -23553,7 +23553,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_SSMINE - -1, // doomednum + 2053, // doomednum S_SSMINE_AIR1, // spawnstate 1, // spawnhealth S_NULL, // seestate @@ -23688,7 +23688,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_LANDMINE - -1, // doomednum + 2054, // doomednum S_LANDMINE, // spawnstate 2, // spawnhealth S_NULL, // seestate @@ -23715,7 +23715,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_DROPTARGET - -1, // doomednum + 2056, // doomednum S_DROPTARGET, // spawnstate 3, // spawnhealth S_NULL, // seestate @@ -24066,7 +24066,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = }, { // MT_HYUDORO - -1, // doomednum + 2055, // doomednum S_HYUDORO, // spawnstate 1000, // spawnhealth S_NULL, // seestate diff --git a/src/k_kart.c b/src/k_kart.c index 5aa1aaeba..0b391d94d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -78,6 +78,9 @@ void K_TimerInit(void) numPlayers++; } + // 1v1 activates DUEL rules! + inDuel = (numPlayers == 2); + if (numPlayers >= 2) { rainbowstartavailable = true; diff --git a/src/p_mobj.c b/src/p_mobj.c index 9b08f0e75..4006d399d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11548,6 +11548,21 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i) return false; } break; + //case MT_DUELBOMB: + case MT_BANANA: + case MT_EGGMANITEM: + case MT_SSMINE: + case MT_LANDMINE: + case MT_HYUDORO: + case MT_DROPTARGET: + { + // Duel objects. + // Normally only spawn when placed by the map in Duels, + // but can be forced to always spawn with the Extra flag. + if (inDuel == false && !(mthing->options & MTF_EXTRA)) + return false; + } + break; default: break; } diff --git a/src/p_saveg.c b/src/p_saveg.c index 233056f21..d050da4b1 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -4576,6 +4576,7 @@ static void P_NetArchiveMisc(boolean resending) WRITEUINT8(save_p, lastLowestLap); WRITESINT8(save_p, spbplace); WRITEUINT8(save_p, rainbowstartavailable); + WRITEUINT8(save_p, inDuel); WRITEUINT32(save_p, introtime); WRITEUINT32(save_p, starttime); @@ -4733,6 +4734,7 @@ static inline boolean P_NetUnArchiveMisc(boolean reloading) lastLowestLap = READUINT8(save_p); spbplace = READSINT8(save_p); rainbowstartavailable = (boolean)READUINT8(save_p); + inDuel = (boolean)READUINT8(save_p); introtime = READUINT32(save_p); starttime = READUINT32(save_p);