One of the latest successful games released last week was Balloon Invasion.

It’s a mix between an artillery and a defense game, with a World War II theme.

I made a little prototype of the game, that will be explained another day. It’s nothing so interesting, just a mix between Create a flash artillery game and Managing multiple collision detection with Flash tutorials.

That’s the good point when you write a lot of code: the more you write, the more you can recycle.

The main difference however is the firing system: enemies don’t get hurt by bullets but mby explosions bullets make when they come to the spot you fired on… just like “real” artillery

```
Mouse.hide();
attachMovie("crosshair","crosshair",1);
attachMovie("tank","tank",2,{_x:450, _y:350});
fire_array = new Array();
fire_delay = 30;
just_fired = 0;
crosshair.onEnterFrame = function() {
this._x = _xmouse;
this._y = _ymouse;
};
tank.onEnterFrame = function() {
mousex = _xmouse-this._x;
mousey = (_ymouse-this._y)*-1;
angle = Math.atan(mousey/mousex)/(Math.PI/180);
if (mousex<0) {
angle += 180;
}
if (mousex>=0 && mousey<0) {
angle += 360;
}
if (angle>160) {
angle = 160;
}
if (angle<20) {
angle = 20;
}
firepower = Math.sqrt(mousex*mousex+mousey*mousey);
if (firepower>200) {
firepower = 200;
}
this.cannon._rotation = angle*-1;
};
function onMouseDown() {
if (just_fired>fire_delay) {
just_fired = 0;
angle = tank.cannon._rotation;
start_ball_x = tank._x+48*Math.cos(angle*Math.PI/180);
start_ball_y = tank._y+48*Math.sin(angle*Math.PI/180);
cannonball_fired = attachMovie("cannonball", "cannonball_"+_root.getNextHighestDepth(), _root.getNextHighestDepth(), {_x:start_ball_x, _y:start_ball_y});
cannonball_fired.dirx = Math.cos(angle*Math.PI/180)*firepower;
cannonball_fired.diry = Math.sin(angle*Math.PI/180)*firepower;
cannonball_fired.fire_coord_x = _root._xmouse;
cannonball_fired.fire_coord_y = _root._ymouse;
cannonball_fired.onEnterFrame = function() {
this._x += this.dirx/50;
this._y += this.diry/50;
dist_x = this._x-this.fire_coord_x;
dist_y = this._y-this.fire_coord_y;
dist = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
if (dist<20) {
fire_array.push("explosion"+_root.getNextHighestDepth());
exp = attachMovie("explosion", "explosion"+_root.getNextHighestDepth(), _root.getNextHighestDepth(), {_x:this._x, _y:this._y});
exp.onEnterFrame = function() {
this._width += 2;
this._height += 2;
this._alpha -= 2;
if (this._alpha<0) {
for (x in fire_array) {
if (this.name == _root[fire_array[x]].name) {
fire_array.splice(x,1);
}
}
this.removeMovieClip();
}
};
this.removeMovieClip();
}
};
}
}
_root.onEnterFrame = function() {
just_fired++;
new_enemy = Math.random()*100;
if (new_enemy<1) {
enemy = attachMovie("enemy", "enemy"+_root.getNextHighestDepth(), _root.getNextHighestDepth(), {_x:-40, _y:Math.random()*200+50});
enemy.speed = Math.random()*2+1;
enemy.onEnterFrame = function() {
this._x += this.speed;
if (this._x>550) {
this.removeMovieClip();
}
for (x in fire_array) {
dist_x = this._x-_root[fire_array[x]]._x;
dist_y = this._y-_root[fire_array[x]]._y;
dist = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
if (dist<(this._width+_root[fire_array[x]]._width)/2) {
this._alpha -= 5;
if (this._alpha<0) {
this.removeMovieClip();
}
}
}
};
}
};
```

And here's the result:

Download the source code and start cloning the game :)

#### Want to learn more? Learn by example!

Get the full commented source code of an actual commercial cross platform HTML5 game!!

## Comments 10

WOW! I like this….Real nice…I am so going to do it when I get back home! :D

I like it!

It reminds me of ‘Mutually assured destruction’

wow thanks man this is verry usefull for me :)

How do you actually feel about Kongregate?

Awesome =D!

hey, i was trying to think of a way to do the feature of the ball exploding where the mouse is pressed. I couldn’t do it because i am not as good as Emanuele. Thanks for being phsycic emanuele! =)

i wanted to make a space defence game where the turret was in the middle of the screen. Hey! I just had a great idea. NUCLEAR WAR! the ICBM’s will go to where the mouse clicks! thanks emanuele!!!!!!!!!!!!!!!!!!!!

Pingback: Displaying enemiy’s energy bar in Flash games : Emanuele Feronato - italian geek and PROgrammer

I think I love you! lol!

Thank you soo much, great tutorials.

Woot, I will cetairlny put this to good use!