X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy.cpp;h=7b8db66c90fb00d0b0b4cf3de033bab72bf9ef52;hb=c11b04d0525c1566260b02bacd78fd7faa7be8f1;hp=be19b1a3579db3641baa42e7d9a99ece9ee5719a;hpb=594ee3e230b95be009f1308c577879d9d3649e5f;p=supertux.git diff --git a/src/badguy.cpp b/src/badguy.cpp index be19b1a35..7b8db66c9 100644 --- a/src/badguy.cpp +++ b/src/badguy.cpp @@ -719,6 +719,17 @@ BadGuy::action(double frame_ratio) return; } + // Kill us if we landed on spikes + if (dying == DYING_NOT + && (kind != BAD_STALACTITE && kind != BAD_FLAME && kind != BAD_BOMB) + && (isspike(base.x, base.y) || isspike(base.x + base.width, base.y) + || isspike(base.x, base.y + base.height) + || isspike(base.x + base.width, base.y + base.height))) + { + physic.set_velocity_y(3); + kill_me(0); + } + // Once it's on screen, it's activated! if (base.x <= scroll_x + screen->w + OFFSCREEN_DISTANCE) seen = true; @@ -961,10 +972,11 @@ BadGuy::kill_me(int score) tux.holding_something = false; } } - + physic.enable_gravity(true); /* Gain some points: */ + if (score != 0) World::current()->add_score(base.x, base.y, score * player_status.score_multiplier); @@ -1003,16 +1015,14 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) if(pbullet_c->kind == FIRE_BULLET) { - if(kind == BAD_MRICEBLOCK || kind == BAD_STALACTITE || - kind == BAD_FISH || kind == BAD_BOUNCINGSNOWBALL || - kind == BAD_FLYINGSNOWBALL || kind == BAD_FLYINGSNOWBALL) - kill_me(10); + if (kind != BAD_BOMB && kind != BAD_STALACTITE && kind != BAD_FLAME) + kill_me(10); } else if(pbullet_c->kind == ICE_BULLET) { - if(kind == BAD_FLAME) - kill_me(10); - else + //if(kind == BAD_FLAME) + // kill_me(10); + //else frozen_timer.start(FROZEN_TIME); } break; @@ -1020,13 +1030,14 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) case CO_BADGUY: pbad_c = (BadGuy*) p_c_object; - /* If we're a kicked mriceblock, kill any badguys we hit */ - if(kind == BAD_MRICEBLOCK && mode == KICK) + /* If we're a kicked mriceblock, kill [almost] any badguys we hit */ + if(kind == BAD_MRICEBLOCK && mode == KICK && + kind != BAD_FLAME && kind != BAD_BOMB && kind != BAD_STALACTITE) { pbad_c->kill_me(25); } - // a held mriceblock gets kills the enemy too but falls to ground then + // a held mriceblock kills the enemy too but falls to ground then else if(kind == BAD_MRICEBLOCK && mode == HELD) { pbad_c->kill_me(25); @@ -1083,8 +1094,6 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) physic.set_velocity(-fabsf(physic.get_velocity_x()), 2); } - - break; } else if (base.y + base.height > pbad_c->base.y + pbad_c->base.height) @@ -1096,6 +1105,10 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type) { dir = RIGHT; physic.set_velocity_x(fabsf(physic.get_velocity_x())); + + // in case badguys get "jammed" + if (physic.get_velocity_x() != 0) + base.x = pbad_c->base.x + pbad_c->base.width; } else if (dir == RIGHT) {