diff --git a/src/p_enemy.c b/src/p_enemy.c index d7a03296b..a815651f6 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3510,9 +3510,19 @@ void A_AttractChase(mobj_t *actor) if (actor->extravalue1 && actor->type != MT_EMERALD) // SRB2Kart { - if (!actor->target || P_MobjWasRemoved(actor->target) || !actor->target->player - || actor->target->player->baildrop || actor->target->player->bailcharge || actor->target->player->defenseLockout > PUNISHWINDOW) + // Screwed this up for staffghosts, so have a mess. + // 1. Insta-Whip's extended punish window used to delete flingrings off you while they were attracting + // 2. ALL conditions that deleted flingrings off you didn't decrement pickuprings, desyncing your ring count + boolean stale = (!actor->target || P_MobjWasRemoved(actor->target) || !actor->target->player); + + boolean legacy_blocked = (actor->target->player->baildrop || actor->target->player->bailcharge || actor->target->player->defenseLockout > PUNISHWINDOW); + boolean new_blocked = (actor->target->player->baildrop || actor->target->player->bailcharge); + boolean blocked = (G_CompatLevel(0x0010) ? legacy_blocked : new_blocked); + if (stale || blocked) { + if (!G_CompatLevel(0x0010) && !stale) + actor->target->player->pickuprings--; + P_RemoveMobj(actor); return; }