]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
sound direction fix (negated yaw angle), submitted by div0
[xonotic/darkplaces.git] / cl_screen.c
index ef2bf7800d6cf1d6e9534d179d0891b8f5535eb1..20f4ac79ee6d5960d137b083827f0ec8b35b58a6 100644 (file)
@@ -3,6 +3,7 @@
 #include "cl_video.h"
 #include "jpeg.h"
 #include "cl_collision.h"
+#include "csprogs.h"
 
 cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"};
 cvar_t scr_fov = {CVAR_SAVE, "fov","90"};      // 1 - 170
@@ -14,14 +15,15 @@ cvar_t scr_centertime = {0, "scr_centertime","2"};
 cvar_t scr_showram = {CVAR_SAVE, "showram","1"};
 cvar_t scr_showturtle = {CVAR_SAVE, "showturtle","0"};
 cvar_t scr_showpause = {CVAR_SAVE, "showpause","1"};
+cvar_t scr_showbrand = {0, "showbrand","0"};
 cvar_t scr_printspeed = {0, "scr_printspeed","8"};
 cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640"};
 cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480"};
-cvar_t vid_pixelaspect = {CVAR_SAVE, "vid_pixelaspect", "1"};
-cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"};
+cvar_t vid_pixelheight = {CVAR_SAVE, "vid_pixelheight", "1"};
+cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","1"};
 cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"};
 cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2"};
-cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
+// scr_screenshot_name is defined in fs.c
 cvar_t cl_capturevideo = {0, "cl_capturevideo", "0"};
 cvar_t cl_capturevideo_sound = {0, "cl_capturevideo_sound", "0"};
 cvar_t cl_capturevideo_fps = {0, "cl_capturevideo_fps", "30"};
@@ -46,7 +48,7 @@ static void R_Envmap_f (void);
 void R_ClearScreen(void);
 
 // color tag printing
-static vec4_t _draw_colors[] =
+static vec4_t string_colors[] =
 {
        // Quake3 colors
        // LordHavoc: why on earth is cyan before magenta in Quake3?
@@ -58,7 +60,10 @@ static vec4_t _draw_colors[] =
        {0.0, 0.0, 1.0, 1.0}, // blue
        {0.0, 1.0, 1.0, 1.0}, // cyan
        {1.0, 0.0, 1.0, 1.0}, // magenta
-       {1.0, 1.0, 1.0, 1.0}  // white
+       {1.0, 1.0, 1.0, 1.0}, // white
+       // [515]'s BX_COLOREDTEXT extension
+       {1.0, 1.0, 1.0, 0.5}, // half transparent
+       {0.5, 0.5, 0.5, 1.0}  // half brightness
        // Black's color table
        //{1.0, 1.0, 1.0, 1.0},
        //{1.0, 0.0, 0.0, 1.0},
@@ -70,9 +75,7 @@ static vec4_t _draw_colors[] =
        //{0.1, 0.1, 0.1, 1.0}
 };
 
-#define _draw_colors_count     (sizeof(_draw_colors) / sizeof(vec4_t))
-#define _draw_color_tag                '^'
-#define _draw_color_default 7
+#define STRING_COLORS_COUNT    (sizeof(string_colors) / sizeof(vec4_t))
 
 // color is read and changed in the end
 void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float scalex, float scaley, float basered, float basegreen, float baseblue, float basealpha, int flags, int *outcolor )
@@ -83,21 +86,21 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
        const char *start, *current;
 
        if( !outcolor || *outcolor == -1 ) {
-               colorindex = _draw_color_default;
+               colorindex = STRING_COLOR_DEFAULT;
        } else {
                colorindex = *outcolor;
        }
-       color = _draw_colors[colorindex];
+       color = string_colors[colorindex];
 
        if( maxlen < 1)
-               len = strlen( text );
+               len = (int)strlen( text );
        else
-               len = min( maxlen, (signed) strlen( text ) );
+               len = min( maxlen, (int) strlen( text ) );
 
        start = current = text;
        while( len > 0 ) {
                // check for color control char
-               if( *current == _draw_color_tag ) {
+               if( *current == STRING_COLOR_TAG ) {
                        // get next char
                        current++;
                        len--;
@@ -105,7 +108,7 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
                                break;
                        }
                        // display the tag char?
-                       if( *current == _draw_color_tag ) {
+                       if( *current == STRING_COLOR_TAG ) {
                                // only display one of the two
                                start = current;
                                // get the next char
@@ -116,7 +119,7 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
                                do {
                                        colorindex = colorindex * 10 + (*current - '0');
                                        // only read as long as it makes a valid index
-                                       if( colorindex >= _draw_colors_count ) {
+                                       if( colorindex >= (int)STRING_COLORS_COUNT ) {
                                                // undo the last operation
                                                colorindex /= 10;
                                                break;
@@ -125,13 +128,13 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
                                        len--;
                                } while( len > 0 && '0' <= *current && *current <= '9' );
                                // set the color
-                               color = _draw_colors[colorindex];
-                               // we jump over the color tag 
+                               color = string_colors[colorindex];
+                               // we jump over the color tag
                                start = current;
                        }
                }
                // go on and read normal text in until the next control char
-               while( len > 0 && *current != _draw_color_tag ) {
+               while( len > 0 && *current != STRING_COLOR_TAG ) {
                        current++;
                        len--;
                }
@@ -160,7 +163,7 @@ CENTER PRINTING
 ===============================================================================
 */
 
-char           scr_centerstring[1024];
+char           scr_centerstring[MAX_INPUTLINE];
 float          scr_centertime_start;   // for slow victory printing
 float          scr_centertime_off;
 int                    scr_center_lines;
@@ -198,6 +201,7 @@ void SCR_DrawCenterString (void)
        int             l;
        int             x, y;
        int             remaining;
+       int             color;
 
 // the finale prints the characters one at a time
        if (cl.intermission)
@@ -208,11 +212,15 @@ void SCR_DrawCenterString (void)
        scr_erase_center = 0;
        start = scr_centerstring;
 
+       if (remaining < 1)
+               return;
+
        if (scr_center_lines <= 4)
                y = vid_conheight.integer*0.35;
        else
                y = 48;
 
+       color = -1;
        do
        {
        // scan the width of the line
@@ -224,7 +232,7 @@ void SCR_DrawCenterString (void)
                {
                        if (remaining < l)
                                l = remaining;
-                       DrawQ_String(x, y, start, l, 8, 8, 1, 1, 1, 1, 0);
+                       DrawQ_ColoredString(x, y, start, l, 8, 8, 1, 1, 1, 1, 0, &color);
                        remaining -= l;
                        if (remaining <= 0)
                                return;
@@ -327,9 +335,61 @@ void SCR_DrawPause (void)
        DrawQ_Pic ((vid_conwidth.integer - pic->width)/2, (vid_conheight.integer - pic->height)/2, "gfx/pause", 0, 0, 1, 1, 1, 1, 0);
 }
 
+/*
+==============
+SCR_DrawBrand
+==============
+*/
+void SCR_DrawBrand (void)
+{
+       cachepic_t      *pic;
+       float           x, y;
+
+       if (!scr_showbrand.value)
+               return;
 
+       pic = Draw_CachePic ("gfx/brand", true);
 
+       switch ((int)scr_showbrand.value)
+       {
+       case 1: // bottom left
+               x = 0;
+               y = vid_conheight.integer - pic->height;
+               break;
+       case 2: // bottom centre
+               x = (vid_conwidth.integer - pic->width) / 2;
+               y = vid_conheight.integer - pic->height;
+               break;
+       case 3: // bottom right
+               x = vid_conwidth.integer - pic->width;
+               y = vid_conheight.integer - pic->height;
+               break;
+       case 4: // centre right
+               x = vid_conwidth.integer - pic->width;
+               y = (vid_conheight.integer - pic->height) / 2;
+               break;
+       case 5: // top right
+               x = vid_conwidth.integer - pic->width;
+               y = 0;
+               break;
+       case 6: // top centre
+               x = (vid_conwidth.integer - pic->width) / 2;
+               y = 0;
+               break;
+       case 7: // top left
+               x = 0;
+               y = 0;
+               break;
+       case 8: // centre left
+               x = 0;
+               y = (vid_conheight.integer - pic->height) / 2;
+               break;
+       default:
+               return;
+       }
 
+       DrawQ_Pic (x, y, "gfx/brand", 0, 0, 1, 1, 1, 1, 0);
+}
 
 //=============================================================================
 
@@ -427,12 +487,13 @@ void R_TimeReport(char *desc)
        if (!r_timereport_active || r_showtrispass)
                return;
 
+       qglFinish();
        r_timereport_temp = r_timereport_current;
        r_timereport_current = Sys_DoubleTime();
        t = (int) ((r_timereport_current - r_timereport_temp) * 1000000.0);
 
        dpsnprintf(tempbuf, sizeof(tempbuf), "%8i %s", t, desc);
-       length = strlen(tempbuf);
+       length = (int)strlen(tempbuf);
        while (length < 20)
                tempbuf[length++] = ' ';
        tempbuf[length] = 0;
@@ -462,43 +523,17 @@ void R_TimeReport_Start(void)
        {
                speedstringcount = 0;
                sprintf(r_speeds_string + strlen(r_speeds_string), "org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\n", r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], r_viewforward[0], r_viewforward[1], r_viewforward[2]);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "world:%6i faces%6i nodes%6i leafs%6i dlitwalls\n", c_faces, c_nodes, c_leafs, c_light_polys);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "%5i models%5i bmodels%5i sprites%6i particles%4i dlights\n", c_models, c_bmodels, c_sprites, c_particles, c_dlights);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "%6i modeltris%6i meshs%6i meshtris\n", c_alias_polys, c_meshs, c_meshelements / 3);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "bloom %s: %i copies (%i pixels) %i draws (%i pixels)\n", c_bloom ? "active" : "inactive", c_bloomcopies, c_bloomcopypixels, c_bloomdraws, c_bloomdrawpixels);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "realtime lighting:%4i lights%4i clears%4i scissored\n", c_rt_lights, c_rt_clears, c_rt_scissored);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n", c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris);
-               sprintf(r_speeds_string + strlen(r_speeds_string), "precomputed: %6i shadowmeshes%6i shadowtris\n", c_rtcached_shadowmeshes, c_rtcached_shadowtris);
-
-               c_alias_polys = 0;
-               c_light_polys = 0;
-               c_faces = 0;
-               c_nodes = 0;
-               c_leafs = 0;
-               c_models = 0;
-               c_bmodels = 0;
-               c_sprites = 0;
-               c_particles = 0;
-               c_dlights = 0;
-               c_meshs = 0;
-               c_meshelements = 0;
-               c_rt_lights = 0;
-               c_rt_clears = 0;
-               c_rt_scissored = 0;
-               c_rt_shadowmeshes = 0;
-               c_rt_shadowtris = 0;
-               c_rt_lightmeshes = 0;
-               c_rt_lighttris = 0;
-               c_rtcached_shadowmeshes = 0;
-               c_rtcached_shadowtris = 0;
-               c_bloom = 0;
-               c_bloomcopies = 0;
-               c_bloomcopypixels = 0;
-               c_bloomdraws = 0;
-               c_bloomdrawpixels = 0;
+               sprintf(r_speeds_string + strlen(r_speeds_string), "%5i entities%6i surfaces%6i triangles%5i leafs%5i portals%6i particles\n", renderstats.entities, renderstats.entities_surfaces, renderstats.entities_triangles, renderstats.world_leafs, renderstats.world_portals, renderstats.particles);
+               sprintf(r_speeds_string + strlen(r_speeds_string), "%4i lights%4i clears%4i scissored%7i light%7i shadow%7i dynamic\n", renderstats.lights, renderstats.lights_clears, renderstats.lights_scissored, renderstats.lights_lighttriangles, renderstats.lights_shadowtriangles, renderstats.lights_dynamicshadowtriangles);
+               if (renderstats.bloom)
+                       sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles bloompixels%8i copied%8i drawn\n", renderstats.meshes, renderstats.meshes_elements / 3, renderstats.bloom_copypixels, renderstats.bloom_drawpixels);
+               else
+                       sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles\n", renderstats.meshes, renderstats.meshes_elements / 3);
 
                r_timereport_start = Sys_DoubleTime();
        }
+
+       memset(&renderstats, 0, sizeof(renderstats));
 }
 
 void R_TimeReport_End(void)
@@ -566,11 +601,12 @@ void CL_Screen_Init(void)
        Cvar_RegisterVariable (&scr_showram);
        Cvar_RegisterVariable (&scr_showturtle);
        Cvar_RegisterVariable (&scr_showpause);
+       Cvar_RegisterVariable (&scr_showbrand);
        Cvar_RegisterVariable (&scr_centertime);
        Cvar_RegisterVariable (&scr_printspeed);
        Cvar_RegisterVariable (&vid_conwidth);
        Cvar_RegisterVariable (&vid_conheight);
-       Cvar_RegisterVariable (&vid_pixelaspect);
+       Cvar_RegisterVariable (&vid_pixelheight);
        Cvar_RegisterVariable (&scr_screenshot_jpeg);
        Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
        Cvar_RegisterVariable (&scr_screenshot_gamma);
@@ -609,7 +645,7 @@ void DrawQ_String_Real(float x, float y, const char *string, int maxlen, float s
        if (alpha < (1.0f / 255.0f))
                return;
        if (maxlen < 1)
-               len = strlen(string);
+               len = (int)strlen(string);
        else
                for (len = 0;len < maxlen && string[len];len++);
        for (;len > 0 && string[0] == ' ';string++, x += scalex, len--);
@@ -625,7 +661,7 @@ void DrawQ_String_Real(float x, float y, const char *string, int maxlen, float s
        green = bound(0, green, 1);
        blue = bound(0, blue, 1);
        alpha = bound(0, alpha, 1);
-       dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
        dq->size = size;
        dq->command = DRAWQUEUE_STRING;
        dq->flags = flags;
@@ -702,7 +738,7 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
        size += sizeof(float[4]) * mesh->num_vertices;
        if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
                return;
-       dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
        dq->size = size;
        dq->command = DRAWQUEUE_MESH;
        dq->flags = flags;
@@ -712,14 +748,94 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
        dq->scalex = 0;
        dq->scaley = 0;
        p = (void *)(dq + 1);
-       m = p;p = (qbyte*)p + sizeof(drawqueuemesh_t);
+       m = (drawqueuemesh_t *)p;p = (unsigned char*)p + sizeof(drawqueuemesh_t);
+       m->num_triangles = mesh->num_triangles;
+       m->num_vertices = mesh->num_vertices;
+       m->texture = mesh->texture;
+       m->data_element3i  = (int *)p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (unsigned char*)p + m->num_triangles * sizeof(int[3]);
+       m->data_vertex3f   = (float *)p;memcpy(m->data_vertex3f  , mesh->data_vertex3f  , m->num_vertices * sizeof(float[3]));p = (unsigned char*)p + m->num_vertices * sizeof(float[3]);
+       m->data_texcoord2f = (float *)p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (unsigned char*)p + m->num_vertices * sizeof(float[2]);
+       m->data_color4f    = (float *)p;memcpy(m->data_color4f   , mesh->data_color4f   , m->num_vertices * sizeof(float[4]));p = (unsigned char*)p + m->num_vertices * sizeof(float[4]);
+       r_refdef.drawqueuesize += dq->size;
+}
+
+void DrawQ_LineLoop (drawqueuemesh_t *mesh, int flags)
+{
+       int size;
+       void *p;
+       drawqueue_t *dq;
+       drawqueuemesh_t *m;
+       size = sizeof(*dq);
+       size += sizeof(drawqueuemesh_t);
+       size += sizeof(int[3]) * mesh->num_triangles;
+       size += sizeof(float[3]) * mesh->num_vertices;
+       size += sizeof(float[2]) * mesh->num_vertices;
+       size += sizeof(float[4]) * mesh->num_vertices;
+       if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
+               return;
+       dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq->size = size;
+       dq->command = DRAWQUEUE_LINES;
+       dq->flags = flags;
+       dq->color = 0;
+       dq->x = 0;
+       dq->y = 0;
+       dq->scalex = 0;
+       dq->scaley = 0;
+       p = (void *)(dq + 1);
+       m = p;p = (unsigned char*)p + sizeof(drawqueuemesh_t);
        m->num_triangles = mesh->num_triangles;
        m->num_vertices = mesh->num_vertices;
        m->texture = mesh->texture;
-       m->data_element3i  = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (qbyte*)p + m->num_triangles * sizeof(int[3]);
-       m->data_vertex3f   = p;memcpy(m->data_vertex3f  , mesh->data_vertex3f  , m->num_vertices * sizeof(float[3]));p = (qbyte*)p + m->num_vertices * sizeof(float[3]);
-       m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (qbyte*)p + m->num_vertices * sizeof(float[2]);
-       m->data_color4f    = p;memcpy(m->data_color4f   , mesh->data_color4f   , m->num_vertices * sizeof(float[4]));p = (qbyte*)p + m->num_vertices * sizeof(float[4]);
+       m->data_element3i  = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (unsigned char*)p + m->num_triangles * sizeof(int[3]);
+       m->data_vertex3f   = p;memcpy(m->data_vertex3f  , mesh->data_vertex3f  , m->num_vertices * sizeof(float[3]));p = (unsigned char*)p + m->num_vertices * sizeof(float[3]);
+       m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (unsigned char*)p + m->num_vertices * sizeof(float[2]);
+       m->data_color4f    = p;memcpy(m->data_color4f   , mesh->data_color4f   , m->num_vertices * sizeof(float[4]));p = (unsigned char*)p + m->num_vertices * sizeof(float[4]);
+       r_refdef.drawqueuesize += dq->size;
+}
+
+//LordHavoc: FIXME: this is nasty!
+void DrawQ_LineWidth (float width)
+{
+       drawqueue_t *dq;
+       static int linewidth = 1;
+       if(width == linewidth)
+               return;
+       linewidth = width;
+       if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
+       {
+               Con_DPrint("DrawQueue full !\n");
+               return;
+       }
+       dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq->size = sizeof(*dq);
+       dq->command = DRAWQUEUE_LINEWIDTH;
+       dq->x = width;
+
+       r_refdef.drawqueuesize += dq->size;
+}
+
+//[515]: this is old, delete
+void DrawQ_Line (float width, float x1, float y1, float x2, float y2, float r, float g, float b, float alpha, int flags)
+{
+       drawqueue_t *dq;
+       if(width > 0)
+               DrawQ_LineWidth(width);
+       if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
+       {
+               Con_DPrint("DrawQueue full !\n");
+               return;
+       }
+       dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq->size = sizeof(*dq);
+       dq->command = DRAWQUEUE_LINES;
+       dq->x = x1;
+       dq->y = y1;
+       dq->scalex = x2;
+       dq->scaley = y2;
+       dq->flags = flags;
+       dq->color =  ((unsigned int) (r * 255.0f) << 24) | ((unsigned int) (g * 255.0f) << 16) | ((unsigned int) (b * 255.0f) << 8) | ((unsigned int) (alpha * 255.0f));
+
        r_refdef.drawqueuesize += dq->size;
 }
 
@@ -731,7 +847,7 @@ void DrawQ_SetClipArea(float x, float y, float width, float height)
                Con_DPrint("DrawQueue full !\n");
                return;
        }
-       dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize);
        dq->size = sizeof(*dq);
        dq->command = DRAWQUEUE_SETCLIP;
        dq->x = x;
@@ -752,7 +868,7 @@ void DrawQ_ResetClipArea(void)
                Con_DPrint("DrawQueue full !\n");
                return;
        }
-       dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize);
        dq->size = sizeof(*dq);
        dq->command = DRAWQUEUE_RESETCLIP;
        dq->x = 0;
@@ -776,9 +892,9 @@ void SCR_ScreenShot_f (void)
        static char oldname[MAX_QPATH];
        char base[MAX_QPATH];
        char filename[MAX_QPATH];
-       qbyte *buffer1;
-       qbyte *buffer2;
-       qbyte *buffer3;
+       unsigned char *buffer1;
+       unsigned char *buffer2;
+       unsigned char *buffer3;
        qboolean jpeg = (scr_screenshot_jpeg.integer != 0);
 
        sprintf (base, "screenshots/%s", scr_screenshot_name.string);
@@ -801,9 +917,9 @@ void SCR_ScreenShot_f (void)
 
        sprintf(filename, "%s%06d.%s", base, shotnumber, jpeg ? "jpg" : "tga");
 
-       buffer1 = Mem_Alloc(tempmempool, vid.width * vid.height * 3);
-       buffer2 = Mem_Alloc(tempmempool, vid.width * vid.height * 3);
-       buffer3 = Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18);
+       buffer1 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3);
+       buffer2 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3);
+       buffer3 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18);
 
        if (SCR_ScreenShot (filename, buffer1, buffer2, buffer3, 0, 0, vid.width, vid.height, false, false, false, jpeg, true))
                Con_Printf("Wrote %s\n", filename);
@@ -832,7 +948,7 @@ static double cl_capturevideo_starttime = 0;
 double cl_capturevideo_framerate = 0;
 static int cl_capturevideo_soundrate = 0;
 static int cl_capturevideo_frame = 0;
-static qbyte *cl_capturevideo_buffer = NULL;
+static unsigned char *cl_capturevideo_buffer = NULL;
 static qfile_t *cl_capturevideo_videofile = NULL;
 qfile_t *cl_capturevideo_soundfile = NULL;
 static short cl_capturevideo_rgbtoyuvscaletable[3][3][256];
@@ -843,7 +959,7 @@ void SCR_CaptureVideo_BeginVideo(void)
 {
        double gamma, g;
        unsigned int i;
-       qbyte out[44];
+       unsigned char out[44];
        if (cl_capturevideo_active)
                return;
        // soundrate is figured out on the first SoundFrame
@@ -852,7 +968,7 @@ void SCR_CaptureVideo_BeginVideo(void)
        cl_capturevideo_framerate = bound(1, cl_capturevideo_fps.value, 1000);
        cl_capturevideo_soundrate = 0;
        cl_capturevideo_frame = 0;
-       cl_capturevideo_buffer = Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18);
+       cl_capturevideo_buffer = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18);
        gamma = 1.0/scr_screenshot_gamma.value;
 
        /*
@@ -928,7 +1044,7 @@ Cr = R *  .500 + G * -.419 + B * -.0813 + 128.;
 void SCR_CaptureVideo_EndVideo(void)
 {
        int i, n;
-       qbyte out[44];
+       unsigned char out[44];
        if (!cl_capturevideo_active)
                return;
        cl_capturevideo_active = false;
@@ -942,7 +1058,7 @@ void SCR_CaptureVideo_EndVideo(void)
        // finish the wave file
        if (cl_capturevideo_soundfile)
        {
-               i = FS_Tell (cl_capturevideo_soundfile);
+               i = (int)FS_Tell (cl_capturevideo_soundfile);
                //"RIFF", (int) unknown (chunk size), "WAVE",
                //"fmt ", (int) 16 (chunk size), (short) format 1 (uncompressed PCM), (short) 2 channels, (int) unknown rate, (int) unknown bytes per second, (short) 4 bytes per sample (channels * bytes per channel), (short) 16 bits per channel
                //"data", (int) unknown (chunk size)
@@ -1081,12 +1197,12 @@ qboolean SCR_CaptureVideo_VideoFrame(int newframenum)
        }
 }
 
-void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate)
+void SCR_CaptureVideo_SoundFrame(unsigned char *bufstereo16le, size_t length, int rate)
 {
        if (!cl_capturevideo_soundfile)
                return;
        cl_capturevideo_soundrate = rate;
-       if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < 4 * length)
+       if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < (fs_offset_t)(4 * length))
        {
                Cvar_SetValueQuick(&cl_capturevideo, 0);
                Con_Printf("video sound saving failed on frame %i, out of disk space? stopping video capture.\n", cl_capturevideo_frame);
@@ -1140,7 +1256,7 @@ R_Envmap_f
 Grab six views for environment mapping tests
 ===============
 */
-struct
+struct envmapinfo_s
 {
        float angles[3];
        char *name;
@@ -1166,10 +1282,10 @@ envmapinfo[12] =
 static void R_Envmap_f (void)
 {
        int j, size;
-       char filename[256], basename[256];
-       qbyte *buffer1;
-       qbyte *buffer2;
-       qbyte *buffer3;
+       char filename[MAX_QPATH], basename[MAX_QPATH];
+       unsigned char *buffer1;
+       unsigned char *buffer2;
+       unsigned char *buffer3;
 
        if (Cmd_Argc() != 3)
        {
@@ -1197,12 +1313,12 @@ static void R_Envmap_f (void)
        r_refdef.width = size;
        r_refdef.height = size;
 
-       r_refdef.fov_x = 90;
-       r_refdef.fov_y = 90;
+       r_refdef.frustum_x = tan(90 * M_PI / 360.0);
+       r_refdef.frustum_y = tan(90 * M_PI / 360.0);
 
-       buffer1 = Mem_Alloc(tempmempool, size * size * 3);
-       buffer2 = Mem_Alloc(tempmempool, size * size * 3);
-       buffer3 = Mem_Alloc(tempmempool, size * size * 3 + 18);
+       buffer1 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3);
+       buffer2 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3);
+       buffer3 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3 + 18);
 
        for (j = 0;j < 12;j++)
        {
@@ -1241,7 +1357,7 @@ showlmp_t showlmp[SHOWLMP_MAXLABELS];
 void SHOWLMP_decodehide(void)
 {
        int i;
-       qbyte *lmplabel;
+       char *lmplabel;
        lmplabel = MSG_ReadString();
        for (i = 0;i < SHOWLMP_MAXLABELS;i++)
                if (showlmp[i].isactive && strcmp(showlmp[i].label, lmplabel) == 0)
@@ -1254,7 +1370,7 @@ void SHOWLMP_decodehide(void)
 void SHOWLMP_decodeshow(void)
 {
        int i, k;
-       qbyte lmplabel[256], picname[256];
+       char lmplabel[256], picname[256];
        float x, y;
        strlcpy (lmplabel,MSG_ReadString(), sizeof (lmplabel));
        strlcpy (picname, MSG_ReadString(), sizeof (picname));
@@ -1405,7 +1521,10 @@ void CL_UpdateScreen(void)
        }
        R_Shadow_EditLights_DrawSelectedLightProperties();
 
-       SCR_DrawConsole();
+       if(!csqc_loaded)
+               SCR_DrawConsole();
+
+       SCR_DrawBrand();
 
        SCR_UpdateScreen();
 }