basic alt thunder implementation

homing attack poc, dunno if we wanna do smth like this
This commit is contained in:
minenice55 2026-03-14 22:29:07 -04:00
parent c98d48f1a2
commit 41a59f7136
2 changed files with 68 additions and 1 deletions

View file

@ -2415,20 +2415,71 @@ void K_PlayerItemThink(player_t *player, boolean onground)
{
if (buttons & BT_ATTACK)
{
if (player->itemflags & IF_HOLDREADY)
{
S_StartSound(player->mo, sfx_vwre);
}
player->itemflags &= ~IF_HOLDREADY;
if (player->altthundercharge >= ALTTHUNDERCHARGETIME)
{
if (player->itemflags & IF_SEEKING)
{
S_StartSound(player->mo, sfx_ncchip);
}
if (S_SoundPlaying(player->mo, sfx_vwre))
{
S_StopSoundByID(player->mo, sfx_vwre);
}
player->itemflags &= ~IF_SEEKING;
player->bananadrag += 4;
}
else
{
player->itemflags |= IF_SEEKING;
}
player->altthundercharge++;
}
else
{
if (player->altthundercharge)
{
if (S_SoundPlaying(player->mo, sfx_vwre))
{
S_StopSoundByID(player->mo, sfx_vwre);
}
if (player->altthundercharge >= ALTTHUNDERCHARGETIME)
{
K_DoThunderShield(player);
}
else
{
angle_t attackangle = player->mo->angle;
fixed_t power = 16*mapobjectscale;
INT32 lastTarg = player->lastitemtarget;
if (lastTarg != -1
&& playeringame[lastTarg] == true
&& players[lastTarg].spectator == false
&& players[lastTarg].mo != NULL
&& P_MobjWasRemoved(players[lastTarg].mo) == false)
{
mobj_t *targMo = players[lastTarg].mo;
attackangle = R_PointToAngle2(player->mo->x, player->mo->y, targMo->x, targMo->y);
power = 32*mapobjectscale;
}
player->mo->momz += 4*mapobjectscale*P_MobjFlip(player->mo);
player->mo->z += player->mo->momz;
player->airdriftspeed = max(K_GetKartSpeed(player, false, false), player->speed);
P_Thrust(player->mo, attackangle, power);
S_StartSound(player->mo, sfx_s3k81);
S_StartSound(player->mo, sfx_kc4c);
}
if (player->itemamount > 0)
{
player->itemamount--;

View file

@ -5426,9 +5426,25 @@ void K_PopPlayerShield(player_t *player)
switch (shield)
{
case KSHIELD_THUNDER:
K_DoThunderShield(player);
if (K_IsKartItemAlternate(KITEM_THUNDERSHIELD))
{
if (player->altthundercharge >= ALTTHUNDERCHARGETIME)
{
K_DoThunderShield(player);
}
else
{
player->mo->momz += 4*mapobjectscale*P_MobjFlip(player->mo);
player->mo->z += player->mo->momz;
}
}
else
{
K_DoThunderShield(player);
}
player->itemtype = KITEM_NONE;
player->itemamount = 0;
player->altthundercharge = 0;
break;
case KSHIELD_BUBBLE:
K_BreakBubbleShield(player);