Capsule counter, map change when spawning capsules mid-game

This commit is contained in:
TehRealSalt 2019-09-24 11:24:01 -04:00
parent e84c618da8
commit 9cb834b004
8 changed files with 91 additions and 39 deletions

View file

@ -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.
*/

View file

@ -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 --

View file

@ -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;
}

View file

@ -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);

View file

@ -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));
}
}
}
}

View file

@ -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);

View file

@ -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;

View file

@ -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;