]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
fixed loadgame to support stock quake savegames (which have 64 lightstyles, darkplace...
[xonotic/darkplaces.git] / cl_screen.c
index 5519df6e7a1349371480ddc31246fbcea8605b50..d862eaf1f7ab21204b78a4d3a188c4c4bdd4fd06 100644 (file)
@@ -3,32 +3,34 @@
 #include "cl_video.h"
 #include "jpeg.h"
 #include "cl_collision.h"
-
-cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"};
-cvar_t scr_fov = {CVAR_SAVE, "fov","90"};      // 1 - 170
-cvar_t scr_conspeed = {CVAR_SAVE, "scr_conspeed","900"}; // LordHavoc: quake used 300
-cvar_t scr_conalpha = {CVAR_SAVE, "scr_conalpha", "1"};
-cvar_t scr_conbrightness = {CVAR_SAVE, "scr_conbrightness", "0.2"};
-cvar_t scr_conforcewhiledisconnected = {CVAR_SAVE, "scr_conforcewhiledisconnected", "1"};
-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_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 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"};
-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"};
-cvar_t cl_capturevideo_rawrgb = {0, "cl_capturevideo_rawrgb", "0"};
-cvar_t cl_capturevideo_rawyv12 = {0, "cl_capturevideo_rawyv12", "0"};
-cvar_t r_textshadow = {0, "r_textshadow", "0"};
-cvar_t r_letterbox = {0, "r_letterbox", "0"};
+#include "csprogs.h"
+
+cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100", "how large the view should be, 110 disables inventory bar, 120 disables status bar"};
+cvar_t scr_fov = {CVAR_SAVE, "fov","90", "field of vision, 1-170 degrees, default 90, some players use 110-130"};      // 1 - 170
+cvar_t scr_conspeed = {CVAR_SAVE, "scr_conspeed","900", "speed of console open/close"}; // LordHavoc: quake used 300
+cvar_t scr_conalpha = {CVAR_SAVE, "scr_conalpha", "1", "opacity of console background"};
+cvar_t scr_conbrightness = {CVAR_SAVE, "scr_conbrightness", "0.2", "brightness of console background (0 = black, 1 = image)"};
+cvar_t scr_conforcewhiledisconnected = {CVAR_SAVE, "scr_conforcewhiledisconnected", "1", "forces fullscreen console while disconnected"};
+cvar_t scr_centertime = {0, "scr_centertime","2", "how long centerprint messages show"};
+cvar_t scr_showram = {CVAR_SAVE, "showram","1", "show ram icon if low on surface cache memory (not used)"};
+cvar_t scr_showturtle = {CVAR_SAVE, "showturtle","0", "show turtle icon when framerate is too low (not used)"};
+cvar_t scr_showpause = {CVAR_SAVE, "showpause","1" "show pause icon when game is paused"};
+cvar_t scr_showbrand = {0, "showbrand","0", "shows gfx/brand.tga in a corner of the screen (different values select different positions, including centered)"};
+cvar_t scr_printspeed = {0, "scr_printspeed","8", "speed of intermission printing (episode end texts)"};
+cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640" "virtual width of 2D graphics system"};
+cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480", "virtual height of 2D graphics system"};
+cvar_t vid_pixelheight = {CVAR_SAVE, "vid_pixelheight", "1", "adjusts vertical field of vision to account for non-square pixels (1280x1024 on a CRT monitor for example)"};
+cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","1", "save jpeg instead of targa"};
+cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9", "image quality of saved jpeg"};
+cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2", "gamma correction on saved screenshots and videos, 1.0 saves unmodified images"};
+// scr_screenshot_name is defined in fs.c
+cvar_t cl_capturevideo = {0, "cl_capturevideo", "0", "enables saving of video to a file or files (default is .tga files, if scr_screenshot_jpeg is on it saves .jpg files (VERY SLOW), if any rawrgb or rawyv12 are on it saves those formats instead, note that scr_screenshot_gamma affects the brightness of the output)"};
+cvar_t cl_capturevideo_sound = {0, "cl_capturevideo_sound", "0", "enables saving of sound to a .wav file (warning: this requires exact sync, if your hard drive can't keep up it will abort, if your graphics can't keep up it will save duplicate frames to maintain sound sync)"};
+cvar_t cl_capturevideo_fps = {0, "cl_capturevideo_fps", "30", "how many frames per second to save (29.97 for NTSC, 30 for typical PC video, 15 can be useful)"};
+cvar_t cl_capturevideo_rawrgb = {0, "cl_capturevideo_rawrgb", "0", "saves a single .rgb video file containing raw RGB images (you'll need special processing tools to encode this to something more useful)"};
+cvar_t cl_capturevideo_rawyv12 = {0, "cl_capturevideo_rawyv12", "0", "saves a single .yv12 video file containing raw YV12 (luma plane, then half resolution chroma planes, first chroma blue then chroma red, this is the format used internally by many encoders, some tools can read it directly)"};
+cvar_t r_textshadow = {0, "r_textshadow", "0" "draws a shadow on all text to improve readability"};
+cvar_t r_letterbox = {0, "r_letterbox", "0", "reduces vertical height of view to simulate a letterboxed movie effect (can be used by mods for cutscenes)"};
 
 int jpeg_supported = false;
 
@@ -61,7 +63,7 @@ static vec4_t string_colors[] =
        {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        
+       {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},
@@ -91,9 +93,9 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
        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 ) {
@@ -117,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 >= STRING_COLORS_COUNT ) {
+                                       if( colorindex >= (int)STRING_COLORS_COUNT ) {
                                                // undo the last operation
                                                colorindex /= 10;
                                                break;
@@ -127,7 +129,7 @@ void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float
                                } while( len > 0 && '0' <= *current && *current <= '9' );
                                // set the color
                                color = string_colors[colorindex];
-                               // we jump over the color tag 
+                               // we jump over the color tag
                                start = current;
                        }
                }
@@ -161,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;
@@ -199,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)
@@ -209,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
@@ -225,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;
@@ -328,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);
+}
 
 //=============================================================================
 
@@ -428,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;
@@ -463,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)
@@ -567,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);
@@ -583,10 +618,10 @@ void CL_Screen_Init(void)
        Cvar_RegisterVariable (&r_textshadow);
        Cvar_RegisterVariable (&r_letterbox);
 
-       Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
-       Cmd_AddCommand ("sizedown",SCR_SizeDown_f);
-       Cmd_AddCommand ("screenshot",SCR_ScreenShot_f);
-       Cmd_AddCommand ("envmap", R_Envmap_f);
+       Cmd_AddCommand ("sizeup",SCR_SizeUp_f, "increase view size (increases viewsize cvar)");
+       Cmd_AddCommand ("sizedown",SCR_SizeDown_f, "decrease view size (decreases viewsize cvar)");
+       Cmd_AddCommand ("screenshot",SCR_ScreenShot_f, "takes a screenshot of the next rendered frame");
+       Cmd_AddCommand ("envmap", R_Envmap_f, "render a cubemap (skybox) of the current scene");
 
        scr_initialized = true;
 }
@@ -610,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--);
@@ -626,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;
@@ -703,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;
@@ -713,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  = 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  = (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 = (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;
 }
 
@@ -732,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;
@@ -753,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;
@@ -777,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);
@@ -802,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);
@@ -833,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];
@@ -844,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
@@ -853,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;
 
        /*
@@ -929,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;
@@ -943,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)
@@ -1082,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);
@@ -1141,7 +1256,7 @@ R_Envmap_f
 Grab six views for environment mapping tests
 ===============
 */
-struct
+struct envmapinfo_s
 {
        float angles[3];
        char *name;
@@ -1167,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)
        {
@@ -1198,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++)
        {
@@ -1242,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)
@@ -1255,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));
@@ -1406,7 +1521,10 @@ void CL_UpdateScreen(void)
        }
        R_Shadow_EditLights_DrawSelectedLightProperties();
 
-       SCR_DrawConsole();
+       if(!csqc_loaded)
+               SCR_DrawConsole();
+
+       SCR_DrawBrand();
 
        SCR_UpdateScreen();
 }