Implement MultiItems into capsules/dropped items as well

This commit is contained in:
NepDisk 2025-03-10 15:17:17 -04:00
parent 9d2c895b2a
commit 95750e50e4
4 changed files with 36 additions and 27 deletions

View file

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

View file

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

View file

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

View file

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