separate out the "equipped item" field

will need more modularization and some coding style standardization (perhaps via K_SetItemOut?)
This commit is contained in:
minenice55 2025-12-06 16:56:37 -05:00
parent d447f7d429
commit 6f14af9243
6 changed files with 22 additions and 8 deletions

View file

@ -612,6 +612,7 @@ struct player_t
// Item held stuff
UINT8 itemtype; // KITEM_ constant for item number
UINT8 itemamount; // Amount of said item
UINT8 equippeditem; // Item type that is currently "equipped"
itemflags_t itemflags; // holds IF_flags (see itemstate_t)
tic_t itemusecooldown; // timer for which the player is locked out of using an item or mashing the item roulette (implementation of xItemLib setPlayerItemCooldown)
tic_t itemusecooldownmax; // most recent highest value for itemusecooldown, mainly used for HUD rendering currently

View file

@ -1937,6 +1937,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
player->rocketsneakertimer = (itemtime*3);
player->itemamount--;
player->equippeditem = KITEM_ROCKETSNEAKER;
K_UpdateHnextList(player, true);
for (moloop = 0; moloop < 2; moloop++)
@ -1973,7 +1974,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
mobj_t *prev = player->mo;
//K_PlayAttackTaunt(player->mo);
K_SetItemOut(player);
K_SetItemOut(player, KITEM_BANANA);
S_StartSound(player->mo, sfx_s254);
for (moloop = 0; moloop < player->itemamount; moloop++)
@ -2014,6 +2015,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
mobj_t *mo;
player->itemamount--;
player->itemflags |= IF_EGGMANOUT;
player->equippeditem = KITEM_EGGMAN;
S_StartSound(player->mo, sfx_s254);
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM_SHIELD);
if (mo)
@ -2038,7 +2040,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
mobj_t *prev = player->mo;
//K_PlayAttackTaunt(player->mo);
K_SetItemOut(player);
K_SetItemOut(player, KITEM_ORBINAUT);
S_StartSound(player->mo, sfx_s3k3a);
for (moloop = 0; moloop < player->itemamount; moloop++)
@ -2081,7 +2083,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
mobj_t *prev = player->mo;
//K_PlayAttackTaunt(player->mo);
K_SetItemOut(player);
K_SetItemOut(player, KITEM_JAWZ);
S_StartSound(player->mo, sfx_s3k3a);
for (moloop = 0; moloop < player->itemamount; moloop++)
@ -2121,7 +2123,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
{
mobj_t *mo;
K_SetItemOut(player);
K_SetItemOut(player, KITEM_MINE);
S_StartSound(player->mo, sfx_s254);
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SSMINE_SHIELD);
if (mo)
@ -2372,7 +2374,7 @@ void K_PlayerItemThink(player_t *player, boolean onground)
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
{
mobj_t *mo;
K_SetItemOut(player);
K_SetItemOut(player, KITEM_KITCHENSINK);
S_StartSound(player->mo, sfx_s254);
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SINK_SHIELD);
if (mo)

View file

@ -5440,6 +5440,7 @@ void K_DropRocketSneaker(player_t *player)
}
P_SetTarget(&player->mo->hnext, NULL);
player->rocketsneakertimer = 0;
player->equippeditem = KITEM_NONE;
}
void K_DropKitchenSink(player_t *player)
@ -5666,7 +5667,7 @@ static void K_MoveHeldObjects(player_t *player)
return;
}
equipstyle = K_GetItemEquipStyle(player->itemtype);
equipstyle = K_GetItemEquipStyle(player->equippeditem);
switch (equipstyle)
{
@ -9945,6 +9946,7 @@ void K_StripItems(player_t *player)
K_DropRocketSneaker(player);
K_DropKitchenSink(player);
player->itemtype = KITEM_NONE;
player->equippeditem = KITEM_NONE;
player->itemamount = 0;
player->itemflags &= ~IF_EGGMANOUT;
K_UnsetItemOut(player);
@ -10199,15 +10201,17 @@ INT32 K_GetShieldFromItem(INT32 item)
}
}
void K_SetItemOut(player_t *player)
void K_SetItemOut(player_t *player, kartitemtype_e itemtype)
{
player->itemflags |= IF_ITEMOUT;
player->equippeditem = itemtype;
}
void K_UnsetItemOut(player_t *player)
{
player->itemflags &= ~(IF_ITEMOUT|IF_HOLDREADY);
player->bananadrag = 0;
player->equippeditem = KITEM_NONE;
}
static boolean K_InvincibilitySlotHogging(player_t *player)
@ -10354,6 +10358,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
K_ThrowKartItem(player, false, MT_EGGMANITEM, -1, 0);
K_PlayAttackTaunt(player->mo);
player->itemflags &= ~IF_EGGMANOUT;
player->equippeditem = KITEM_NONE;
K_UpdateHnextList(player, true);
K_BotResetItemConfirm(player, false);
}

View file

@ -341,7 +341,7 @@ void K_PlayPowerGloatSound(mobj_t *source);
INT32 K_GetShieldFromPlayer(const player_t *player);
INT32 K_GetShieldFromItem(INT32 item);
void K_SetItemOut(player_t *player);
void K_SetItemOut(player_t *player, kartitemtype_e itemtype);
void K_UnsetItemOut(player_t *player);
boolean K_SafeRespawnPosition(mobj_t * mo);

View file

@ -321,6 +321,7 @@ enum player_e
player_roulettetype,
player_itemtype,
player_itemamount,
player_equippeditem,
player_itemusecooldown,
player_itemusecooldownmax,
player_throwdir,
@ -540,6 +541,7 @@ static const char *const player_opt[] = {
"roulettetype",
"itemtype",
"itemamount",
"equippeditem",
"itemusecooldown",
"itemusecooldownmax",
"throwdir",
@ -965,6 +967,9 @@ static int player_get(lua_State *L)
case player_itemamount:
lua_pushinteger(L, plr->itemamount);
break;
case player_equippeditem:
lua_pushinteger(L, plr->equippeditem);
break;
case player_itemusecooldown:
lua_pushinteger(L, plr->itemusecooldown);
break;

View file

@ -639,6 +639,7 @@ static void P_NetSyncPlayers(savebuffer_t *save)
SYNC(players[i].itemtype);
SYNC(players[i].itemamount);
SYNC(players[i].equippeditem);
SYNC(players[i].throwdir);
SYNC(players[i].sadtimer);