diff --git a/src/k_kart.c b/src/k_kart.c index fe3bf34de..b3a6b45f7 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1409,8 +1409,8 @@ static void K_UpdateDraft(player_t *player) leniency *= 4; } - // Opportunity cost for berserk attacking. Get your slingshot speed first! - if (player->instaWhipCharge && player->rings <= 0) + // Want to berserk attack? Get your speed FIRST. + if (player->instaWhipCharge) return; // Not enough speed to draft. @@ -8137,10 +8137,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->gateBoost--; if (player->powerup.rhythmBadgeTimer > 0) - { - player->instaWhipCharge = min(player->instaWhipCharge, 1); player->powerup.rhythmBadgeTimer--; - } if (player->powerup.barrierTimer > 0) { @@ -8270,8 +8267,12 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->justbumped > 0) player->justbumped--; + // Don't screw up chain ring pickup/usage with instawhip charge. + // If the button stays held, delay charge a bit. if (player->instaWhipChargeLockout) player->instaWhipChargeLockout--; + if (player->rings > 0) + player->instaWhipChargeLockout = TICRATE/2; if (!(player->cmd.buttons & BT_ATTACK)) // Deliberate Item button release, no need to protect you from lockout player->instaWhipChargeLockout = 0; @@ -11002,7 +11003,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) 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); + boolean releasedwhip = (!(cmd->buttons & BT_ATTACK)) && (player->rings <= 0 && player->instaWhipCharge); if (K_PowerUpRemaining(player, POWERUP_BADGE)) { @@ -11011,6 +11012,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->instaWhipCharge = INSTAWHIP_COOLDOWN; } + if (leveltime < starttime || player->spindash) + { + chargingwhip = false; + player->instaWhipCharge = 0; + } + if (chargingwhip) { //CONS_Printf("charging %d\n", player->instaWhipCharge); @@ -11025,7 +11032,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else if (releasedwhip) { - if (player->instaWhipCharge < INSTAWHIP_COOLDOWN || leveltime < starttime || player->spindash) + if (player->instaWhipCharge < INSTAWHIP_COOLDOWN) { S_StartSound(player->mo, sfx_kc50); player->instaWhipCharge = 0; diff --git a/src/p_enemy.c b/src/p_enemy.c index cad9b9f5c..084ccb169 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3856,8 +3856,6 @@ void A_AttractChase(mobj_t *actor) else S_StartSoundAtVolume(actor->target, sfx_s227, actor->target->player->ringvolume); - actor->target->player->instaWhipChargeLockout = 10; - actor->target->player->ringvolume -= RINGVOLUMECOLLECTPENALTY; actor->target->player->pickuprings--; diff --git a/src/p_inter.c b/src/p_inter.c index 89567b184..6d8d47ed6 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -124,13 +124,17 @@ boolean P_Whipping(player_t *player) // boolean P_CanPickupItem(player_t *player, UINT8 weapon) { - if (player->exiting || mapreset || (player->pflags & PF_ELIMINATED) || player->itemRoulette.reserved || P_Whipping(player)) + if (player->exiting || mapreset || (player->pflags & PF_ELIMINATED) || player->itemRoulette.reserved) return false; // 0: Sphere/Ring // 1: Random Item / Capsule // 2: Eggbox // 3: Paperitem + + if (weapon != 2 && P_Whipping(player)) + return false; + if (weapon) { // Item slot already taken up