Add K_AwardPlayerRings, adds to player->superring

This commit is contained in:
James R 2022-06-10 00:03:05 -07:00
parent 7a8f3ee88b
commit f6a445c281
3 changed files with 27 additions and 3 deletions

View file

@ -3435,6 +3435,29 @@ void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDam
K_AddHitLag(mo2, finalTics, false); // mo2 is the inflictor, so don't use the damage property. K_AddHitLag(mo2, finalTics, false); // mo2 is the inflictor, so don't use the damage property.
} }
void K_AwardPlayerRings(player_t *player, INT32 rings, boolean overload)
{
UINT16 superring;
if (!overload)
{
INT32 totalrings =
RINGTOTAL(player) + (player->superring / 3);
/* capped at 20 rings */
if ((totalrings + rings) > 20)
rings = (20 - totalrings);
}
superring = player->superring + (rings * 3);
/* overflow */
if (superring < player->superring)
superring += (player->superring - superring);
player->superring = superring;
}
void K_DoInstashield(player_t *player) void K_DoInstashield(player_t *player)
{ {
mobj_t *layera; mobj_t *layera;
@ -10099,9 +10122,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
} }
break; break;
case KITEM_SUPERRING: case KITEM_SUPERRING:
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO && player->superring < (UINT16_MAX - (10*3))) if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
{ {
player->superring += (10*3); K_AwardPlayerRings(player, 10, true);
player->itemamount--; player->itemamount--;
} }
break; break;

View file

@ -67,6 +67,7 @@ void K_KartPlayerAfterThink(player_t *player);
angle_t K_MomentumAngle(mobj_t *mo); angle_t K_MomentumAngle(mobj_t *mo);
void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage); void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage);
void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDamage); void K_SetHitLagForObjects(mobj_t *mo1, mobj_t *mo2, INT32 tics, boolean fromDamage);
void K_AwardPlayerRings(player_t *player, INT32 rings, boolean overload);
void K_DoInstashield(player_t *player); void K_DoInstashield(player_t *player);
void K_DoPowerClash(player_t *t1, player_t *t2); void K_DoPowerClash(player_t *t1, player_t *t2);
void K_BattleAwardHit(player_t *player, player_t *victim, mobj_t *inflictor, UINT8 bumpersRemoved); void K_BattleAwardHit(player_t *player, player_t *victim, mobj_t *inflictor, UINT8 bumpersRemoved);

View file

@ -1403,7 +1403,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
// special behavior for ring capsules // special behavior for ring capsules
if (target->threshold == KITEM_SUPERRING) if (target->threshold == KITEM_SUPERRING)
{ {
player->superring = min(player->superring + 5*target->movecount*3, UINT16_MAX); K_AwardPlayerRings(player, 5 * target->movecount, true);
break; break;
} }