diff --git a/src/badguy/badguy.cpp b/src/badguy/badguy.cpp index 6a82c21486..718f2fb292 100644 --- a/src/badguy/badguy.cpp +++ b/src/badguy/badguy.cpp @@ -720,7 +720,11 @@ BadGuy::kill_squished(GameObject& object) SoundManager::current()->play("sounds/squish.wav", get_pos()); m_physic.enable_gravity(true); - m_physic.set_velocity(0, 0); + + if (on_ground()) + m_physic.set_velocity(0, 0); + else + m_physic.set_velocity_y(0.0f); set_state(STATE_SQUISHED); set_group(COLGROUP_MOVING_ONLY_STATIC); auto player = dynamic_cast(&object); @@ -1194,7 +1198,12 @@ BadGuy::ignite() unfreeze(); m_physic.enable_gravity(true); - m_physic.set_velocity(0, 0); + + if (on_ground()) + m_physic.set_velocity(0, 0); + else + m_physic.set_velocity_y(0.0f); + set_group(COLGROUP_MOVING_ONLY_STATIC); m_sprite->stop_animation(); m_ignited = true; diff --git a/src/badguy/bouncing_snowball.cpp b/src/badguy/bouncing_snowball.cpp index 5e1b5e372c..902e4a5074 100644 --- a/src/badguy/bouncing_snowball.cpp +++ b/src/badguy/bouncing_snowball.cpp @@ -131,15 +131,16 @@ BouncingSnowball::collision_squished(MovingObject& object) void BouncingSnowball::collision_solid(const CollisionHit& hit) { - if (m_sprite->get_action() == "squished") - return; - - if (m_frozen) + if (m_frozen || !is_active()) { BadGuy::collision_solid(hit); return; } + if (m_sprite->get_action() == "squished") + return; + + if (hit.bottom) { if (get_state() == STATE_ACTIVE) { float bounce_speed = -m_physic.get_velocity_y()*0.8f; diff --git a/src/badguy/walking_badguy.cpp b/src/badguy/walking_badguy.cpp index efa6b74334..8916de9730 100644 --- a/src/badguy/walking_badguy.cpp +++ b/src/badguy/walking_badguy.cpp @@ -187,7 +187,7 @@ WalkingBadguy::collision_solid(const CollisionHit& hit) update_on_ground_flag(hit); - if (m_frozen) + if (m_frozen || !is_active()) { BadGuy::collision_solid(hit); return; diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 26b38056eb..a237a5371d 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -104,18 +104,12 @@ Zeekling::on_bump_vertical() void Zeekling::collision_solid(const CollisionHit& hit) { - if (m_frozen) + if (m_frozen || !is_active()) { BadGuy::collision_solid(hit); return; } - if (BadGuy::get_state() == STATE_SQUISHED || - BadGuy::get_state() == STATE_BURNING) - { - return; - } - if (hit.top || hit.bottom) on_bump_vertical(); else if (hit.left || hit.right)