Index: proj/include/graph.h
===================================================================
--- proj/include/graph.h	(revision 206)
+++ proj/include/graph.h	(revision 207)
@@ -29,7 +29,7 @@
 int (graph_set_pixel)             (uint16_t x, uint16_t y, uint32_t color);
 int (graph_set_pixel_buffer)      (uint16_t x, uint16_t y, uint32_t color, uint8_t *buf, uint16_t W, uint16_t H);
 int (graph_set_pixel_alpha_buffer)(uint16_t x, uint16_t y, uint8_t alpha, uint8_t *alp_buf, uint16_t W, uint16_t H);
-int (graph_set_pixel_alpha)       (uint16_t x, uint16_t y, uint32_t color, uint8_t alpha);
+//int (graph_set_pixel_alpha)       (uint16_t x, uint16_t y, uint32_t color, uint8_t alpha);
 
 /// SCREEN
 int (graph_clear_screen)(void);
Index: proj/src/font.c
===================================================================
--- proj/src/font.c	(revision 206)
+++ proj/src/font.c	(revision 207)
@@ -201,7 +201,7 @@
     for(int16_t newy = 0; newy < newH; ++newy){
         for(int16_t newx = 0; newx < newW; ++newx){
             uint8_t a = *(alp_new_buf+newx+newy*newW);
-            graph_set_pixel_alpha(initx+newx,inity+newy,p->color, a);
+            if(a < 0x7F) graph_set_pixel(initx+newx,inity+newy,p->color);
         }
     }
     free(alp_new_buf);
Index: proj/src/graph.c
===================================================================
--- proj/src/graph.c	(revision 206)
+++ proj/src/graph.c	(revision 207)
@@ -275,6 +275,7 @@
     memcpy(alp_buf + pos, &alpha, 1);
     return SUCCESS;
 }
+/*
 int (graph_set_pixel_alpha)(uint16_t x, uint16_t y, uint32_t color, uint8_t alpha){
     if (x >= vbe_mem_info.XResolution || y >= vbe_mem_info.YResolution) {
         //printf("%s: invalid pixel.\n", __func__);
@@ -286,11 +287,14 @@
     float a = 1.0-(alpha&0xFF)/(float)0xFF;
     uint8_t r = GET_RED(color)*a + GET_RED(color_)*(1.0-a);
     uint8_t g = GET_GRE(color)*a + GET_GRE(color_)*(1.0-a);
-    uint8_t b = GET_BLU(color)*a + GET_BLU(color_)*(1.0-a);
-    return graph_set_pixel(x,y,SET_RGB(r,g,b));
-    //return set_pixel(x,y,color);
+    uint8_t b = GET_BLU(color)*a + GET_BLU(color_)*(1.0-a); (void)(r*g*b);
+    //return graph_set_pixel(x,y,SET_RGB(r,g,b));
+    color = SET_RGB(r,g,b);
+    //unsigned int pos = (x + y * W) * graph_get_bytes_pixel();
+    memcpy(video_buf + pos, &color, graph_get_bytes_pixel());
+    return SUCCESS;
 }
-
+*/
 int (graph_clear_screen)(void){
     //return graph_paint_screen(BLACK);
     memset(video_buf, 0, graph_get_vram_size());
Index: proj/src/proj.c
===================================================================
--- proj/src/proj.c	(revision 206)
+++ proj/src/proj.c	(revision 207)
@@ -24,6 +24,7 @@
 #include "pistol.h"
 #include "nothing.h"
 #include "bullet.h"
+#include "map.h"
 
 int main(int argc, char* argv[]) {
 
@@ -127,6 +128,10 @@
         graph_draw();
 
         uint32_t refresh_count_value = sys_hz() / REFRESH_RATE;
+
+        basic_sprite_t *bsp_pink = get_map();
+        sprite_t *pink = sprite_ctor(bsp_pink);
+        basic_sprite_dtor(bsp_pink);
     #endif
 
     /// loop stuff
@@ -156,16 +161,23 @@
                                 if (no_interrupts % refresh_count_value == 0) {
                                     update_movement(shooter1);
                                     update_scale();
-                                    ent_set_origin(bullet_get_x(bullet)-ent_get_XLength()/2.0,
-                                                   bullet_get_y(bullet)-ent_get_YLength()/2.0);
+                                    ent_set_origin(gunner_get_x(shooter1)-ent_get_XLength()/2.0,
+                                                   gunner_get_y(shooter1)-ent_get_YLength()/2.0);
 
                                     sprite_set_pos(sp_crosshair, get_mouse_X(), get_mouse_Y());
                                     double angle = get_mouse_angle(shooter1);
                                     gunner_set_angle(shooter1, angle - M_PI_2);
                                     graph_clear_screen();
+
+                                    clock_t t = clock();
+
+                                    sprite_draw(pink);
                                     gunner_draw(shooter2);
                                     gunner_draw(shooter1);
                                     bullet_draw(bullet);
+
+                                    t = clock()-t; printf("%d\n", (t*1000)/CLOCKS_PER_SEC);
+
                                     sprite_draw(sp_crosshair);
                                     graph_draw();
                                 }
@@ -193,6 +205,7 @@
 
     #ifdef TELMO
         gunner_dtor(shooter1); shooter1 = NULL;
+        sprite_dtor(pink); pink = NULL;
     #endif
 
     basic_sprite_dtor(bsp_crosshair); bsp_crosshair = NULL;
Index: proj/src/sprite.c
===================================================================
--- proj/src/sprite.c	(revision 206)
+++ proj/src/sprite.c	(revision 207)
@@ -44,7 +44,7 @@
 struct sprite{
     const basic_sprite_t *bsp;
     int16_t x, y; //position in screen
-    double theta;
+    double theta, s, c;
     double scale;
 };
 
@@ -54,7 +54,7 @@
     ret->bsp = bsp;
     ret->x = 0;
     ret->y = 0;
-    ret->theta = 0.0;
+    sprite_set_angle(ret, 0.0);
     ret->scale = 1.0;
     return ret;
 }
@@ -64,29 +64,25 @@
 }
 
 void (sprite_set_pos)   (sprite_t *p, int16_t x , int16_t y ){ p->x = x; p->y = y; }
-void (sprite_set_angle) (sprite_t *p, double angle          ){ p->theta = angle; }
+void (sprite_set_angle) (sprite_t *p, double angle          ){ p->theta = angle; p->c = fm_cos(p->theta); p->s = fm_sin(p->theta); }
 void (sprite_set_scale) (sprite_t *p, double scale          ){ p->scale = scale; }
 int16_t  (sprite_get_x)(const sprite_t *p){ return p->x; }
 int16_t  (sprite_get_y)(const sprite_t *p){ return p->y; }
 
 void (sprite_src2pic)(const sprite_t *p, int16_t x, int16_t y, int16_t *u, int16_t *v){
-    double s = fm_sin(p->theta);
-    double c = fm_cos(p->theta);
     double dx = (x - p->x)/p->scale;
     double dy = (y - p->y)/p->scale;
-    int16_t du = dx*c - dy*s + 0.5;
-    int16_t dv = dx*s + dy*c + 0.5;
+    int16_t du = dx*p->c - dy*p->s + 0.5;
+    int16_t dv = dx*p->s + dy*p->c + 0.5;
     *u = du + basic_sprite_get_u0(p->bsp);
     *v = dv + basic_sprite_get_v0(p->bsp);
 }
 
 void (sprite_pic2src)(const sprite_t *p, int16_t u, int16_t v, int16_t *x, int16_t *y){
-    double s = fm_sin(p->theta);
-    double c = fm_cos(p->theta);
     int16_t du = u - basic_sprite_get_u0(p->bsp);
     int16_t dv = v - basic_sprite_get_v0(p->bsp);
-    double dx =  du*c + dv*s;
-    double dy = -du*s + dv*c;
+    double dx =  du*p->c + dv*p->s;
+    double dy = -du*p->s + dv*p->c;
     *x = dx*p->scale + 0.5 + p->x;
     *y = dy*p->scale + 0.5 + p->y;
 }
@@ -114,7 +110,8 @@
             sprite_src2pic(p, x, y, &u, &v);
             if(0 <= u && u < w && 0 <= v && v < h){
                 uint32_t c = *(uint32_t*)(map + (v*w + u)*4);
-                graph_set_pixel_alpha(x, y, GET_COLOR(c), GET_ALP(c));
+                if(GET_ALP(c) < 0x7F)
+                    graph_set_pixel(x, y, GET_COLOR(c));
             }
         }
     }
Index: proj/xpm/map.h
===================================================================
--- proj/xpm/map.h	(revision 206)
+++ proj/xpm/map.h	(revision 207)
@@ -5,7 +5,7 @@
 #include "sprite.h"
 
 basic_sprite_t* get_map(void){
-    return basic_sprite_ctor((const char **)map, 639, 511);
+    return basic_sprite_ctor((const char **)map_xpm, 0, 0);
 }
 
 #endif /* end of include guard: MAP_H_INCLUDED */
