From 41a59f7136b3ab6e2f2225df2e741d3859efe9ac Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sat, 14 Mar 2026 22:29:07 -0400 Subject: [PATCH] basic alt thunder implementation homing attack poc, dunno if we wanna do smth like this --- src/k_items.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/k_kart.c | 18 +++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/k_items.c b/src/k_items.c index 81180907d..f6cd1bdc5 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -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--; diff --git a/src/k_kart.c b/src/k_kart.c index a31063e81..2130f6a65 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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);