diff --git a/src/doomstat.h b/src/doomstat.h index 4ba7cc665..3a71975c9 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -355,8 +355,6 @@ extern UINT16 emeralds; extern INT32 nummaprings; // keep track of spawned rings/coins extern INT32 nummapboxes, numgotboxes; // keep track of spawned battle mode items -extern UINT8 maptargets, numtargets; // Keep track of spawend Battle Mode targets -extern boolean targetsspawned; // have targets been spawned already? /** Time attack information, currently a very small structure. */ diff --git a/src/g_game.c b/src/g_game.c index ba9382c37..a3be67bb7 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -189,11 +189,6 @@ INT32 nummaprings = 0; INT32 nummapboxes = 0; INT32 numgotboxes = 0; -// Break the Capsules counters for Battle Mode! -UINT8 maptargets = 0; // targets in map -UINT8 numtargets = 0; // targets busted -boolean targetsspawned = false; // have targets been spawned already? - // Elminates unnecessary searching. boolean CheckForBustableBlocks; boolean CheckForBouncySector; @@ -2867,7 +2862,7 @@ void G_SpawnPlayer(INT32 playernum, boolean starpost) } // -- Record Attack -- - if (modeattacking) + if (modeattacking || battlecapsules) spawnpoint = playerstarts[0]; // -- CTF -- diff --git a/src/k_battle.c b/src/k_battle.c index abf1d4540..085b63e52 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -14,6 +14,13 @@ #include "r_defs.h" // MAXFFLOORS #include "info.h" +// Capsules mode enabled for this map? +boolean battlecapsules = false; + +// Capsule counters +UINT8 maptargets = 0; // Capsules in map +UINT8 numtargets = 0; // Capsules busted + boolean K_IsPlayerWanted(player_t *player) { UINT8 i; @@ -216,7 +223,8 @@ void K_CheckBumpers(void) if (numingame <= 1) { - K_SpawnBattleCapsules(); + if (!battlecapsules) + D_MapChange(gamemap, gametype, encoremode, true, 0, false, false); return; } @@ -300,7 +308,7 @@ void K_SpawnBattleCapsules(void) UINT8 n = 0; size_t i; - if (targetsspawned) + if (battlecapsules) return; if (!G_BattleGametype()) @@ -498,5 +506,5 @@ void K_SpawnBattleCapsules(void) } } - targetsspawned = true; + battlecapsules = true; } diff --git a/src/k_battle.h b/src/k_battle.h index 04c413d68..2a3f7c1c2 100644 --- a/src/k_battle.h +++ b/src/k_battle.h @@ -4,6 +4,9 @@ #include "doomtype.h" #include "d_player.h" +extern boolean battlecapsules; +extern UINT8 maptargets, numtargets; + boolean K_IsPlayerWanted(player_t *player); void K_CalculateBattleWanted(void); void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount); diff --git a/src/k_kart.c b/src/k_kart.c index 8e9d89299..1aaf6769a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6715,6 +6715,8 @@ static patch_t *kp_lapstickernarrow; static patch_t *kp_splitlapflag; static patch_t *kp_bumpersticker; static patch_t *kp_bumperstickerwide; +static patch_t *kp_capsulesticker; +static patch_t *kp_capsulestickerwide; static patch_t *kp_karmasticker; static patch_t *kp_splitkarmabomb; static patch_t *kp_timeoutsticker; @@ -6743,6 +6745,7 @@ static patch_t *kp_speedometerlabel[4]; static patch_t *kp_rankbumper; static patch_t *kp_tinybumper[2]; static patch_t *kp_ranknobumpers; +static patch_t *kp_rankcapsule; static patch_t *kp_battlewin; static patch_t *kp_battlecool; @@ -6811,6 +6814,8 @@ void K_LoadKartHUDGraphics(void) kp_splitlapflag = W_CachePatchName("K_SPTLAP", PU_HUDGFX); kp_bumpersticker = W_CachePatchName("K_STBALN", PU_HUDGFX); kp_bumperstickerwide = W_CachePatchName("K_STBALW", PU_HUDGFX); + kp_capsulesticker = W_CachePatchName("K_STCAPN", PU_HUDGFX); + kp_capsulestickerwide = W_CachePatchName("K_STCAPW", PU_HUDGFX); kp_karmasticker = W_CachePatchName("K_STKARM", PU_HUDGFX); kp_splitkarmabomb = W_CachePatchName("K_SPTKRM", PU_HUDGFX); kp_timeoutsticker = W_CachePatchName("K_STTOUT", PU_HUDGFX); @@ -6935,6 +6940,7 @@ void K_LoadKartHUDGraphics(void) kp_tinybumper[0] = W_CachePatchName("K_BLNA", PU_HUDGFX); kp_tinybumper[1] = W_CachePatchName("K_BLNB", PU_HUDGFX); kp_ranknobumpers = W_CachePatchName("K_NOBLNS", PU_HUDGFX); + kp_rankcapsule = W_CachePatchName("K_CAPICO", PU_HUDGFX); // Battle graphics kp_battlewin = W_CachePatchName("K_BWIN", PU_HUDGFX); @@ -8418,52 +8424,91 @@ static void K_drawKartBumpersOrKarma(void) V_DrawScaledPatch(fx-2 + (flipflag ? (SHORT(kp_ringstickersplit[1]->width) - 3) : 0), fy, V_HUDTRANS|splitflags|flipflag, kp_ringstickersplit[0]); V_DrawScaledPatch(fx+22, fy, V_HUDTRANS|splitflags, frameslash); - if (stplyr->kartstuff[k_bumper] <= 0) + if (battlecapsules) { - V_DrawMappedPatch(fx+1, fy-2, V_HUDTRANS|splitflags, kp_splitkarmabomb, colormap); - V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartstuff[k_comebackpoints]) % 10]); - V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, kp_facenum[2]); - } - else - { - V_DrawMappedPatch(fx+1, fy-2, V_HUDTRANS|splitflags, kp_rankbumper, colormap); + V_DrawMappedPatch(fx+1, fy-2, V_HUDTRANS|splitflags, kp_rankcapsule, NULL); - if (stplyr->kartstuff[k_bumper] > 9 || cv_kartbumpers.value > 9) + if (numtargets > 9 || maptargets > 9) { UINT8 ln[2]; - ln[0] = ((abs(stplyr->kartstuff[k_bumper]) / 10) % 10); - ln[1] = (abs(stplyr->kartstuff[k_bumper]) % 10); + ln[0] = ((numtargets / 10) % 10); + ln[1] = (numtargets % 10); V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, pingnum[ln[0]]); V_DrawScaledPatch(fx+17, fy, V_HUDTRANS|splitflags, pingnum[ln[1]]); - ln[0] = ((abs(cv_kartbumpers.value) / 10) % 10); - ln[1] = (abs(cv_kartbumpers.value) % 10); + ln[0] = ((maptargets / 10) % 10); + ln[1] = (maptargets % 10); V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, pingnum[ln[0]]); V_DrawScaledPatch(fx+31, fy, V_HUDTRANS|splitflags, pingnum[ln[1]]); } else { - V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartstuff[k_bumper]) % 10]); - V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, kp_facenum[(cv_kartbumpers.value) % 10]); + V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[numtargets % 10]); + V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, kp_facenum[maptargets % 10]); + } + } + else + { + if (stplyr->kartstuff[k_bumper] <= 0) + { + V_DrawMappedPatch(fx+1, fy-2, V_HUDTRANS|splitflags, kp_splitkarmabomb, colormap); + V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartstuff[k_comebackpoints]) % 10]); + V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, kp_facenum[2]); + } + else + { + V_DrawMappedPatch(fx+1, fy-2, V_HUDTRANS|splitflags, kp_rankbumper, colormap); + + if (stplyr->kartstuff[k_bumper] > 9 || cv_kartbumpers.value > 9) + { + UINT8 ln[2]; + ln[0] = ((abs(stplyr->kartstuff[k_bumper]) / 10) % 10); + ln[1] = (abs(stplyr->kartstuff[k_bumper]) % 10); + + V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, pingnum[ln[0]]); + V_DrawScaledPatch(fx+17, fy, V_HUDTRANS|splitflags, pingnum[ln[1]]); + + ln[0] = ((abs(cv_kartbumpers.value) / 10) % 10); + ln[1] = (abs(cv_kartbumpers.value) % 10); + + V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, pingnum[ln[0]]); + V_DrawScaledPatch(fx+31, fy, V_HUDTRANS|splitflags, pingnum[ln[1]]); + } + else + { + V_DrawScaledPatch(fx+13, fy, V_HUDTRANS|splitflags, kp_facenum[(stplyr->kartstuff[k_bumper]) % 10]); + V_DrawScaledPatch(fx+27, fy, V_HUDTRANS|splitflags, kp_facenum[(cv_kartbumpers.value) % 10]); + } } } } else { - if (stplyr->kartstuff[k_bumper] <= 0) + if (battlecapsules) { - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_karmasticker, colormap); - V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); + if (numtargets > 9 && maptargets > 9) + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_capsulestickerwide, NULL); + else + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_capsulesticker, NULL); + V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", numtargets, maptargets)); } else { - if (stplyr->kartstuff[k_bumper] > 9 && cv_kartbumpers.value > 9) - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumperstickerwide, colormap); + if (stplyr->kartstuff[k_bumper] <= 0) + { + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_karmasticker, colormap); + V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/2", stplyr->kartstuff[k_comebackpoints])); + } else - V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumpersticker, colormap); - V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + { + if (stplyr->kartstuff[k_bumper] > 9 && cv_kartbumpers.value > 9) + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumperstickerwide, colormap); + else + V_DrawMappedPatch(LAPS_X, LAPS_Y, V_HUDTRANS|splitflags, kp_bumpersticker, colormap); + V_DrawKartString(LAPS_X+47, LAPS_Y+3, V_HUDTRANS|splitflags, va("%d/%d", stplyr->kartstuff[k_bumper], cv_kartbumpers.value)); + } } } } diff --git a/src/p_saveg.c b/src/p_saveg.c index a79f90559..baf4f9ee0 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -34,6 +34,8 @@ #include "p_slopes.h" #endif +#include "k_battle.h" + savedata_t savedata; UINT8 *save_p; @@ -3278,7 +3280,7 @@ static void P_NetArchiveMisc(void) // SRB2kart WRITEINT32(save_p, numgotboxes); WRITEUINT8(save_p, numtargets); - WRITEUINT8(save_p, targetsspawned); + WRITEUINT8(save_p, battlecapsules); WRITEUINT8(save_p, gamespeed); WRITEUINT8(save_p, franticitems); @@ -3389,7 +3391,7 @@ static inline boolean P_NetUnArchiveMisc(void) // SRB2kart numgotboxes = READINT32(save_p); numtargets = READUINT8(save_p); - targetsspawned = (boolean)READUINT8(save_p); + battlecapsules = (boolean)READUINT8(save_p); gamespeed = READUINT8(save_p); franticitems = (boolean)READUINT8(save_p); diff --git a/src/p_setup.c b/src/p_setup.c index 9c65ab9bb..09cd8cf6d 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2309,7 +2309,7 @@ static void P_LevelInitStuff(void) nummaprings = 0; nummapboxes = numgotboxes = 0; maptargets = numtargets = 0; - targetsspawned = false; + battlecapsules = false; // emerald hunt hunt1 = hunt2 = hunt3 = NULL; diff --git a/src/y_inter.c b/src/y_inter.c index aac984316..8a90e20b2 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -39,6 +39,7 @@ #include "m_random.h" // M_RandomKey #include "g_input.h" // PLAYER1INPUTDOWN #include "k_kart.h" // colortranslations +#include "k_battle.h" #include "console.h" // cons_menuhighlight #include "lua_hook.h" // IntermissionThinker hook @@ -433,7 +434,7 @@ void Y_IntermissionDrawer(void) if (data.match.rankingsmode) timeheader = "RANK"; else - timeheader = ((intertype == int_race || (intertype == int_match && targetsspawned)) ? "TIME" : "SCORE"); + timeheader = ((intertype == int_race || (intertype == int_match && battlecapsules)) ? "TIME" : "SCORE"); // draw the level name V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12, 0, data.match.levelstring); @@ -519,7 +520,7 @@ void Y_IntermissionDrawer(void) V_DrawRightAlignedThinString(x+152+gutter, y-1, (data.match.numplayers > NUMFORNEWCOLUMN ? V_6WIDTHSPACE : 0), "NO CONTEST."); else { - if (intertype == int_race || (intertype == int_match && targetsspawned)) + if (intertype == int_race || (intertype == int_match && battlecapsules)) { snprintf(strtime, sizeof strtime, "%i'%02i\"%02i", G_TicsToMinutes(data.match.val[i], true), G_TicsToSeconds(data.match.val[i]), G_TicsToCentiseconds(data.match.val[i])); @@ -856,7 +857,7 @@ void Y_StartIntermission(void) case int_match: { // Calculate who won - Y_CalculateMatchData(0, targetsspawned ? Y_CompareRace : Y_CompareBattle); + Y_CalculateMatchData(0, battlecapsules ? Y_CompareRace : Y_CompareBattle); if (cv_inttime.value > 0) S_ChangeMusicInternal("racent", true); // loop it break;