mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 20:41:46 +00:00
Fix instawhip charge lockout conditions
This commit is contained in:
parent
22d09d8a4a
commit
c41b8e97da
1 changed files with 84 additions and 80 deletions
164
src/k_kart.c
164
src/k_kart.c
|
|
@ -8270,8 +8270,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
// If the button stays held, delay charge a bit.
|
// If the button stays held, delay charge a bit.
|
||||||
if (player->instaWhipChargeLockout)
|
if (player->instaWhipChargeLockout)
|
||||||
player->instaWhipChargeLockout--;
|
player->instaWhipChargeLockout--;
|
||||||
if (player->rings > 0)
|
if (player->rings > 0 || player->itemamount)
|
||||||
player->instaWhipChargeLockout = TICRATE/2;
|
player->instaWhipChargeLockout = 3*TICRATE/4;
|
||||||
if (!(player->cmd.buttons & BT_ATTACK)) // Deliberate Item button release, no need to protect you from lockout
|
if (!(player->cmd.buttons & BT_ATTACK)) // Deliberate Item button release, no need to protect you from lockout
|
||||||
player->instaWhipChargeLockout = 0;
|
player->instaWhipChargeLockout = 0;
|
||||||
|
|
||||||
|
|
@ -11017,6 +11017,88 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This looks a lot like the check that's right under it, but this check is specifically for instawhip charge,
|
||||||
|
// which is allowed during painstate as a last-ditch defensive option.
|
||||||
|
if (player && player->mo && player->mo->health > 0 && !player->spectator && !mapreset && leveltime > introtime)
|
||||||
|
{
|
||||||
|
boolean chargingwhip = (cmd->buttons & BT_ATTACK) && (player->rings <= 0) && (!player->instaWhipChargeLockout);
|
||||||
|
boolean releasedwhip = (!(cmd->buttons & BT_ATTACK)) && (player->rings <= 0 && player->instaWhipCharge) && !(P_PlayerInPain(player));
|
||||||
|
|
||||||
|
if (K_PowerUpRemaining(player, POWERUP_BADGE))
|
||||||
|
{
|
||||||
|
chargingwhip = false;
|
||||||
|
releasedwhip = (ATTACK_IS_DOWN && player->rings <= 0);
|
||||||
|
player->instaWhipCharge = INSTAWHIP_CHARGETIME;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (leveltime < starttime || player->spindash)
|
||||||
|
{
|
||||||
|
chargingwhip = false;
|
||||||
|
player->instaWhipCharge = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chargingwhip)
|
||||||
|
{
|
||||||
|
player->instaWhipCharge = min(player->instaWhipCharge + 1, INSTAWHIP_CHARGETIME + 1);
|
||||||
|
|
||||||
|
if (player->instaWhipCharge == 1)
|
||||||
|
{
|
||||||
|
Obj_SpawnInstaWhipRecharge(player, 0);
|
||||||
|
Obj_SpawnInstaWhipRecharge(player, ANGLE_120);
|
||||||
|
Obj_SpawnInstaWhipRecharge(player, ANGLE_240);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->instaWhipCharge == INSTAWHIP_CHARGETIME)
|
||||||
|
{
|
||||||
|
Obj_SpawnInstaWhipReject(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->instaWhipCharge > INSTAWHIP_CHARGETIME)
|
||||||
|
{
|
||||||
|
if ((leveltime%(INSTAWHIP_RINGDRAINEVERY)) == 0 && !(gametyperules & GTR_SPHERES))
|
||||||
|
{
|
||||||
|
if (player->rings > -20)
|
||||||
|
S_StartSound(player->mo, sfx_antiri);
|
||||||
|
player->rings--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (releasedwhip)
|
||||||
|
{
|
||||||
|
if (player->instaWhipCharge < INSTAWHIP_CHARGETIME)
|
||||||
|
{
|
||||||
|
S_StartSound(player->mo, sfx_kc50);
|
||||||
|
player->instaWhipCharge = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player->instaWhipCharge = 0;
|
||||||
|
player->guardCooldown = INSTAWHIP_DROPGUARD;
|
||||||
|
if (!K_PowerUpRemaining(player, POWERUP_BARRIER))
|
||||||
|
{
|
||||||
|
player->guardCooldown = INSTAWHIP_CHARGETIME;
|
||||||
|
}
|
||||||
|
|
||||||
|
S_StartSound(player->mo, sfx_iwhp);
|
||||||
|
mobj_t *whip = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_INSTAWHIP);
|
||||||
|
P_SetTarget(&player->whip, whip);
|
||||||
|
P_SetScale(whip, player->mo->scale);
|
||||||
|
P_SetTarget(&whip->target, player->mo);
|
||||||
|
K_MatchGenericExtraFlags(whip, player->mo);
|
||||||
|
P_SpawnFakeShadow(whip, 20);
|
||||||
|
whip->fuse = INSTAWHIP_DURATION;
|
||||||
|
player->flashing = max(player->flashing, INSTAWHIP_DURATION);
|
||||||
|
|
||||||
|
if (P_IsObjectOnGround(player->mo))
|
||||||
|
{
|
||||||
|
whip->flags2 |= MF2_AMBUSH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!(player->instaWhipCharge >= INSTAWHIP_CHARGETIME && P_PlayerInPain(player))) // Allow reversal whip
|
||||||
|
player->instaWhipCharge = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime)
|
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime)
|
||||||
{
|
{
|
||||||
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
||||||
|
|
@ -11024,84 +11106,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
// Ring boosting
|
// Ring boosting
|
||||||
if (player->pflags & PF_USERINGS)
|
if (player->pflags & PF_USERINGS)
|
||||||
{
|
{
|
||||||
boolean chargingwhip = (cmd->buttons & BT_ATTACK) && (player->rings <= 0) && (!player->instaWhipChargeLockout);
|
|
||||||
boolean releasedwhip = (!(cmd->buttons & BT_ATTACK)) && (player->rings <= 0 && player->instaWhipCharge);
|
|
||||||
|
|
||||||
if (K_PowerUpRemaining(player, POWERUP_BADGE))
|
|
||||||
{
|
|
||||||
chargingwhip = false;
|
|
||||||
releasedwhip = (ATTACK_IS_DOWN && player->rings <= 0);
|
|
||||||
player->instaWhipCharge = INSTAWHIP_CHARGETIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (leveltime < starttime || player->spindash)
|
|
||||||
{
|
|
||||||
chargingwhip = false;
|
|
||||||
player->instaWhipCharge = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chargingwhip)
|
|
||||||
{
|
|
||||||
//CONS_Printf("charging %d\n", player->instaWhipCharge);
|
|
||||||
player->instaWhipCharge = min(player->instaWhipCharge + 1, INSTAWHIP_CHARGETIME + 1);
|
|
||||||
|
|
||||||
if (player->instaWhipCharge == 1)
|
|
||||||
{
|
|
||||||
Obj_SpawnInstaWhipRecharge(player, 0);
|
|
||||||
Obj_SpawnInstaWhipRecharge(player, ANGLE_120);
|
|
||||||
Obj_SpawnInstaWhipRecharge(player, ANGLE_240);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player->instaWhipCharge == INSTAWHIP_CHARGETIME)
|
|
||||||
{
|
|
||||||
Obj_SpawnInstaWhipReject(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player->instaWhipCharge > INSTAWHIP_CHARGETIME)
|
|
||||||
{
|
|
||||||
if ((leveltime%(INSTAWHIP_RINGDRAINEVERY)) == 0 && !(gametyperules & GTR_SPHERES))
|
|
||||||
{
|
|
||||||
if (player->rings > -20)
|
|
||||||
S_StartSound(player->mo, sfx_antiri);
|
|
||||||
player->rings--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (releasedwhip)
|
|
||||||
{
|
|
||||||
if (player->instaWhipCharge < INSTAWHIP_CHARGETIME)
|
|
||||||
{
|
|
||||||
S_StartSound(player->mo, sfx_kc50);
|
|
||||||
player->instaWhipCharge = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player->instaWhipCharge = 0;
|
|
||||||
player->guardCooldown = INSTAWHIP_DROPGUARD;
|
|
||||||
if (!K_PowerUpRemaining(player, POWERUP_BARRIER))
|
|
||||||
{
|
|
||||||
player->guardCooldown = INSTAWHIP_CHARGETIME;
|
|
||||||
}
|
|
||||||
|
|
||||||
S_StartSound(player->mo, sfx_iwhp);
|
|
||||||
mobj_t *whip = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_INSTAWHIP);
|
|
||||||
P_SetTarget(&player->whip, whip);
|
|
||||||
P_SetScale(whip, player->mo->scale);
|
|
||||||
P_SetTarget(&whip->target, player->mo);
|
|
||||||
K_MatchGenericExtraFlags(whip, player->mo);
|
|
||||||
P_SpawnFakeShadow(whip, 20);
|
|
||||||
whip->fuse = INSTAWHIP_DURATION;
|
|
||||||
player->flashing = max(player->flashing, INSTAWHIP_DURATION);
|
|
||||||
|
|
||||||
if (P_IsObjectOnGround(player->mo))
|
|
||||||
{
|
|
||||||
whip->flags2 |= MF2_AMBUSH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
player->instaWhipCharge = 0;
|
|
||||||
|
|
||||||
if ((cmd->buttons & BT_ATTACK) && !player->ringdelay && player->rings > 0)
|
if ((cmd->buttons & BT_ATTACK) && !player->ringdelay && player->rings > 0)
|
||||||
{
|
{
|
||||||
mobj_t *ring = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RING);
|
mobj_t *ring = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RING);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue