diff --git a/src/k_kart.c b/src/k_kart.c index 3d7311e98..3facc2b54 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3407,7 +3407,9 @@ SINT8 K_GetForwardMove(player_t *player) { SINT8 forwardmove = player->cmd.forwardmove; - if ((player->pflags & PF_STASIS) || (player->carry == CR_SLIDING)) + if ((player->pflags & PF_STASIS) + || (player->carry == CR_SLIDING) + || Obj_PlayerRingShooterFreeze(player) == true) { return 0; } diff --git a/src/k_objects.h b/src/k_objects.h index 9bb8d70d2..875f177a8 100644 --- a/src/k_objects.h +++ b/src/k_objects.h @@ -108,6 +108,7 @@ boolean Obj_DropTargetMorphThink(mobj_t *morph); /* Ring Shooter */ boolean Obj_RingShooterThinker(mobj_t *mo); +boolean Obj_PlayerRingShooterFreeze(player_t *const player); void Obj_RingShooterInput(player_t *player); void Obj_PlayerUsedRingShooter(mobj_t *base, player_t *player); void Obj_RingShooterDelete(mobj_t *mo); diff --git a/src/objects/ring-shooter.c b/src/objects/ring-shooter.c index c1c60c49d..d9846dd9a 100644 --- a/src/objects/ring-shooter.c +++ b/src/objects/ring-shooter.c @@ -645,6 +645,20 @@ static boolean AllowRingShooter(player_t *player) return false; } +boolean Obj_PlayerRingShooterFreeze(player_t *const player) +{ + mobj_t *const base = player->ringShooter; + + if (AllowRingShooter(player) == true + && (player->cmd.buttons & BT_RESPAWN) == BT_RESPAWN + && P_MobjWasRemoved(base) == false) + { + return (rs_base_canceled(base) == 0); + } + + return false; +} + void Obj_RingShooterInput(player_t *player) { mobj_t *const base = player->ringShooter; @@ -658,7 +672,7 @@ void Obj_RingShooterInput(player_t *player) return; } - if (rs_base_canceled(base) != 0) + if (rs_base_canceled(base) == 0) { if (base->fuse < RS_FUSE_BLINK) {