- 'nother badguy fix from MatzeB:
authorIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 19:58:11 +0000 (19:58 +0000)
committerIngo Ruhnke <grumbel@gmx.de>
Mon, 26 Apr 2004 19:58:11 +0000 (19:58 +0000)
<MatzeB> -fixes the bumping problem for badguys
<MatzeB> -implements bill kendricks proposal about helding iceblock (if you hit another enemy while

SVN-Revision: 763

src/badguy.cpp
src/gameloop.cpp
src/player.cpp

index 0c9f9a1..0388a75 100644 (file)
@@ -827,10 +827,11 @@ BadGuy::set_sprite(Sprite* left, Sprite* right)
 void
 BadGuy::bump()
 {
-  if(kind == BAD_BSOD || kind == BAD_LAPTOP || kind == BAD_MRBOMB
-      || kind == BAD_BOUNCINGSNOWBALL) {
-    kill_me();
-  }
+  // these can't be bumped
+  if(kind == BAD_FLAME || kind == BAD_BOMB || kind == BAD_FISH)
+    return;
+  
+  kill_me();
 }
 
 void
@@ -941,10 +942,16 @@ BadGuy::kill_me()
     return;
 
   dying = DYING_FALLING;
-  if(kind == BAD_LAPTOP)
+  if(kind == BAD_LAPTOP) {
     set_sprite(img_laptop_falling_left, img_laptop_falling_right);
-  else if(kind == BAD_BSOD)
+    if(mode == HELD) {
+      mode = NORMAL;
+      Player& tux = *World::current()->get_tux();  
+      tux.holding_something = false;
+    }
+  } else if(kind == BAD_BSOD) {
     set_sprite(img_bsod_falling_left, img_bsod_falling_right);
+  }
   
   physic.enable_gravity(true);
   physic.set_velocity_y(0);
@@ -988,10 +995,16 @@ BadGuy::collision(void *p_c_object, int c_object, CollisionType type)
       pbad_c = (BadGuy*) p_c_object;
 
       /* If we're a kicked mriceblock, kill any badguys we hit */
-      if(kind == BAD_LAPTOP && mode == KICK &&
-            pbad_c->kind != BAD_FLAME && pbad_c->kind != BAD_BOMB)
+      if(kind == BAD_LAPTOP && mode == KICK)
+        {
+          pbad_c->kill_me();
+        }
+
+      // a held mriceblock gets kills the enemy too but falls to ground then
+      else if(kind == BAD_LAPTOP && mode == HELD)
         {
           pbad_c->kill_me();
+          kill_me();
         }
 
       /* Kill badguys that run into exploding bomb */
index efc3c94..ad6b880 100644 (file)
@@ -415,7 +415,7 @@ GameSession::check_end_conditions()
   /* End of level? */
   int endpos = (World::current()->get_level()->width-10) * 32;
   Tile* endtile = collision_goal(tux->base);
-  printf("EndTile: %p.\n", endtile);
+  //printf("EndTile: %p.\n", endtile);
   // fallback in case the other endpositions don't trigger
   if (tux->base.x >= endpos || (endtile && endtile->data >= 1)
       || (end_sequence && !endsequence_timer.check()))
index 82fe8a5..6298cc5 100644 (file)
@@ -596,7 +596,8 @@ Player::collision(void* p_c_object, int c_object)
           !safe_timer.started() &&
           pbad_c->mode != BadGuy::HELD)
         {
-          if (pbad_c->mode == BadGuy::FLAT && input.fire == DOWN)
+          if (pbad_c->mode == BadGuy::FLAT && input.fire == DOWN
+               && !holding_something)
             {
               holding_something = true;
               pbad_c->mode = BadGuy::HELD;