diff --git a/src/doomstat.h b/src/doomstat.h index 3a9e4396d..b0375ffa2 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -695,7 +695,7 @@ extern UINT8 gamespeed; extern boolean franticitems; extern boolean encoremode, prevencoremode; -extern SINT8 battlewanted[4]; +extern UINT32 g_hiscore; extern tic_t wantedcalcdelay; extern tic_t itemCooldowns[NUMKARTITEMS - 1]; extern tic_t mapreset; diff --git a/src/g_game.c b/src/g_game.c index e522d82e2..7dad67c30 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -297,7 +297,7 @@ SINT8 votes[MAXPLAYERS]; // Each player's vote SINT8 pickedvote; // What vote the host rolls // Server-sided, synched variables -SINT8 battlewanted[4]; // WANTED players in battle, worth x2 points +UINT32 g_hiscore; // Highest score (points) achieved by anyone in game tic_t wantedcalcdelay; // Time before it recalculates WANTED tic_t itemCooldowns[NUMKARTITEMS - 1]; // Cooldowns to prevent item spawning tic_t mapreset; // Map reset delay when enough players have joined an empty game diff --git a/src/k_battle.c b/src/k_battle.c index 55e25c639..c16158e80 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -139,6 +139,8 @@ void K_CheckBumpers(void) } else { + g_hiscore = toproundscore; + if (toproundscore < (numingame * 3)) { return; diff --git a/src/k_hud_track.cpp b/src/k_hud_track.cpp index a39a9a22c..bb00ee91a 100644 --- a/src/k_hud_track.cpp +++ b/src/k_hud_track.cpp @@ -226,6 +226,26 @@ void K_DrawTargetTracking(const TargetTracking& target) } } +bool is_player_tracking_target(const player_t *player) +{ + if (player == nullptr) + { + return false; + } + + if (g_hiscore < 1) // SOMEONE should be scoring + { + return false; + } + + if (player->roundscore < g_hiscore) + { + return false; + } + + return true; +} + bool is_object_tracking_target(const mobj_t* mobj) { switch (mobj->type) @@ -234,6 +254,9 @@ bool is_object_tracking_target(const mobj_t* mobj) case MT_SPECIAL_UFO: return true; + case MT_PLAYER: + return is_player_tracking_target(mobj->player); + default: return false; } diff --git a/src/k_kart.c b/src/k_kart.c index aae6c9e3a..644e1035e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -49,7 +49,6 @@ // franticitems is Frantic Mode items, bool // encoremode is Encore Mode (duh), bool // comeback is Battle Mode's karma comeback, also bool -// battlewanted is an array of the WANTED player nums, -1 for no player in that slot // mapreset is set when enough players fill an empty server boolean K_IsDuelItem(mobjtype_t type) diff --git a/src/p_mobj.c b/src/p_mobj.c index 795af53d8..52e48da51 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5250,6 +5250,10 @@ static boolean P_IsTrackerType(INT32 type) case MT_SPECIAL_UFO: return true; + // Players sometimes get targeted with HUD tracking + case MT_PLAYER: + return true; + default: return false; } diff --git a/src/p_saveg.c b/src/p_saveg.c index 6c27d8d91..73fe11c3a 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -4953,8 +4953,7 @@ static void P_NetArchiveMisc(savebuffer_t *save, boolean resending) WRITESINT8(save->p, speedscramble); WRITESINT8(save->p, encorescramble); - for (i = 0; i < 4; i++) - WRITESINT8(save->p, battlewanted[i]); + WRITEUINT32(save->p, g_hiscore); // battleovertime_t WRITEUINT16(save->p, battleovertime.enabled); @@ -5125,8 +5124,7 @@ static inline boolean P_NetUnArchiveMisc(savebuffer_t *save, boolean reloading) speedscramble = READSINT8(save->p); encorescramble = READSINT8(save->p); - for (i = 0; i < 4; i++) - battlewanted[i] = READSINT8(save->p); + g_hiscore = READUINT32(save->p); // battleovertime_t battleovertime.enabled = READUINT16(save->p); diff --git a/src/p_setup.c b/src/p_setup.c index bedb39c78..0c8ddef6b 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -7042,8 +7042,7 @@ static void P_InitLevelSettings(void) franticitems = (boolean)cv_kartfrantic.value; } - for (i = 0; i < 4; i++) - battlewanted[i] = -1; + g_hiscore = 0; memset(&battleovertime, 0, sizeof(struct battleovertime)); speedscramble = encorescramble = -1;