Index: proj/include/proj_func.h
===================================================================
--- proj/include/proj_func.h	(revision 199)
+++ proj/include/proj_func.h	(revision 200)
@@ -3,6 +3,8 @@
 
 #include "ent.h"
 
+#include <stdint.h>
+
 /**
  * @brief Cleans up all memory, unsubscribes interrupts.
  * @return ERROR_CODE code representing the result of the operation, SUCCESS code is returned if everything is OK
@@ -17,8 +19,20 @@
  */
 void update_movement(ent_t *p);
 
+typedef struct keys {
+    uint8_t w_pressed       : 1;
+    uint8_t a_pressed       : 1;
+    uint8_t s_pressed       : 1;
+    uint8_t d_pressed       : 1;
+    uint8_t ctrl_pressed    : 1;
+    uint8_t plus_pressed    : 1;
+    uint8_t minus_pressed   : 1;
+} keys_t;
+
 void update_mouse_position(struct packet *p);
 
+void update_scale(void);
+
 int32_t get_mouse_X(void);
 
 int32_t get_mouse_Y(void);
Index: proj/include/proj_macros.h
===================================================================
--- proj/include/proj_macros.h	(revision 199)
+++ proj/include/proj_macros.h	(revision 200)
@@ -4,14 +4,20 @@
 #include "graph_macros.h"
 
 // WASD Movement Keys
-#define W_MAKE_CODE     0x11    /** @brief W Make Code */
-#define W_BREAK_CODE    0x91    /** @brief W Break Code */
-#define A_MAKE_CODE     0x1E    /** @brief A Make Code */
-#define A_BREAK_CODE    0x9E    /** @brief A Break Code */
-#define S_MAKE_CODE     0x1F    /** @brief S Make Code */
-#define S_BREAK_CODE    0x9F    /** @brief S Break Code */
-#define D_MAKE_CODE     0x20    /** @brief D Make Code */
-#define D_BREAK_CODE    0xA0    /** @brief D Break Code */
+#define W_MAKE_CODE         0x11    /** @brief W Make Code */
+#define W_BREAK_CODE        0x91    /** @brief W Break Code */
+#define A_MAKE_CODE         0x1E    /** @brief A Make Code */
+#define A_BREAK_CODE        0x9E    /** @brief A Break Code */
+#define S_MAKE_CODE         0x1F    /** @brief S Make Code */
+#define S_BREAK_CODE        0x9F    /** @brief S Break Code */
+#define D_MAKE_CODE         0x20    /** @brief D Make Code */
+#define D_BREAK_CODE        0xA0    /** @brief D Break Code */
+#define CTRL_MAKE_CODE      0x1D    /** @brief CTRL Make Code */
+#define CTRL_BREAK_CODE     0x9D    /** @brief CTRL Break Code */
+#define PLUS_MAKE_CODE      0x1A    /** @brief Plus (+) Make Code */
+#define PLUS_BREAK_CODE      0x9A   /** @brief Plus (+) Break Code */
+#define MINUS_MAKE_CODE     0x35    /** @brief Minus (-) Make Code */
+#define MINUS_BREAK_CODE    0xB5    /** @brief Minus (-) Break Code */
 
 // Movement Directions
 #define UP      -1  /** @brief Moving to the top side of screen */
@@ -29,5 +35,8 @@
 
 //Graphics mode
 #define GRAPH_MODE      DIRECT_1280_1024_888 /** @brief Graphic mode used */
+#define MIN_SCALE       0.3                  /** @brief Minimum zoom */
+#define DEFAULT_SCALE   1.0                  /** @brief Default zoom */
+#define MAX_SCALE       10.0                 /** @brief Maximum zoom */
 
 #endif /* end of include guard: PROJ_MACROS_H_INCLUDED */
Index: proj/include/utils.h
===================================================================
--- proj/include/utils.h	(revision 199)
+++ proj/include/utils.h	(revision 200)
@@ -49,5 +49,21 @@
  */
 int32_t max(int32_t a, int32_t b);
 
+/**
+ * @brief Gets the minimum value out of two doubles.
+ * @param a     First value
+ * @param b     Second value
+ * @return  The minimum of the two values
+ */
+double min_d(double a, double b);
 
+/**
+ * @brief Gets the maximum value out of two doubles.
+ * @param a     First value
+ * @param b     Second value
+ * @return  The maximum of the two values
+ */
+double max_d(double a, double b);
+
+
 #endif //UTILS_H_INCLUDED
Index: proj/src/proj.c
===================================================================
--- proj/src/proj.c	(revision 199)
+++ proj/src/proj.c	(revision 200)
@@ -121,6 +121,8 @@
         ent_draw(shooter1);
         sprite_draw(sp_crosshair);
         graph_draw();
+
+        uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
     #endif
 
     /// loop stuff
@@ -147,9 +149,9 @@
                             if ((scancode[0]) == ESC_BREAK_CODE) good = 0;
                             #ifdef TELMO
                             if (i == 0) {
-                                uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
                                 if (no_interrupts % refresh_count_value == 0) {
                                     update_movement(shooter1);
+                                    update_scale();
                                     ent_set_origin(ent_get_x(shooter1)-ent_get_XLength()/2.0,
                                                    ent_get_y(shooter1)-ent_get_YLength()/2.0);
 
@@ -182,24 +184,6 @@
         } else { /* received standart message, not a notification */
             /* no standart message expected: do nothing */
         }
-        #ifdef TELMO
-            switch (get_hor_movement()) {
-                case LEFT:
-                    printf("GOING LEFT.\n");
-                    break;
-                case RIGHT:
-                    printf("GOING RIGHT.\n");
-                    break;
-            }
-            switch (get_ver_movement()) {
-                case UP:
-                    printf("GOING UP.\n");
-                    break;
-                case DOWN:
-                    printf("GOING DOWN.\n");
-                    break;
-            }
-        #endif
     }
 
     #ifdef TELMO
Index: proj/src/proj_func.c
===================================================================
--- proj/src/proj_func.c	(revision 199)
+++ proj/src/proj_func.c	(revision 200)
@@ -8,6 +8,7 @@
 #include "errors.h"
 #include "proj_macros.h"
 #include "utils.h"
+#include "ent.h"
 
 #include "kbc_macros.h"
 
@@ -24,23 +25,29 @@
 }
 
 static int hor_mov = REST, ver_mov = REST;
+static keys_t key_presses;
 
 void update_key_presses(void) {
-    static int w_pressed = 0, a_pressed = 0, s_pressed = 0, d_pressed = 0;
     if (sz == 1) {
         switch(scancode[0]) {
-        case W_MAKE_CODE  : w_pressed = 1;      break;
-        case W_BREAK_CODE : w_pressed = 0;      break;
-        case A_MAKE_CODE  : a_pressed = 1;      break;
-        case A_BREAK_CODE : a_pressed = 0;      break;
-        case S_MAKE_CODE  : s_pressed = 1;      break;
-        case S_BREAK_CODE : s_pressed = 0;      break;
-        case D_MAKE_CODE  : d_pressed = 1;      break;
-        case D_BREAK_CODE : d_pressed = 0;      break;
+        case W_MAKE_CODE        : key_presses.w_pressed     = 1;        break;
+        case W_BREAK_CODE       : key_presses.w_pressed     = 0;        break;
+        case A_MAKE_CODE        : key_presses.a_pressed     = 1;        break;
+        case A_BREAK_CODE       : key_presses.a_pressed     = 0;        break;
+        case S_MAKE_CODE        : key_presses.s_pressed     = 1;        break;
+        case S_BREAK_CODE       : key_presses.s_pressed     = 0;        break;
+        case D_MAKE_CODE        : key_presses.d_pressed     = 1;        break;
+        case D_BREAK_CODE       : key_presses.d_pressed     = 0;        break;
+        case CTRL_MAKE_CODE     : key_presses.ctrl_pressed  = 1;        break;
+        case CTRL_BREAK_CODE    : key_presses.ctrl_pressed  = 0;        break;
+        case PLUS_MAKE_CODE     : key_presses.plus_pressed  = 1;        break;
+        case PLUS_BREAK_CODE    : key_presses.plus_pressed  = 0;        break;
+        case MINUS_MAKE_CODE    : key_presses.minus_pressed = 1;        break;
+        case MINUS_BREAK_CODE   : key_presses.minus_pressed = 0;        break;
         }
     }
-    ver_mov = s_pressed - w_pressed;
-    hor_mov = d_pressed - a_pressed;
+    ver_mov = key_presses.s_pressed - key_presses.w_pressed;
+    hor_mov = key_presses.d_pressed - key_presses.a_pressed;
 }
 
 void update_movement(ent_t *p) {
@@ -48,6 +55,27 @@
     ent_set_pos(p, ent_get_x(p) + speed * hor_mov, ent_get_y(p) + speed * ver_mov);
 }
 
+void update_scale(void) {
+    static uint8_t last_plus = 0, last_minus = 0;
+    if (key_presses.ctrl_pressed) {
+        if (key_presses.plus_pressed && !last_plus) {
+            double scale = ent_get_scale();
+            scale *= 1.1;
+            if (scale <= MAX_SCALE) ent_set_scale(scale);
+        }
+        else if (key_presses.minus_pressed && !last_minus) {
+            double scale = ent_get_scale();
+            scale /= 1.1;
+            if (scale >= MIN_SCALE) ent_set_scale(scale);
+        }
+
+        printf("SCALE: %d\n", (int)(ent_get_scale()*1000));
+    }
+
+    last_plus = key_presses.plus_pressed;
+    last_minus = key_presses.minus_pressed;
+}
+
 static int32_t mouse_x = 0, mouse_y = 0;
 
 void update_mouse_position(struct packet *p) {
Index: proj/src/utils.c
===================================================================
--- proj/src/utils.c	(revision 199)
+++ proj/src/utils.c	(revision 200)
@@ -33,3 +33,6 @@
 
 int32_t min(int32_t a, int32_t b){ return (b < a ? b : a); }
 int32_t max(int32_t a, int32_t b){ return (a < b ? b : a); }
+
+double min_d(double a, double b){ return (b < a ? b : a); }
+double max_d(double a, double b){ return (a < b ? b : a); }
