Index: common/Message.h
===================================================================
--- common/Message.h	(revision e1f78f50137f81bd57dea229db7bca7967c567c6)
+++ common/Message.h	(revision 8dad966b0ae3cefcc8ff6286222bcc9ce0f7c03a)
@@ -2,17 +2,19 @@
 #define _MESSAGE_H
 
-#define MSG_TYPE_REGISTER      1
-#define MSG_TYPE_LOGIN         2
-#define MSG_TYPE_LOGOUT        3
-#define MSG_TYPE_CHAT          4
-#define MSG_TYPE_PLAYER        5  // server sends this to update player positions
-#define MSG_TYPE_PLAYER_MOVE   6  // client sends this when a player wants to move
-#define MSG_TYPE_OBJECT        7
-#define MSG_TYPE_REMOVE_OBJECT 8
-#define MSG_TYPE_PICKUP_FLAG   9
-#define MSG_TYPE_DROP_FLAG     10
-#define MSG_TYPE_SCORE         11
-#define MSG_TYPE_START_ATTACK  12
-#define MSG_TYPE_ATTACK        13
+#define MSG_TYPE_REGISTER          1
+#define MSG_TYPE_LOGIN             2
+#define MSG_TYPE_LOGOUT            3
+#define MSG_TYPE_CHAT              4
+#define MSG_TYPE_PLAYER            5  // server sends this to update player positions
+#define MSG_TYPE_PLAYER_MOVE       6  // client sends this when a player wants to move
+#define MSG_TYPE_OBJECT            7
+#define MSG_TYPE_REMOVE_OBJECT     8
+#define MSG_TYPE_PICKUP_FLAG       9
+#define MSG_TYPE_DROP_FLAG         10
+#define MSG_TYPE_SCORE             11
+#define MSG_TYPE_START_ATTACK      12
+#define MSG_TYPE_ATTACK            13
+#define MSG_TYPE_PROJECTILE        14
+#define MSG_TYPE_REMOVE_PROJECTILE 14
 
 typedef struct
Index: common/Player.cpp
===================================================================
--- common/Player.cpp	(revision e1f78f50137f81bd57dea229db7bca7967c567c6)
+++ common/Player.cpp	(revision 8dad966b0ae3cefcc8ff6286222bcc9ce0f7c03a)
@@ -16,4 +16,6 @@
    this->pos.y = this->target.y = 0;
    this->timeLastUpdated = 0;
+   this->timeAttackStarted = 0;
+   this->isAttacking = false;
 
    this->playerClass = CLASS_NONE;
@@ -22,4 +24,5 @@
    this->attackType = ATTACK_NONE;
    this->damage = 0;
+   this->attackCooldown = 0;
    this->team = 0;   // blue team by default
    this->hasBlueFlag = false;
@@ -38,4 +41,6 @@
    this->target.y = p.target.y;
    this->timeLastUpdated = p.timeLastUpdated;
+   this->timeAttackStarted = p.timeAttackStarted;
+   this->isAttacking = p.isAttacking;
 
    this->playerClass = p.playerClass;
@@ -44,4 +49,5 @@
    this->attackType = p.attackType;
    this->damage = p.damage;
+   this->attackCooldown = p.attackCooldown;
    this->team = p.team;
    this->hasBlueFlag = p.hasBlueFlag;
@@ -57,4 +63,7 @@
    this->pos.x = this->target.x = 200;
    this->pos.y = this->target.y = 200;
+   this->timeLastUpdated = 0;
+   this->timeAttackStarted = 0;
+   this->isAttacking = false;
 
    this->playerClass = CLASS_NONE;
@@ -63,4 +72,5 @@
    this->attackType = ATTACK_NONE;
    this->damage = 0;
+   this->attackCooldown = 0;
    this->team = 0;   // blue team by default
    this->hasBlueFlag = false;
@@ -87,7 +97,8 @@
       case CLASS_WARRIOR:
          this->playerClass = CLASS_WARRIOR;
-         this->maxHealth = this->health = 100;
+         this->maxHealth = this->health = 120;
          this->attackType = ATTACK_MELEE;
          this->damage = 10;
+         this->attackCooldown = 800;
          break;
       case CLASS_RANGER:
@@ -96,4 +107,5 @@
          this->attackType = ATTACK_RANGED;
          this->damage = 6;
+         this->attackCooldown = 1000;
          break;
       case CLASS_NONE:
Index: common/Player.h
===================================================================
--- common/Player.h	(revision e1f78f50137f81bd57dea229db7bca7967c567c6)
+++ common/Player.h	(revision 8dad966b0ae3cefcc8ff6286222bcc9ce0f7c03a)
@@ -58,4 +58,7 @@
    POSITION target;
    unsigned long long timeLastUpdated;
+   unsigned long long timeAttackStarted;
+   bool isAttacking;
+   int targetPlayer;
 
    int playerClass;
@@ -64,4 +67,5 @@
    int attackType;
    int damage;
+   unsigned long long attackCooldown;
    int team; // 0 is blue, 1 is red
    bool hasBlueFlag;
