Index: proj/src/project/include/scoreboards.h
===================================================================
--- proj/src/project/include/scoreboards.h	(revision 375)
+++ proj/src/project/include/scoreboards.h	(revision 376)
@@ -57,6 +57,26 @@
  */
 void (check_new_score)(highscores_t *p, int score, int time_played);
 /**
+ * @brief Updates highscores text.
+ * @param p     Pointer to highscores.
+ */
+void (highscores_update_text)(highscores_t *p);
+/**
+ * @brief highscore menu state.
+ *
+ * This function allows to check if the mouse is hovering over the back button, and knowing
+ * if it was clicked.
+ * @param   menu    Pointer to highscore
+ * @param   click   0 if mouse right button is clicked, other value otherwise
+ * @return  return 0 if back option is clicked else -1
+ */
+int (highscore_update_state)(highscores_t *p, int click);
+/**
+ * @brief Draw highscore on screen buffer.
+ * @param   p    Pointer to highscores to be drawn
+ */
+void (highscores_draw)(highscores_t *p);
+/**
  * @brief Destruct menu.
  * @param   p   Pointer to menu to destruct
  */
Index: proj/src/project/include/zombies.h
===================================================================
--- proj/src/project/include/zombies.h	(revision 375)
+++ proj/src/project/include/zombies.h	(revision 376)
@@ -22,7 +22,7 @@
  * @brief Zombies ranking.
  * @param zombies_highscore Highscores.
  */
-void (zombies_ranking)(highscores_t *zombie_highscore);
+int (zombies_ranking)(highscores_t *zombie_highscore);
 
 /**
  * @}
Index: proj/src/project/src/scoreboards.c
===================================================================
--- proj/src/project/src/scoreboards.c	(revision 375)
+++ proj/src/project/src/scoreboards.c	(revision 376)
@@ -11,6 +11,12 @@
 
 #define MAX_HIGHSCORES   3 /** @brief Number of scores saved */
 
+static const int W  = 400;
+static const int H  = 80;
+static const int W1 = 200;
+static const int H1 = 60;
+static const int H2 = 100;
+
 struct  score_info {
     int day;
     int month;
@@ -28,7 +34,6 @@
     const font_t *fnt;
     rectangle_t *r[(MAX_HIGHSCORES+1)*3 + 1];
     text_t      *t[(MAX_HIGHSCORES+1)*3 + 1];
-    rectangle_t *frame;
 };
 
 score_info_t* (score_ctor)(int score, int time_played){
@@ -75,9 +80,142 @@
     }
     fclose(f);
 
+    ret->fnt = fnt;
+    const uint16_t Wtotal = (MAX_HIGHSCORES+1)*W1;
+    const uint16_t Htotal = (uint16_t)((MAX_HIGHSCORES+1)*H1);
+    int16_t xi = graph_get_XRes()/2-Wtotal/2+W1/2;
+    int16_t x = xi;
+    int16_t y = graph_get_YRes()/2-Htotal/2-H1/2;
+
+    {
+        rectangle_t *r = rectangle_ctor(x, y, W1, H1);
+        text_t      *t = text_ctor(ret->fnt, "Date");
+        rectangle_set_fill_color   (r, GRAPH_BLACK);
+        rectangle_set_outline_width(r, -2);
+        rectangle_set_outline_color(r, GRAPH_WHITE);
+
+        text_set_pos(t, x + W1/2, y + H1/2);
+        text_set_valign(t, text_valign_center);
+        text_set_halign(t, text_halign_center);
+        text_set_color (t, TEXT_COLOR);
+        ret->r[0] = r;
+        ret->t[0] = t;
+
+        x+=W1;
+
+        r = rectangle_ctor(x, y, W1, H1);
+        t = text_ctor(ret->fnt, "Score");
+        rectangle_set_fill_color   (r, GRAPH_BLACK);
+        rectangle_set_outline_width(r, -2);
+        rectangle_set_outline_color(r, GRAPH_WHITE);
+
+        text_set_pos(t, x + W1/2, y + H1/2);
+        text_set_valign(t, text_valign_center);
+        text_set_halign(t, text_halign_center);
+        text_set_color (t, TEXT_COLOR);
+        ret->r[1] = r;
+        ret->t[1] = t;
+
+        x+=W1;
+
+        r = rectangle_ctor(x, y, W1, H1);
+        t = text_ctor(ret->fnt, "Time Played");
+        rectangle_set_fill_color   (r, GRAPH_BLACK);
+        rectangle_set_outline_width(r, -2);
+        rectangle_set_outline_color(r, GRAPH_WHITE);
+
+        text_set_pos(t, x + W1/2, y + H1/2);
+        text_set_valign(t, text_valign_center);
+        text_set_halign(t, text_halign_center);
+        text_set_color (t, TEXT_COLOR);
+        ret->r[2] = r;
+        ret->t[2] = t;
+
+
+        x = xi;
+    }
+    y+= H1;
+
+     for (int i = 0; i < MAX_HIGHSCORES*3; i++) {
+         rectangle_t *r = rectangle_ctor(x, y, W1, H1);
+         text_t      *t = text_ctor(ret->fnt, "");
+         rectangle_set_fill_color   (r, GRAPH_BLACK);
+         rectangle_set_outline_width(r, -2);
+         rectangle_set_outline_color(r, GRAPH_WHITE);
+
+         text_set_pos(t, x + W1/2, y + H1/2);
+         text_set_valign(t, text_valign_center);
+         text_set_halign(t, text_halign_center);
+         text_set_color (t, TEXT_COLOR);
+
+         x += W1;
+         ret->r[MAX_HIGHSCORES + i] = r;
+         ret->t[MAX_HIGHSCORES + i] = t;
+         if ((i+1) % 3 == 0) {
+             x = xi;
+             y += H1;
+         }
+     }
+     y += H2;
+     x = graph_get_XRes()/2-W/2;
+     {
+         rectangle_t *r = rectangle_ctor(x, y, W, H);
+         text_t      *t = text_ctor(ret->fnt, "Back");
+         rectangle_set_fill_color   (r, GRAPH_BLACK);
+         rectangle_set_outline_width(r, -2);
+         rectangle_set_outline_color(r, GRAPH_WHITE);
+
+         text_set_pos(t, x + W/2, y + H/2);
+         text_set_valign(t, text_valign_center);
+         text_set_halign(t, text_halign_center);
+         text_set_color (t, TEXT_COLOR);
+         ret->r[(MAX_HIGHSCORES+1)*3] = r;
+         ret->t[(MAX_HIGHSCORES+1)*3] = t;
+     }
+
+     highscores_update_text(ret);
+
     return ret;
 }
 
+void (highscores_update_text)(highscores_t *p) {
+    for (int i = 0; i < MAX_HIGHSCORES; i++) {
+        char buffer[20];
+        score_info_t *score = p->highscores[i];
+        sprintf(buffer, "%02d/%02d/%02d %02d:%02d:%02d",
+                    (score->day), (score->month), (score->year),
+                    (score->hour), (score->month), (score->sec));
+
+
+        text_set_string(p->t[MAX_HIGHSCORES + i*3], buffer);
+        sprintf(buffer, "%d", score->score);
+        text_set_string(p->t[MAX_HIGHSCORES + i*3+1], buffer);
+        sprintf(buffer, "%d", score->time_played);
+        text_set_string(p->t[MAX_HIGHSCORES + i*3+2], buffer);
+    }
+}
+
+int (highscore_update_state)(highscores_t *p, int click) {
+    if(!click) return -1;
+    if (rectangle_collide_point(p->r[(MAX_HIGHSCORES+1)*3], *get_mouse_X(), *get_mouse_Y()))
+        return 0;
+    return -1;
+}
+
+void (highscores_draw)(highscores_t *p) {
+    for(size_t i = 0; i < (MAX_HIGHSCORES+1)*3; ++i){
+        rectangle_draw(p->r[i]);
+        text_draw     (p->t[i]);
+    }
+    int x = *get_mouse_X(), y = *get_mouse_Y();
+    if(rectangle_collide_point(p->r[(MAX_HIGHSCORES+1)*3], x, y))
+        rectangle_set_fill_color(p->r[(MAX_HIGHSCORES+1)*3], HIGHLIGHT_COLOR);
+
+    rectangle_draw(p->r[(MAX_HIGHSCORES+1)*3]);
+    text_draw     (p->t[(MAX_HIGHSCORES+1)*3]);
+    rectangle_set_fill_color(p->r[(MAX_HIGHSCORES+1)*3], GRAPH_BLACK);
+}
+
 void (check_new_score)(highscores_t *p, int score, int time_played){
     score_info_t *new_score = score_ctor(score, time_played);
     if (new_score == NULL) return;
Index: proj/src/project/src/zombies.c
===================================================================
--- proj/src/project/src/zombies.c	(revision 375)
+++ proj/src/project/src/zombies.c	(revision 376)
@@ -153,6 +153,70 @@
     return SUCCESS;
 }
 
-void (zombies_ranking)(highscores_t *zombies_highscore) {
+int (zombies_ranking)(highscores_t *zombies_highscore) {
 
+    int r;
+
+    text_t *title     = text_ctor(font_get_default(), "Zombies Ranking");
+    text_set_color(title, TEXT_COLOR);
+    text_set_size(title, 70);
+    text_set_pos(title, graph_get_XRes()/2, graph_get_YRes()*0.17);
+    text_set_valign(title, text_valign_center);
+    text_set_halign(title, text_halign_center);
+
+    highscores_update_text(zombies_highscore);
+
+    //uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
+    uint8_t last_lb = 0;
+    struct packet pp;
+    keys_t *keys = get_key_presses();
+
+    /// loop stuff
+    int click = 0;
+    uint64_t int_vector = 0;
+    int good = true;
+    while (good) {
+        /* Get a request message. */
+        if((r = get_interrupts_vector(&int_vector))) return r;
+        uint32_t n = 1;
+        for (uint8_t i = 0; i < 32; i++, n <<= 1) {
+            if (int_vector & n) {
+                interrupt_handler(i);
+                switch (i) {
+                    case TIMER0_IRQ:
+
+                    graph_clear_screen();
+                    switch(highscore_update_state(zombies_highscore, click)){
+                        case -1: break;
+                        case  0: good = false; break;
+                    }
+                    highscores_draw(zombies_highscore);
+                    text_draw(title);
+
+                    click = 0;
+
+                    sprite_set_pos(sp_crosshair, *get_mouse_X(), *get_mouse_Y());
+                    sprite_draw(sp_crosshair);
+                    graph_draw();
+
+                    break;
+                    case KBC_IRQ:
+                    if (keyboard_get_scancode()[0] == ESC_BREAK_CODE) good = false;
+                    case MOUSE_IRQ:
+                    if (mouse_get_counter_mouse_ih() >= 3) {
+                        mouse_parse_packet(mouse_get_packet_mouse_ih(), &pp);
+                        update_mouse(&pp);
+                        if (!click) click = last_lb ^ keys->lb_pressed && keys->lb_pressed;
+                        last_lb = keys->lb_pressed;
+                        mouse_set_counter_mouse_ih(0);
+                    }
+                    break;
+                    case COM1_IRQ: nctp_ih(); break;
+                }
+            }
+        }
+    }
+
+    text_dtor(title);
+    return 0;
 }
Index: proj/src/Makefile
===================================================================
--- proj/src/Makefile	(revision 375)
+++ proj/src/Makefile	(revision 376)
@@ -12,7 +12,7 @@
 SRCS= list.c queue.c graph.c kbc.c keyboard.c mouse.c utils.c timer.c interrupts_func.c fast_math.c xpm_utils.c rtc.c uart.c makecode_map.c menu.c proj_func.c rectangle.c font.c ent.c proj.c hltp.c zombies.c campaign.c singleplayer.c chat.c scoreboards.c
 IPATHS=-I./project/include -I./libs -I./libs/graph/include -I./libs/kbc/include -I./libs/rtc/include -I./libs/timer/include -I./libs/uart/include -I./libs/classes/include -I./libs/utils/include -I./maps -I./media/xpm
 
-CPPFLAGS += -pedantic ${IPATHS} -D LCOM_MACRO #-D __LCOM_OPTIMIZED__ -Wall -Wextra -Wshadow -Wunreachable-code #-Weverything -Wno-padded -Wno-unused-macros
+CPPFLAGS += -pedantic ${IPATHS} -D LCOM_MACRO -D __LCOM_OPTIMIZED__ -Wall -Wextra -Wshadow -Wunreachable-code #-Weverything -Wno-padded -Wno-unused-macros
 
 DPADD += ${LIBLCF}
 LDADD += -llcf
