Reimplement ringloss on bump. Also fix some shield issues.

This commit is contained in:
NepDisk 2025-05-13 13:35:27 -04:00
parent 2399cb4f70
commit a1c3c6b9e1
5 changed files with 29 additions and 13 deletions

View file

@ -60,7 +60,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
if (t2->player->hyudorotimer)
return true; // no interaction
if (t2->player->flamestore && t2->player->itemtype == KITEM_FLAMESHIELD)
if (t2->player->flamedash && (K_GetShieldFromPlayer(t2->player) == KITEM_FLAMESHIELD))
{
// Melt item
S_StartSound(t2, sfx_s3k43);
@ -154,7 +154,9 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
if (t1->type == MT_BANANA && t1->health > 1)
S_StartSound(t2, sfx_bsnipe);
if (t2->player->flamestore && t2->player->itemtype == KITEM_FLAMESHIELD)
damageitem = true;
if (t2->player->flamedash && (K_GetShieldFromPlayer(t2->player) == KITEM_FLAMESHIELD))
{
// Melt item
S_StartSound(t2, sfx_s3k43);
@ -163,8 +165,6 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
{
P_DamageMobj(t2, t1, t1->target, 1, DMG_NORMAL);
}
damageitem = true;
}
else if (t2->type == MT_BANANA || t2->type == MT_BANANA_SHIELD
|| t2->type == MT_ORBINAUT || t2->type == MT_ORBINAUT_SHIELD
@ -246,7 +246,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2)
t2->player->roulettetype = KROULETTETYPE_EGGMAN;
}
if (t2->player->flamestore && t2->player->itemtype == KITEM_FLAMESHIELD)
if (t2->player->flamedash && (K_GetShieldFromPlayer(t2->player) == KITEM_FLAMESHIELD))
{
// Melt item
S_StartSound(t2, sfx_s3k43);
@ -378,7 +378,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
if (t1->health > 1)
S_StartSound(t2, sfx_bsnipe);
if (t2->player->flamestore && t2->player->itemtype == KITEM_FLAMESHIELD)
if (t2->player->flamedash && (K_GetShieldFromPlayer(t2->player) == KITEM_FLAMESHIELD))
{
// Melt item
S_StartSound(t2, sfx_s3k43);
@ -689,8 +689,8 @@ boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2)
boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2)
{
const boolean flameT1 = ((t1->player->flamestore > 0) && (t1->player->flametimer > 0));
const boolean flameT2 = ((t2->player->flamestore > 0) && (t2->player->flametimer > 0));
const boolean flameT1 = ((t1->player->flamedash > 0) && (t1->player->flametimer > 0));
const boolean flameT2 = ((t2->player->flamedash > 0) && (t2->player->flametimer > 0));
boolean t1Condition = false;
boolean t2Condition = false;
@ -768,6 +768,20 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2)
return true;
}
}
// Ring Loss on bump.
t1Condition = ((t2->player->rings > 0) && (K_GetShieldFromPlayer(t2->player) == KSHIELD_NONE));
t2Condition = ((t1->player->rings > 0) && (K_GetShieldFromPlayer(t1->player) == KSHIELD_NONE));
if (t1Condition == true)
{
P_PlayerRingBurst(t2->player, 1);
}
if (t2Condition == true)
{
P_PlayerRingBurst(t1->player, 1);
}
return false;
}

View file

@ -1247,7 +1247,7 @@ static void K_drawKartItem(void)
else
localpatch = kp_nodraw;
}
else if (stplyr->curshield == KSHIELD_BUBBLE)
else if ((K_GetShieldFromPlayer(stplyr) == KSHIELD_BUBBLE))
{
localpatch = kp_bubbleshield[offset];

View file

@ -744,7 +744,8 @@ INT32 K_KartGetItemOdds(
if (players[i].exiting)
pexiting++;
if (shieldtype != KSHIELD_NONE && shieldtype == K_GetShieldFromPlayer(&players[i]))
if ((shieldtype == K_GetShieldFromItem(players[i].itemtype))
|| (shieldtype == K_GetShieldFromPlayer(&players[i])))
{
// Don't allow more than one of each shield type at a time
return 0;
@ -956,7 +957,8 @@ INT32 K_KartGetLegacyItemOdds(UINT8 pos, SINT8 item, fixed_t mashed, boolean spb
if (players[i].exiting)
pexiting++;
if (shieldtype != KSHIELD_NONE && shieldtype == K_GetShieldFromItem(players[i].itemtype))
if ((shieldtype == K_GetShieldFromItem(players[i].itemtype))
|| (shieldtype == K_GetShieldFromPlayer(&players[i])))
{
// Don't allow more than one of each shield type at a time
return 0;

View file

@ -573,7 +573,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
// kill
if (player->invincibilitytimer > 0
|| player->growshrinktimer > 0
|| player->flamestore > 0)
|| player->flamedash > 0)
{
P_KillMobj(special, toucher, toucher, DMG_NORMAL);
return;

View file

@ -1731,7 +1731,7 @@ static void P_DoBubbleBreath(player_t *player)
fixed_t z = player->mo->z;
mobj_t *bubble = NULL;
if (!(player->mo->eflags & MFE_UNDERWATER) || player->spectator || player->curshield == KSHIELD_BUBBLE)
if (!(player->mo->eflags & MFE_UNDERWATER) || player->spectator || (K_GetShieldFromPlayer(player) == KSHIELD_BUBBLE))
return;
if (player->charflags & SF_MACHINE)