When Elasticity meets Bloons

Ok, so we have two games: Elasticity and Bloons.

The first, is a game I talked about in Controlling a ball like in Flash Elasticity game tutorial, and I suggest you to read it, while the second is a game we all use to play here on planet Earth.

Despite the psychedelic feeling I gave to the graphics in this prototype, merging two game genres like Bloons and Elasticity can lead to some interesting gameplay concepts.

So the prototype brings the "engine" of Elasticity and some targets to destroy like in Bloons.

No tutorial yet but only a commented actionscript

ACTIONSCRIPT:
  1. attachMovie("newmouse", "newmouse", _root.getNextHighestDepth());
  2. attachMovie("circle", "circle", _root.getNextHighestDepth(), {_x:60, _y:350});
  3. attachMovie("crosshair", "crosshair", _root.getNextHighestDepth());
  4. attachMovie("ball", "ball", _root.getNextHighestDepth());
  5. Mouse.hide();
  6. // friction
  7. friction = 0.9;
  8. // multiplier to scale down ball speed
  9. speed_scale = 0.1;
  10. // ball x and y speed
  11. xspeed = 0;
  12. yspeed = 0;
  13. // flag to determine if the ball is "free" (I released it) or not
  14. free_ball = false;
  15. // gravity is zero at the beginning
  16. gravity = 0;
  17. // this part has been already explained
  18. newmouse.onEnterFrame = function() {
  19.     this._x = _root._xmouse;
  20.     this._y = _root._ymouse;
  21. };
  22. crosshair.onEnterFrame = function() {
  23.     difference = (circle._width-crosshair._width)/2;
  24.     this._x = _root._xmouse;
  25.     this._y = _root._ymouse;
  26.     dist_x = this._x-circle._x;
  27.     dist_y = this._y-circle._y;
  28.     distance = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
  29.     if (distance>difference) {
  30.         angle = Math.atan2(dist_y, dist_x);
  31.         this._x = circle._x+difference*Math.cos(angle);
  32.         this._y = circle._y+difference*Math.sin(angle);
  33.     }
  34. };
  35. ball.onEnterFrame = function() {
  36.     if (!free_ball) {
  37.         dist_x = (crosshair._x-this._x)*speed_scale;
  38.         dist_y = (crosshair._y-this._y)*speed_scale;
  39.         xspeed += dist_x;
  40.         yspeed += dist_y;
  41.     } else {
  42.         if (this._y>500) {
  43.             free_ball = false;
  44.             gravity = 0;
  45.             xspeed = 0;
  46.             yspeed = 0;
  47.             this._x = crosshair._x;
  48.             this._y = crosshair._y;
  49.             friction = 0.9;
  50.         }
  51.     }
  52.     xspeed *= friction;
  53.     yspeed *= friction;
  54.     yspeed += gravity;
  55.     this._x += xspeed;
  56.     this._y += yspeed;
  57. };
  58. // if the player release the mouse, then
  59. // the ball is set to free
  60. // the friction is lower and
  61. // the gravity is bigger
  62. _root.onMouseDown = function() {
  63.     free_ball = true;
  64.     friction = 0.99;
  65.     gravity = 0.3;
  66. };
  67. // adding some "bloons"...
  68. for (x=0; x<8; x++) {
  69.     for (y=0; y<8; y++) {
  70.         bloon = _root.attachMovie("bubble", "bubble_"+x, _root.getNextHighestDepth(), {_x:250+x*30, _y:30+y*30});
  71.         bloon.die = false;
  72.         bloon.onEnterFrame = function() {
  73.             // actions to perform if the bloon is "alive"
  74.             if (!this.die) {
  75.                 dist_x = this._x-ball._x;
  76.                 dist_y = this._y-ball._y;
  77.                 distance_from_ball = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
  78.                 // checking if the ball hits the bloon
  79.                 if (distance_from_ball<(this._width+ball._width)/2) {
  80.                     this.die = true;
  81.                 }
  82.                 // actions to perform if the bloon is "dead"
  83.             } else {
  84.                 this._width -= 1;
  85.                 this._height -= 1;
  86.                 this._alpha -= 2;
  87.                 if (this._alpha == 0) {
  88.                     this.removeMovieClip();
  89.                 }
  90.             }
  91.         };
  92.     }
  93. }

And this is the result, swing the ball with the mouse and press mouse button to throw it against the "bloons".

How many shoots do you need to bloon... pardon blow all balls away?

Download source code

Improve the blog rating this post
Tell me what do you think about this post. I'll write better and better entries.
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

» Flash Templates provided by Template Monster are pre-made web design products developed using Flash technology.
They can be easily customized to meet the unique requirements of your project.

11 Responses to “When Elasticity meets Bloons”

  1. Questo on December 18th, 2007 10:07 pm

    nice I can realy use this in my games

  2. Tom on December 18th, 2007 11:40 pm

    Hello Emanuele Feronato

    ive been following up on these tutorials for a while and i wanted to email you what i have produced but i have forgotten your email.

    And i love this game so far such a simple engine yet so much fun.

  3. Kevin on December 19th, 2007 5:44 am

    This is an awesome idea!
    Make some nice graphics and levels and you may get the same popularity as Bloons!

  4. Frederik J on December 19th, 2007 8:13 am

    Yeah, and get a good sponsor :) Then you rock! Good concept!

  5. shiv1411 on December 19th, 2007 8:37 am

    Great concept! It will be game more popular than circle chain perhaps…

  6. Emanuele Feronato on December 19th, 2007 11:14 am

    Tom: mail it at info[at]emanueleferonato.com

  7. Ed on December 20th, 2007 12:17 am

    Emanuele your homepage is still crashing my computer. I came to see if you’d replied to my comment, and the same message came up. Then I read your comment, went back to the homepage, and it crashed again. I had to close firefox and restart the session, then it crashed again, but I just managed to make it here to report this. I think it may be one of your adverts…

  8. limpeh on December 20th, 2007 2:44 am

    @Ed : I think that the problem is caused by too many flash on the main page (sometimes I get a pop-up that asks me to ’stop’ the scripts running on that page, which should be caused by the flash ‘examples’ showing on the main page). Other than that, it may be caused by too many things to load on a page too.

  9. stupid on December 20th, 2007 5:32 am

    Very nice game idea! Wish I thought of it myself.

  10. Corey on December 20th, 2007 5:55 am

    Great Game! It’s fun and looks promising.

  11. Brent on December 20th, 2007 8:24 pm

    Just so Ed doesn’t look like he’s making this up, I have had Firefox crash when visiting here a few times recently as well.

    Great site though, I check daily :).

Leave a Reply