Index: common/Common.cpp
===================================================================
--- common/Common.cpp	(revision ab8fd4016449008d0189af819837030c163e458a)
+++ common/Common.cpp	(revision 0693e2599655a2993d6f13aab9e37a08c4d2e0ac)
@@ -11,4 +11,20 @@
 
 using namespace std;
+
+FLOAT_POSITION POSITION::toFloat() {
+   FLOAT_POSITION floatPosition;
+   floatPosition.x = x;
+   floatPosition.y = y;
+
+   return floatPosition;
+}
+
+POSITION FLOAT_POSITION::toInt() {
+   POSITION position;
+   position.x = x;
+   position.y = y;
+
+   return position;
+}
 
 void set_nonblock(int sock)
@@ -58,2 +74,24 @@
    return sqrt( pow(xDiff,2) + pow(yDiff,2) );   
 }
+
+POSITION screenToMap(POSITION pos)
+{
+   pos.x = pos.x-300;
+   pos.y = pos.y-100;
+
+   if (pos.x < 0 || pos.y < 0)
+   {
+      pos.x = -1;
+      pos.y = -1;
+   }
+
+   return pos;
+}
+
+POSITION mapToScreen(POSITION pos)
+{
+   pos.x = pos.x+300;
+   pos.y = pos.y+100;
+
+   return pos;
+}
Index: common/Common.h
===================================================================
--- common/Common.h	(revision ab8fd4016449008d0189af819837030c163e458a)
+++ common/Common.h	(revision 0693e2599655a2993d6f13aab9e37a08c4d2e0ac)
@@ -16,26 +16,24 @@
 using namespace std;
 
-typedef struct
-{
+struct FLOAT_POSITION;
+
+struct POSITION {
+   int x;
+   int y;
+   FLOAT_POSITION toFloat();
+};
+
+struct FLOAT_POSITION {
    float x;
    float y;
-} FLOAT_POSITION;
-
-typedef struct
-{
-   int x;
-   int y;
-   FLOAT_POSITION toFloat() {
-      FLOAT_POSITION floatPosition;
-      floatPosition.x = x;
-      floatPosition.y = y;
-
-      return floatPosition;
-   }
-} POSITION;
+   POSITION toInt();
+};
 
 void set_nonblock(int sock);
 unsigned long long getCurrentMillis();
 string getCurrentDateTimeString();
+
+POSITION screenToMap(POSITION pos);
+POSITION mapToScreen(POSITION pos);
 float posDistance(FLOAT_POSITION pos1, FLOAT_POSITION pos2);
 
Index: common/Game.cpp
===================================================================
--- common/Game.cpp	(revision ab8fd4016449008d0189af819837030c163e458a)
+++ common/Game.cpp	(revision 0693e2599655a2993d6f13aab9e37a08c4d2e0ac)
@@ -1,3 +1,7 @@
 #include "Game.h"
+
+#include <allegro5/allegro_primitives.h>
+
+#include "Common.h"
 
 using namespace std;
@@ -74,2 +78,60 @@
    this->blueScore = score;
 }
+
+void Game::drawPlayers(ALLEGRO_FONT* font, unsigned int curPlayerId) {
+   map<unsigned int, Player*>::iterator it;
+
+   Player* p;
+   POSITION pos;
+   ALLEGRO_COLOR color;
+
+   for(it = players.begin(); it != players.end(); it++)
+   {
+      p = it->second;
+
+      if (p->isDead)
+         continue;
+
+      pos = mapToScreen(p->pos.toInt());
+
+      if (p->id == curPlayerId)
+         al_draw_filled_circle(pos.x, pos.y, 14, al_map_rgb(0, 0, 0));
+      
+      if (p->team == 0)
+         color = al_map_rgb(0, 0, 255);
+      else if (p->team == 1)
+         color = al_map_rgb(255, 0, 0);
+      
+      al_draw_filled_circle(pos.x, pos.y, 12, color);
+
+      // draw player class
+      int fontHeight = al_get_font_line_height(font);
+
+      string strClass;
+      switch (p->playerClass) {
+      case Player::CLASS_WARRIOR:
+         strClass = "W";
+         break;
+      case Player::CLASS_RANGER:
+         strClass = "R";
+         break;
+      case Player::CLASS_NONE:
+         strClass = "";
+         break;
+      default:
+         strClass = "";
+         break;
+      }
+      al_draw_text(font, al_map_rgb(0, 0, 0), pos.x, pos.y-fontHeight/2, ALLEGRO_ALIGN_CENTRE, strClass.c_str());
+
+      // draw player health
+      al_draw_filled_rectangle(pos.x-12, pos.y-24, pos.x+12, pos.y-16, al_map_rgb(0, 0, 0));
+      if (p->maxHealth != 0)
+         al_draw_filled_rectangle(pos.x-11, pos.y-23, pos.x-11+(22*p->health)/p->maxHealth, pos.y-17, al_map_rgb(255, 0, 0));
+
+      if (p->hasBlueFlag)
+         al_draw_filled_rectangle(pos.x+4, pos.y-18, pos.x+18, pos.y-4, al_map_rgb(0, 0, 255));
+      else if (p->hasRedFlag)
+         al_draw_filled_rectangle(pos.x+4, pos.y-18, pos.x+18, pos.y-4, al_map_rgb(255, 0, 0));
+   }
+}
Index: common/Game.h
===================================================================
--- common/Game.h	(revision ab8fd4016449008d0189af819837030c163e458a)
+++ common/Game.h	(revision 0693e2599655a2993d6f13aab9e37a08c4d2e0ac)
@@ -13,4 +13,6 @@
 #include <string>
 #include <map>
+
+#include <allegro5/allegro_font.h>
 
 #include "Player.h"
@@ -46,4 +48,6 @@
    void setBlueScore(int score);
    void setRedScore(int score);
+
+   void drawPlayers(ALLEGRO_FONT* font, unsigned int curPlayerId);
 };
 
