+HitResponse
+MrIceBlock::collision(GameObject& object, const CollisionHit& hit)
+{
+ if(ice_state == ICESTATE_GRABBED)
+ return FORCE_MOVE;
+
+ return BadGuy::collision(object, hit);
+}
+
+HitResponse
+MrIceBlock::collision_player(Player& player, const CollisionHit& hit)
+{
+ if(ice_state == ICESTATE_GRABBED)
+ return FORCE_MOVE;
+
+ if(dir == UP) {
+ return FORCE_MOVE;
+ }
+
+ // handle kicks from left or right side
+ if(ice_state == ICESTATE_FLAT && get_state() == STATE_ACTIVE) {
+ if(hit.left) {
+ dir = RIGHT;
+ player.kick();
+ set_state(ICESTATE_KICKED);
+ return FORCE_MOVE;
+ } else if(hit.right) {
+ dir = LEFT;
+ player.kick();
+ set_state(ICESTATE_KICKED);
+ return FORCE_MOVE;
+ }
+ }
+
+ return BadGuy::collision_player(player, hit);