Feedback on hit would be nice (this is actually really simple in wc3, even with GUI), but what i was refering to was a way to know if you hit the enemy tank or not. Right now, you just get a ground explosion underneath the tank... I don't know how you deal with your missiles, but if they are units, and you do your collision checks manually, you could try to remove the projectile when it hits a tank and replace it with some kind of effect (preferably with sound) at the same height as where the missile hit. This way, you would know that you actually hit something.
Another thing you should know is that "crosser" is actually spelled "crosshair" (google if you don't believe me) because of how it resembles two thin strands of hairs. Just a typo that has been bugging me.
About the collision:
Are you familiar with vectors? In wc3, there is already a kind of 2d vector type - the "location". It is basically a container that holds an x and an y value. Mostly in games you work with 3d vectors, which is represented by (x,y,z). It can be used as anything that has 3 values really, but is mostly used to represent a point, motion, or direction in 3d space.
In a game like this, it would make sense to have two vectors, one for position, and one for velocity. To the velocity vector, you would add the tanks thrust. As you might know, you could add the thrust at every game loop in this way:
velx = velx + thrust * Cos(angle*bj_DEGTORAD)
vely = vely + thrust * Sin(angle*bj_DEGTORAD)
This will make your tank accelerate (given that the UP key is pressed). But it would make it accelerate infinitely!! Therefore, you might want to add a force of friction to the velocity, and this you can do by scaling it down by a few percent every frame:
velx = velx * 0.95
vely = vely * 0.95
There, now our tank will have a natural limit to its speed, and more importantly, it will grind to a halt without the thrusting force.
Finally, we want to add our velocity to the position:
posx = posx + velx
posy = posy + vely
But THIS is where we can do our collision check! One popular way of checking if a point is pathable, is to move an item to the point, and then check immediately afterwards to see if its location is equal to the point where we set it. If it is not, it means that something is in the way (a unit, or a cliff edge for instance). You could also just check the pathing for that particular spot using the pathing map (there is a function for this somewhere). In any case, you only integrate velocity if the target spot is pathable:
JASS:
if isPointPahable(posx+velx, posy) then
set posx = posx+velx
endif
if isPointPathable(posx, posy+vely) then
set posy = posy+vely
endif
This is in JASS, but i am sure you will be able to understand it. You don't have to use that function, what i am trying to say is that you only add the velocity to each axis, if it doesn't cause the tank to collide with something. This way, if you run into a wall on your x axis, the tank will still slide along it using whatever y velocity you have.
This can also be used for projectiles!! you first create the projectile using a muzzle velocity in the direction of the pitch and roll of your tank barrel:
xvel = Cos(barrel_pitch*bj_DEGTORAD)*Cos(barrel_yaw*bj_DEGTORAD)
yvel = Cos(barrel_pitch*bj_DEGTORAD)*Sin(barrel_yaw*bj_DEGTORAD)
zvel = Sin(barrel_pitch*bj_DEGTORAD)
So, now we have your starting velocity! The starting position you propably already know how to get, just use a polar coordinate from the turrets position using the turret direction and the barrel length.
Now, at each loop, you first want to make the projectile affected by gravity. We simply do this by substracting gravity from the z velocity:
zvel = zvel - (9.1*INTERVAL)
(you can use any number, but this is the real acceleration by gravity in m/s)
In this case, INTERVAL is your looping rate - if you uptade the coordinates every 0.03 seconds, then you should ofcourse also multiply your speeds with 0.03 aswell! Otherwise they will be too large.
Second, you might want to add air drag to the equation. To do so, just scale all axes by 0.98:
xvel = xvel*0.98
yvel = yvel*0.98
zvel = zvel*0.98
There you go! All the while, you may want to compare the z position with the terrain height! To get the terrain height, just use a dummy location, move it to the point (posx, posy), and use the jass function GetLocationZ(loc) to get the height.
There is propably a lot more to explain, but i reckon you already know some since you made this map. Ask me if you need to know anything more.