diff --git a/src/object/player.cpp b/src/object/player.cpp
index 060cf049f4..5c488b3982 100644
--- a/src/object/player.cpp
+++ b/src/object/player.cpp
@@ -2307,7 +2307,7 @@ Player::collision_tile(uint32_t tile_attributes)
}
void
-Player::collision_solid(const CollisionHit& hit)
+Player::handle_collision_logic(const CollisionHit& hit)
{
if (hit.bottom) {
if (m_physic.get_velocity_y() > 0)
@@ -2360,6 +2360,12 @@ Player::collision_solid(const CollisionHit& hit)
m_boost = 0.f;
}
+void
+Player::collision_solid(const CollisionHit& hit)
+{
+ handle_collision_logic(hit);
+}
+
HitResponse
Player::collision(MovingObject& other, const CollisionHit& hit)
{
@@ -2392,9 +2398,9 @@ Player::collision(MovingObject& other, const CollisionHit& hit)
return FORCE_MOVE;
if (m_stone)
return ABORT_MOVE;
-
- if (hit.bottom && badguy->is_frozen())
- m_on_ground_flag = true;
+ if (badguy->is_frozen() && badguy->get_physic().get_velocity_y() != 0) {
+ handle_collision_logic(hit);
+ }
}
return CONTINUE;
diff --git a/src/object/player.hpp b/src/object/player.hpp
index 04653bc97a..3546103b0c 100644
--- a/src/object/player.hpp
+++ b/src/object/player.hpp
@@ -493,6 +493,9 @@ class Player final : public MovingObject
*/
void ungrab_object(GameObject* gameobject = nullptr);
+ /** Method for shared collision logic */
+ void handle_collision_logic(const CollisionHit& hit);
+
void next_target();
void prev_target();