diff --git a/src/info/sprites.h b/src/info/sprites.h index 8cb5208f6..55922f37c 100644 --- a/src/info/sprites.h +++ b/src/info/sprites.h @@ -568,9 +568,12 @@ _(ISTB) // instashield layer B _(PWCL) // Invinc/grow clash VFX _(ARRO) // player arrows -_(ITEM) -_(ITMO) -_(ITMI) +_(ITEM) // base item +_(ITMO) // Multi-Orbinaut +_(ITMI) // Invincibility +_(ITSN) // Multi-Sneaker +_(ITBA) // Multi-Banana +_(ITJA) // Multi-Jawz _(ITMN) _(WANT) diff --git a/src/k_kart.c b/src/k_kart.c index 4ffc56c20..f08d74af3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10116,9 +10116,9 @@ UINT8 K_GetInvincibilityItemFrame(void) return ((leveltime % (7*3)) / 3); } -UINT8 K_GetOrbinautItemFrame(UINT8 count) +UINT8 K_GetMultItemFrame(UINT8 count, UINT8 max) { - return min(count - 1, 3); + return min(count - 1, max); } boolean K_IsSPBInGame(void) @@ -10174,9 +10174,21 @@ void K_UpdateMobjItemOverlay(mobj_t *part, SINT8 itemType, UINT8 itemCount) { switch (itemType) { + case KITEM_SNEAKER: + part->sprite = SPR_ITSN; + part->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|K_GetMultItemFrame(itemCount, 2); + break; case KITEM_ORBINAUT: part->sprite = SPR_ITMO; - part->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|K_GetOrbinautItemFrame(itemCount); + part->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|K_GetMultItemFrame(itemCount, 3); + break; + case KITEM_BANANA: + part->sprite = SPR_ITBA; + part->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|K_GetMultItemFrame(itemCount, 3); + break; + case KITEM_JAWZ: + part->sprite = SPR_ITJA; + part->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|K_GetMultItemFrame(itemCount, 1); break; case KITEM_INVINCIBILITY: part->sprite = SPR_ITMI; diff --git a/src/k_kart.h b/src/k_kart.h index 539cd5376..7fa06f995 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -169,7 +169,7 @@ SINT8 K_Sliptiding(player_t *player); void K_MoveKartPlayer(player_t *player, boolean onground); void K_CheckSpectateStatus(boolean considermapreset); UINT8 K_GetInvincibilityItemFrame(void); -UINT8 K_GetOrbinautItemFrame(UINT8 count); +UINT8 K_GetMultItemFrame(UINT8 count, UINT8 max); boolean K_IsSPBInGame(void); // sound stuff for lua diff --git a/src/p_mobj.c b/src/p_mobj.c index 11076b381..dc2c82439 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4151,8 +4151,20 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj) { switch (itemType) { + case KITEM_SNEAKER: + if (mobj->movecount - 1 > K_GetMultItemFrame(mobj->movecount, 2)) + count = mobj->movecount; + break; case KITEM_ORBINAUT: // only display the number when the sprite no longer changes - if (mobj->movecount - 1 > K_GetOrbinautItemFrame(mobj->movecount)) + if (mobj->movecount - 1 > K_GetMultItemFrame(mobj->movecount, 3)) + count = mobj->movecount; + break; + case KITEM_BANANA: // only display the number when the sprite no longer changes + if (mobj->movecount - 1 > K_GetMultItemFrame(mobj->movecount, 3)) + count = mobj->movecount; + break; + case KITEM_JAWZ: // only display the number when the sprite no longer changes + if (mobj->movecount - 1 > K_GetMultItemFrame(mobj->movecount, 1)) count = mobj->movecount; break; case KITEM_SUPERRING: // always display the number, and multiply it by 5 @@ -6048,25 +6060,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) { P_SetMobjState(mobj, S_PLAYERARROW_BOX); - switch (mobj->target->player->itemtype) - { - case KITEM_ORBINAUT: - mobj->tracer->sprite = SPR_ITMO; - mobj->tracer->frame = FF_FULLBRIGHT|K_GetOrbinautItemFrame(mobj->target->player->itemamount); - break; - case KITEM_INVINCIBILITY: - mobj->tracer->sprite = SPR_ITMI; - mobj->tracer->frame = FF_FULLBRIGHT|K_GetInvincibilityItemFrame(); - break; - case KITEM_SAD: - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT; - break; - default: - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|(mobj->target->player->itemtype); - break; - } + K_UpdateMobjItemOverlay(mobj->tracer, mobj->target->player->itemtype,mobj->target->player->itemamount); if (mobj->target->player->itemflags & IF_ITEMOUT) {