diff --git a/src/d_player.h b/src/d_player.h index 649d8c082..c138a0ea2 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -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 diff --git a/src/k_items.c b/src/k_items.c index c86898302..eeadc7a73 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -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) diff --git a/src/k_kart.c b/src/k_kart.c index 9fff69b68..795448e98 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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); } diff --git a/src/k_kart.h b/src/k_kart.h index de666f39a..4fda5dd7a 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 393d2db70..1b2a9c99a 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -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; diff --git a/src/p_saveg.c b/src/p_saveg.c index 65dd5f07f..2baacd1e5 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -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);