HUD target player with most points

- Replace battlewanted global with g_hiscore, keeps track
  of the current highest number of points.
- Adds HUD tracking for player(s) with the hiscore.
- Should target both players in a tie.
This commit is contained in:
James R 2023-02-22 00:44:47 -08:00
parent 9147a17bf3
commit e6da831e36
8 changed files with 34 additions and 9 deletions

View file

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

View file

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

View file

@ -139,6 +139,8 @@ void K_CheckBumpers(void)
}
else
{
g_hiscore = toproundscore;
if (toproundscore < (numingame * 3))
{
return;

View file

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

View file

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

View file

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

View file

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

View file

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