diff --git a/src/items/swatter.cpp b/src/items/swatter.cpp index 28dd3a599..51940ddc5 100644 --- a/src/items/swatter.cpp +++ b/src/items/swatter.cpp @@ -318,7 +318,11 @@ void Swatter::squashThingsAround() projectile_manager->addHitEffect(he); ExplosionAnimation::create(m_closest_kart); } // if kart has bomb attached - World::getWorld()->kartHit(m_closest_kart->getWorldKartId()); + if (m_closest_kart->isSquashed()) + { + // The kart may not be squashed if it was protected by a bubblegum shield + World::getWorld()->kartHit(m_closest_kart->getWorldKartId()); + } // TODO: squash items } // squashThingsAround diff --git a/src/karts/controller/arena_ai.cpp b/src/karts/controller/arena_ai.cpp index a3543f84e..1ee41316f 100644 --- a/src/karts/controller/arena_ai.cpp +++ b/src/karts/controller/arena_ai.cpp @@ -600,11 +600,17 @@ void ArenaAI::handleArenaItems(const float dt) type == Attachment::ATTACH_NOLOKS_SWATTER) break; - // Check if a flyable (cake, ...) is close. If so, use bubblegum + // Check if a flyable (cake, ...) is close or a kart nearby + // has a swatter attachment. If so, use bubblegum // as shield - if (!m_kart->isShielded() && + if ((!m_kart->isShielded() && projectile_manager->projectileIsClose(m_kart, - m_ai_properties->m_shield_incoming_radius)) + m_ai_properties->m_shield_incoming_radius)) || + (m_closest_kart_pos_data.distance < 15.0f && + ((m_closest_kart->getAttachment()-> + getType() == Attachment::ATTACH_SWATTER) || + (m_closest_kart->getAttachment()-> + getType() == Attachment::ATTACH_NOLOKS_SWATTER)))) { m_controls->m_fire = true; m_controls->m_look_back = false;