diff --git a/xtrn/tankbattle/tankobj.js b/xtrn/tankbattle/tankobj.js
index a890d30b47f74a63fe3d6b7698677bc5a41e528f..fc7f1d55f4607092f9da50fdab9aef509c338f0f 100644
--- a/xtrn/tankbattle/tankobj.js
+++ b/xtrn/tankbattle/tankobj.js
@@ -179,12 +179,13 @@ function Player(name,position,health)
 	this.heading=0;
 	this.turret=0;
 }
-function Shot(heading,coords,range,player)
+function Shot(heading,coords,range,player,color)
 {
 	this.heading=heading;
 	this.coords=coords;
 	this.player=player;
-	this.duration=range;
+	this.color=color;
+	this.range=range;
 }
 function Packet(func)
 {
diff --git a/xtrn/tankbattle/tanks.js b/xtrn/tankbattle/tanks.js
index 76a9c8790400f161af66b692cfbe5b064d9e77b1..79dbca8a5d21acb8c3445a25e217aa522e74618d 100644
--- a/xtrn/tankbattle/tanks.js
+++ b/xtrn/tankbattle/tanks.js
@@ -396,10 +396,12 @@ function playGame(battle)
 	var turretCompass=[0,45,90,135,180,225,270,315];
 	var shots=[];
 
-	/* ms tick between cycles */
-	var tick=.05; 
+	/* ms bulletTick between cycles */
+	var bulletTick=.05; 
+	var shotTick=1;
 	var shotRange=40;
 	var lastUpdate=-1;
+	var lastShot=-1;
 	
 	/* main functions */
 	function init()
@@ -431,7 +433,8 @@ function playGame(battle)
 				moveRight();
 				break;
 			case " ":
-				fireShot();
+				if(system.timer - lastShot >= shotTick)
+					fireShot();
 				break;
 			case "A":
 			case "D":
@@ -458,7 +461,7 @@ function playGame(battle)
 		if(packet)	processData(packet);
 		
 		var difference=system.timer-lastUpdate;
-		if(difference < tick) return;
+		if(difference < bulletTick) return;
 				
 		for(var s=0;s<shots.length;s++) {
 			var shot=shots[s];
@@ -466,34 +469,16 @@ function playGame(battle)
 			unDrawShot(shot);
 			moveShot(shot);
 
-			if(shot.duration == 0) {
+			if(shot.range == 0) {
 				shots.splice(s,1);
 				s--;
 				continue;
 			} 
 			
 			if(checkHit(shot)) {
-				var startHealth=currentPlayer.health;
-				
-				currentPlayer.health-=(shot.duration*1.5);
 				shots.splice(s,1);
 				s--;
-				
-				if(currentPlayer.health<=0) {
-					resetPosition();
-					continue;
-				} 
-				
-				if(currentPlayer.health < 50 && startHealth >= 50) {
-					drawTank(currentPlayer);
-					drawTurret(currentPlayer);
-				}
-				if(currentPlayer.health < 25 && startHealth >= 25) {
-					drawTank(currentPlayer);
-					drawTurret(currentPlayer);
-				}
-			
-				showPlayerInfo();
+				hitPlayer(shot.range);
 				continue;
 			}
 			
@@ -519,6 +504,10 @@ function playGame(battle)
 			drawTank(battle.players[p]);
 			drawTurret(battle.players[p]);
 			break;
+		case "SPLODE":
+			var p=packet.player;
+			killPlayer(battle.players[p]);
+			break;
 		case "TURRET":
 			var p=packet.player;
 			battle.players[p].turret=packet.turret;
@@ -526,7 +515,9 @@ function playGame(battle)
 			drawTurret(battle.players[p]);
 			break;
 		case "SHOT":
-			shots.push(new Shot(packet.heading,packet.coords,shotRange,packet.player));
+			var shot=new Shot(packet.heading,packet.coords,packet.range,packet.player,packet.color);
+			drawShot(shot);
+			shots.push(shot);
 			break;
 		default:
 			log("Unknown tank battle data received");
@@ -542,7 +533,12 @@ function playGame(battle)
 		case "SHOT":
 			data.heading=turretCompass[currentPlayer.turret];
 			data.coords=getShotCoords(data.heading,currentPlayer.coords.x,currentPlayer.coords.y);
+			data.range=shotRange;
+			data.color=currentPlayer.color;
 			break;
+		case "SPLIDE":
+			/* no additional data necessary */
+			break
 		case "TURRET":
 			data.turret=currentPlayer.turret;
 			break;
@@ -680,11 +676,36 @@ function playGame(battle)
 	}
 	function fireShot()
 	{
+		lastShot=system.timer;
 		var heading=turretCompass[currentPlayer.turret];
 		var coords=getShotCoords(heading,currentPlayer.coords.x,currentPlayer.coords.y);
-		shots.push(new Shot(heading,coords,shotRange,currentPlayerID));
+		if(checkPosition(coords.x,coords.y)) {
+			hitPlayer(25);
+			return;
+		}
+		var shot=new Shot(heading,coords,shotRange,currentPlayerID,currentPlayer.color);
+		drawShot(shot);
+		shots.push(shot);
 		send("SHOT");
 	}
+	function hitPlayer(damage)
+	{
+		var startHealth=currentPlayer.health;
+		currentPlayer.health-=(damage);
+		
+		if(currentPlayer.health<=0) {
+			killPlayer(currentPlayer);
+			resetPosition();
+			send("SPLODE");
+		} else if(currentPlayer.health <= 25 && startHealth > 25) {
+			drawTank(currentPlayer);
+			drawTurret(currentPlayer);
+		} else if(currentPlayer.health <= 50 && startHealth > 50) {
+			drawTank(currentPlayer);
+			drawTurret(currentPlayer);
+		}
+		showPlayerInfo();
+	}
 	function getShotCoords(heading,x,y)
 	{
 		switch(heading) {
@@ -696,7 +717,7 @@ function playGame(battle)
 			x+=3;
 			break;
 		case 90:
-			coords.x+=3;
+			x+=3;
 			break;
 		case 135:
 			x+=3;
@@ -799,7 +820,7 @@ function playGame(battle)
 		}
 		shot.coords.x+=newPosition.x;
 		shot.coords.y+=newPosition.y;
-		shot.duration--;
+		shot.range--;
 	}
 	function getRebound(h,pos,x,y)
 	{
@@ -908,6 +929,48 @@ function playGame(battle)
 		if(pos.x > 0 && pos.y > 0) return 135;
 		if(pos.x > 0 && pos.y < 0) return 45;
 	}
+	function killPlayer(player)
+	{
+		var x=player.coords.x;
+		var y=player.coords.y;
+		
+		console.gotoxy(x,y-2); 
+		console.putmsg("\1n\1r\xB0");
+		console.down();
+		console.left(2);
+		console.putmsg("\1n\1r\xB0\xB0\xB0");
+		console.down();
+		console.left(4);
+		console.putmsg("\1n\1r\xB0\xB0\xB0\xB0\xB0");
+		console.down();
+		console.left(4);
+		console.putmsg("\1n\1r\xB0\xB0\xB0");
+		console.down();
+		console.left(2);
+		console.putmsg("\1n\1r\xB0");
+		mswait(150);
+		console.gotoxy(x-1,y-1); 
+		console.putmsg("\1r\1h\xB1\xB1\xB1");
+		console.down();
+		console.left(3);
+		console.putmsg("\1r\1h\xB1\xB1\xB1");
+		console.down();
+		console.left(3);
+		console.putmsg("\1r\1h\xB1\xB1\xB1");
+		mswait(150);
+		console.gotoxy(x,y-1); 
+		console.putmsg("\1y\1h\xB2");
+		console.down();
+		console.left(2);
+		console.putmsg("\1y\1h\xB2\xB2\xB2");
+		console.down();
+		console.left(2);
+		console.putmsg("\1y\1h\xB2");
+		mswait(150);
+		console.gotoxy(x,y); 
+		console.putmsg("\1y\1h\xDB");
+		mswait(150);
+	}
 	function resetPosition()
 	{
 		unDrawTank(currentPlayer);
@@ -978,7 +1041,8 @@ function playGame(battle)
 	function drawShot(shot)
 	{
 		console.gotoxy(shot.coords.x,shot.coords.y);
-		console.putmsg("\1r\1h\xF9");
+		console.putmsg(shot.color + "\1h\xF9");
+		console.home();
 	}
 	function unDrawShot(shot)
 	{
@@ -1050,6 +1114,7 @@ function playGame(battle)
 				console.putmsg("\1h" + color + "\\");
 				break;
 		}
+		console.home();
 	}
 	function drawTank(tank)
 	{