Hello Markus,

On Mon, 26 Jan 2015 02:46:56 +0100 Celelibi <celel...@gmail.com> wrote:
Apparently, right clicking when loosing the last ball cause a game
over instead of simply loosing a life. It seems that this bug is easier
to reproduce when the ball is falling vertically. At least I could get
to reproduce it fairly easily by repeteadly right clicking while missing
the ball falling straight.

This patch fixes Bug #776263.

Best Regards,
--
Bruno
--- include.original/sprite_ball.h	2014-09-30 12:20:25.000000000 +0200
+++ include/sprite_ball.h	2015-02-08 21:20:34.637125568 +0100
@@ -200,6 +200,7 @@
     void set_on_ejector (Uint32 eject_id, Uint32 otime = 1);
     void disable_stick ();
     void accelerate ();
+    void move_sticked_paddle(sprite_paddle * paddle); 
     virtual bool collision (sprite_object * sprite);
 
   private:
--- src.orginal/sprite_ball.cc	2014-09-30 12:20:26.000000000 +0200
+++ src/sprite_ball.cc	2015-02-08 21:19:57.820625280 +0100
@@ -360,6 +360,48 @@
     }
 }
 
+/** Displacement of the balls sticked to the paddle
+ * */
+void
+sprite_ball::move_sticked_paddle (sprite_paddle * paddle)
+{
+  Sint32 j;
+  switch (sticky_paddle_num)
+    {
+    case controller_paddles::BOTTOM_PADDLE:
+      j = (paddle->collision_width >> 1) - ((collision_width >> 1) + 1);
+      j += paddle->get_x_coord ();
+      x_coord = j;
+      j = (paddle->get_y_coord ()) - (collision_height + 1);
+      y_coord = j;
+      break;
+
+    case controller_paddles::RIGHT_PADDLE:
+      j = (paddle->get_x_coord ()) - (collision_width - 1);
+      x_coord = j;
+      j = (paddle->collision_height >> 1) - ((collision_height >> 1) + 1);
+      j += paddle->get_y_coord ();
+      y_coord = j;
+      break;
+
+    case controller_paddles::TOP_PADDLE:
+      j = (paddle->collision_width >> 1) - ((collision_width >> 1) + 1);
+      j += paddle->get_x_coord ();
+      x_coord = j;
+      j = (paddle->get_y_coord ()) + paddle->collision_height + 1;
+      y_coord = j;
+      break;
+
+    case controller_paddles::LEFT_PADDLE:
+      j = (paddle->get_x_coord ()) + (paddle->collision_width) + 1;
+      x_coord = j;
+      j = (paddle->collision_height >> 1) - ((collision_height >> 1) + 1);
+      j += paddle->get_y_coord ();
+      y_coord = j;
+      break;
+    }
+}
+
 /**
 + * Check collision beetween a ball and another sprite.
 + * Override sprite_object::collision(sprite_object *).
--- src.orginal/controller_balls.cc	2014-09-30 12:20:26.000000000 +0200
+++ src/controller_balls.cc	2015-02-08 21:26:04.897615300 +0100
@@ -232,6 +232,7 @@
       num_of_sprites = 1;
       ball->paddle_touched->stick_ball (ball);
       ball->starts_again (ball->paddle_touched);
+      ball->move_sticked_paddle (paddle);
       head_anim->start_interference ();
       current_player->remove_life (1);
       ships->force_explosion ();
@@ -409,49 +410,7 @@
         }
 
       /* displacement of the balls sticked to the paddle */
-      switch (ball->sticky_paddle_num)
-        {
-        case controller_paddles::BOTTOM_PADDLE:
-          j = (paddle->collision_width >> 1) -
-              ((ball->collision_width >> 1) + 1);
-          j += paddle->x_coord;
-          ball->x_coord = j;
-          j = (paddle->y_coord) - (ball->collision_height + 1);
-          ball->y_coord = j;
-          break;
-
-        case controller_paddles::RIGHT_PADDLE:
-          j = (paddle->x_coord) - (ball->collision_width - 1);
-          ball->x_coord = j;
-          j =
-            (paddle->collision_height >> 1) -
-            ((ball->collision_height >> 1) + 1);
-          j += paddle->y_coord;
-          ball->y_coord = j;
-          break;
-
-        case controller_paddles::TOP_PADDLE:
-          j =
-            (paddle->collision_width >> 1) -
-            ((ball->collision_width >> 1) + 1);
-          j += paddle->x_coord;
-          ball->x_coord = j;
-          j = (paddle->y_coord) + paddle->collision_height + 1;
-          ball->y_coord = j;
-          break;
-
-        case controller_paddles::LEFT_PADDLE:
-          j = (paddle->x_coord) + (paddle->collision_width) + 1;
-          ball->x_coord = j;
-          j =
-            (paddle->collision_height >> 1) -
-            ((ball->collision_height >> 1) + 1);
-          j += paddle->y_coord;
-          ball->y_coord = j;
-          break;
-
-        }
-
+      ball->move_sticked_paddle (paddle);
 
       if (--ball->viewfinder_delay < 0)
         {

Reply via email to