+ player.kill(false);
+ }
+
+ return FORCE_MOVE;
+}
+
+HitResponse
+Stalactite::collision_badguy(BadGuy& other, const CollisionHit& hit)
+{
+ if (state == STALACTITE_SQUISHED) return FORCE_MOVE;
+
+ // ignore other Stalactites
+ if (dynamic_cast<Stalactite*>(&other)) return FORCE_MOVE;
+
+ if (state != STALACTITE_FALLING) return BadGuy::collision_badguy(other, hit);
+
+ if (other.is_freezable()) {
+ other.freeze();
+ } else {
+ other.kill_fall();
+ }
+
+ return FORCE_MOVE;
+}
+
+HitResponse
+Stalactite::collision_bullet(Bullet& bullet, const CollisionHit& )
+{
+ if(state == STALACTITE_HANGING) {
+ timer.start(SHAKE_TIME);
+ state = STALACTITE_SHAKING;
+ bullet.remove_me();
+ if(bullet.get_type() == FIRE_BONUS)
+ sound_manager->play("sounds/sizzle.ogg", get_pos());
+ sound_manager->play("sounds/cracking.wav", get_pos());