X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fbadguy.cpp;h=690e97aa589384614b3a265fda82d1a58f574c79;hb=3392b0f249cbb2d1151a145ab3a86b9389a0b36e;hp=4a209783c62a70566c915b38eceaf8edb1f04e13;hpb=58bf708dc9f036b2c7d8d3edfdbfa62f0da3481a;p=supertux.git diff --git a/src/badguy/badguy.cpp b/src/badguy/badguy.cpp index 4a209783c..690e97aa5 100644 --- a/src/badguy/badguy.cpp +++ b/src/badguy/badguy.cpp @@ -10,6 +10,7 @@ static const float Y_OFFSCREEN_DISTANCE = 1200; BadGuy::BadGuy() : sprite(0), dir(LEFT), state(STATE_INIT) { + hitpoints = 1; } BadGuy::~BadGuy() @@ -131,8 +132,16 @@ BadGuy::collision_player(Player& player, const CollisionHit& hit) return ABORT_MOVE; } if(hit.normal.y > .9) { + //TODO: fix inaccuracy (tux sometimes dies even if badguy was hit) + // give badguys some invincible time (prevent them from being hit multiple times) + // use hitpoints also when hit by fireball or invincible tux + hitpoints--; if(collision_squished(player)) return ABORT_MOVE; + else if (hitpoints <= 0) { + player.kill(Player::SHRINK); + return FORCE_MOVE; + } } player.kill(Player::SHRINK); return FORCE_MOVE; @@ -190,7 +199,7 @@ BadGuy::set_state(State state) break; case STATE_INACTIVE: // was the badguy dead anyway? - if(laststate == STATE_SQUISHED || laststate == STATE_SQUISHED) { + if(laststate == STATE_SQUISHED || laststate == STATE_FALLING) { remove_me(); } flags |= FLAG_NO_COLLDET;