itemroulette_t: add reserved member, block roulette and P_CanPickupItem, draw empty item box in HUD

This commit is contained in:
James R. 2023-09-17 21:27:47 -07:00
parent c12a80ef91
commit 4819290ca2
5 changed files with 15 additions and 1 deletions

View file

@ -442,6 +442,7 @@ struct itemroulette_t
boolean eggman;
boolean ringbox;
boolean autoroulette;
UINT8 reserved;
};
// enum for bot item priorities

View file

@ -1413,6 +1413,10 @@ static void K_drawKartItem(void)
else
localpatch[1] = kp_nodraw;
}
else if (stplyr->itemRoulette.reserved > 0)
{
localpatch[1] = kp_nodraw;
}
else
{
if (stplyr->itemamount <= 0)

View file

@ -1509,6 +1509,7 @@ void K_StopRoulette(itemroulette_t *const roulette)
roulette->active = false;
roulette->eggman = false;
roulette->ringbox = false;
roulette->reserved = 0;
}
/*--------------------------------------------------
@ -1574,6 +1575,12 @@ void K_KartItemRoulette(player_t *const player, ticcmd_t *const cmd)
itemroulette_t *const roulette = &player->itemRoulette;
boolean confirmItem = false;
if (roulette->reserved > 0)
{
roulette->reserved--;
return;
}
// This makes the roulette cycle through items.
// If this isn't active, you shouldn't be here.
if (roulette->active == false)

View file

@ -115,7 +115,7 @@ void P_RampConstant(const BasicFF_t *FFInfo, INT32 Start, INT32 End)
//
boolean P_CanPickupItem(player_t *player, UINT8 weapon)
{
if (player->exiting || mapreset || (player->pflags & PF_ELIMINATED))
if (player->exiting || mapreset || (player->pflags & PF_ELIMINATED) || player->itemRoulette.reserved)
return false;
// 0: Sphere/Ring

View file

@ -628,6 +628,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].itemRoulette.eggman);
WRITEUINT8(save->p, players[i].itemRoulette.ringbox);
WRITEUINT8(save->p, players[i].itemRoulette.autoroulette);
WRITEUINT8(save->p, players[i].itemRoulette.reserved);
// sonicloopsvars_t
WRITEFIXED(save->p, players[i].loop.radius);
@ -1114,6 +1115,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].itemRoulette.eggman = (boolean)READUINT8(save->p);
players[i].itemRoulette.ringbox = (boolean)READUINT8(save->p);
players[i].itemRoulette.autoroulette = (boolean)READUINT8(save->p);
players[i].itemRoulette.reserved = READUINT8(save->p);
// sonicloopsvars_t
players[i].loop.radius = READFIXED(save->p);